2021-03-27 01:06:25 +01:00
|
|
|
|
#include <automask.h>
|
2016-09-09 13:58:28 +00:00
|
|
|
|
#include <relapp.h>
|
|
|
|
|
|
|
|
|
|
#include "../ve/velib.h"
|
|
|
|
|
|
|
|
|
|
#include "ef0.h"
|
|
|
|
|
#include "ef0100.h"
|
|
|
|
|
#include "ef0101.h"
|
|
|
|
|
|
|
|
|
|
#include <comuni.h>
|
|
|
|
|
#include <doc.h>
|
2019-06-13 17:40:53 +02:00
|
|
|
|
#include "../cg/cfban.h"
|
|
|
|
|
#include "tabutil.h"
|
|
|
|
|
#include "utility.h"
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
class TEffetti_mask : public TIBAN_mask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
bool on_sheet_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
void calcola_totali();
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TEffetti_mask() : TIBAN_mask("ef0100a", F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, F_IBAN, F_BBAN) {}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2016-09-09 13:58:28 +00:00
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
|
// Classe per la gestione di effetti con metodi standard di: //
|
|
|
|
|
// inserimento, modifica, cancellazione. //
|
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TVariazione_effetti: public TRelation_application
|
|
|
|
|
{
|
|
|
|
|
TMask *_msk;
|
|
|
|
|
TEffetto *_effetto;
|
|
|
|
|
TRelation *_rel;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void init_query_mode(TMask&);
|
|
|
|
|
virtual void init_insert_mode(TMask&);
|
|
|
|
|
virtual bool get_next_key(TToken_string& key);
|
|
|
|
|
virtual void init_modify_mode(TMask&);
|
|
|
|
|
|
|
|
|
|
TSheet_field& cess_sheet() const;
|
|
|
|
|
TSheet_field& righe_sheet() const;
|
|
|
|
|
void common_f(const TMask& m);
|
|
|
|
|
virtual int read(TMask& m);
|
|
|
|
|
virtual int rewrite(const TMask& m);
|
|
|
|
|
virtual int write(const TMask& m);
|
|
|
|
|
virtual bool remove();
|
|
|
|
|
bool user_create();
|
|
|
|
|
bool user_destroy();
|
2022-10-02 21:36:57 +02:00
|
|
|
|
virtual TMask* _get_mask(int mode) {return _msk;}
|
2016-09-09 13:58:28 +00:00
|
|
|
|
virtual bool changing_mask(int mode) {return false;}
|
|
|
|
|
virtual void ini2mask(TConfig& ini, TMask& m, bool query);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual bool protected_record(TRectype&);
|
|
|
|
|
virtual TRelation* get_relation() const {return _rel;}
|
2021-03-25 11:55:50 +01:00
|
|
|
|
TVariazione_effetti(): _msk(nullptr), _effetto(nullptr), _rel(nullptr) {}
|
2019-07-08 17:53:32 +02:00
|
|
|
|
virtual ~TVariazione_effetti() = default;
|
2016-09-09 13:58:28 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// restituisce un riferimento all' applicazione
|
2021-03-25 11:55:50 +01:00
|
|
|
|
inline TVariazione_effetti& app() { return (TVariazione_effetti&)main_app(); }
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
|
|
|
|
// quando si va in query mode resetta i due campi della maschera
|
|
|
|
|
// relativi ai totali
|
|
|
|
|
void TVariazione_effetti::init_query_mode(TMask&)
|
|
|
|
|
{
|
|
|
|
|
_msk->reset(F_TOTIMP);
|
|
|
|
|
_msk->reset(F_TOTIMPVAL);
|
|
|
|
|
_msk->enable(F_TIPOCF);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TVariazione_effetti::protected_record(TRectype& rec)
|
|
|
|
|
{
|
|
|
|
|
return rec.get("TIPODIST").not_empty() || rec.get("NDIST").not_empty() || rec.get("NRIGADIST").not_empty();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// quando si va in insert mode resetta i due campi della maschera relativi
|
|
|
|
|
// ai totali, inserisce una riga vuota nello sheet e setta il flag dirty
|
|
|
|
|
// dello sheet per forzare l'utente all'inserimento di una riga
|
|
|
|
|
void TVariazione_effetti::init_insert_mode(TMask&)
|
|
|
|
|
{
|
|
|
|
|
TToken_string riga("|||||||||");
|
|
|
|
|
righe_sheet().row(0) = riga;
|
|
|
|
|
righe_sheet().set_dirty();
|
|
|
|
|
_msk->enable(F_TIPOCF);
|
|
|
|
|
}
|
|
|
|
|
void TVariazione_effetti::ini2mask(TConfig& ini, TMask& m, bool query)
|
|
|
|
|
{
|
|
|
|
|
TRelation_application::ini2mask(ini, m, query);
|
|
|
|
|
TToken_string & row = righe_sheet().row(0);
|
|
|
|
|
|
|
|
|
|
row.add(ini.get(REFF_IMPORTO), righe_sheet().cid2index(F_IMPEFF));
|
|
|
|
|
row.add(ini.get(REFF_IMPORTOVAL), righe_sheet().cid2index(F_IMPEFFVAL));
|
|
|
|
|
row.add(ini.get(REFF_NFATT), righe_sheet().cid2index(F_NUMFATT));
|
|
|
|
|
row.add(ini.get(REFF_ANNO), righe_sheet().cid2index(F_ANNO));
|
|
|
|
|
row.add(ini.get(REFF_NUMPART), righe_sheet().cid2index(F_NUMPART));
|
|
|
|
|
row.add(ini.get(REFF_NRATA), righe_sheet().cid2index(F_NUMRATA));
|
|
|
|
|
row.add(ini.get(REFF_ACCSAL), righe_sheet().cid2index(F_ACCSAL));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TVariazione_effetti::init_modify_mode(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
m.disable(F_TIPOCF);
|
|
|
|
|
m.efield(F_IBAN_STATO).validate(K_TAB);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ritorna il prossimo numero valido di chiave
|
|
|
|
|
bool TVariazione_effetti::get_next_key(TToken_string& key)
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile& effetti = _rel->lfile();
|
|
|
|
|
long nprogtr = 1L;
|
|
|
|
|
if ( !effetti.empty() )
|
|
|
|
|
{
|
|
|
|
|
effetti.zero();
|
|
|
|
|
effetti.setkey(1);
|
|
|
|
|
effetti.last();
|
|
|
|
|
if ( effetti.good() )
|
|
|
|
|
nprogtr += effetti.get_long(EFF_NPROGTR);
|
|
|
|
|
}
|
|
|
|
|
key.format("%d|%ld",F_NPROGTR,nprogtr);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ritorna un riferimento allo sheet dei cessionari
|
|
|
|
|
TSheet_field& TVariazione_effetti::cess_sheet() const
|
|
|
|
|
{
|
|
|
|
|
return _msk->sfield(F_SHEET_EFF);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ritorna un riferimento allo sheet delle righe
|
|
|
|
|
TSheet_field& TVariazione_effetti::righe_sheet() const
|
|
|
|
|
{
|
|
|
|
|
return _msk->sfield(F_SHEET_RIGHE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// metodo che permette di scivere su file i dati inseriti nella maschera;
|
|
|
|
|
// comune alla write e alla rewrite
|
|
|
|
|
void TVariazione_effetti::common_f(const TMask& m)
|
|
|
|
|
{
|
|
|
|
|
const long nprogtr = m.get_long(F_NPROGTR);
|
|
|
|
|
m.autosave(*_rel);
|
|
|
|
|
_effetto->head() = _rel->curr();
|
|
|
|
|
TSheet_field& shcess = cess_sheet();
|
|
|
|
|
TSheet_field& shrighe = righe_sheet();
|
|
|
|
|
int items = shcess.items();
|
|
|
|
|
_effetto->destroy_rows_c();
|
|
|
|
|
int ii = 1;
|
|
|
|
|
int i;
|
|
|
|
|
// scarico tutte le righe dei cessionari dallo sheet sul file
|
|
|
|
|
for (i = 0; i < items; i++)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = shcess.row(i);
|
|
|
|
|
if ( row.items()== 0 ) continue; // salta le righe vuote
|
|
|
|
|
TRectype& rec = _effetto->row_c(ii, true);
|
|
|
|
|
row.restart();
|
|
|
|
|
rec.zero();
|
|
|
|
|
rec.put(CES_NPROGTR, nprogtr);
|
|
|
|
|
rec.put(CES_NRIGA, ii);
|
|
|
|
|
rec.put(CES_RAGSOC, row.get());
|
|
|
|
|
rec.put(CES_LOCALITA, row.get());
|
|
|
|
|
rec.put(CES_STATO, row.get_int());
|
|
|
|
|
rec.put(CES_COM, row.get());
|
|
|
|
|
ii++;
|
|
|
|
|
}
|
|
|
|
|
items = shrighe.items();
|
|
|
|
|
_effetto->destroy_rows_r();
|
|
|
|
|
ii = 1;
|
|
|
|
|
// scarico tutte le righe dell'effetto dallo sheet sul file
|
|
|
|
|
for (i = 0; i < items; i++)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = shrighe.row(i);
|
|
|
|
|
real imp_eff(row.get(shrighe.cid2index(F_IMPEFF)));
|
2016-09-14 14:55:05 +00:00
|
|
|
|
if (imp_eff == ZERO) continue; // salta le righe con importo nullo
|
2016-09-09 13:58:28 +00:00
|
|
|
|
row.restart();
|
|
|
|
|
TRectype& rec = _effetto->row_r(ii, true);
|
|
|
|
|
rec.zero();
|
|
|
|
|
rec.put(REFF_NPROGTR, nprogtr);
|
|
|
|
|
rec.put(REFF_NRIGATR, ii);
|
|
|
|
|
rec.put(REFF_IMPORTO, row.get());
|
|
|
|
|
rec.put(REFF_IMPORTOVAL, row.get());
|
|
|
|
|
rec.put(REFF_CODNUM, row.get());
|
|
|
|
|
rec.put(REFF_PROVV, row.get()[0]);
|
|
|
|
|
rec.put(REFF_ANNODOC, row.get_int());
|
|
|
|
|
rec.put(REFF_NFATT, row.get());
|
|
|
|
|
rec.put(REFF_DATAFATT, row.get());
|
|
|
|
|
rec.put(REFF_IMPFATT, row.get());
|
|
|
|
|
rec.put(REFF_IMPFATTVAL, row.get());
|
|
|
|
|
rec.put(REFF_ANNO, row.get_int());
|
|
|
|
|
rec.put(REFF_NUMPART, row.get());
|
|
|
|
|
rec.put(REFF_NRIGA, row.get_int());
|
|
|
|
|
rec.put(REFF_NRATA, row.get_int());
|
|
|
|
|
rec.put(REFF_ACCSAL, row.get());
|
|
|
|
|
ii++;
|
|
|
|
|
}
|
|
|
|
|
_effetto->renum(_effetto->numero());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// carica nella maschera i dati dai files
|
|
|
|
|
int TVariazione_effetti::read(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
m.autoload(*_rel);
|
|
|
|
|
int err = _rel->status();
|
|
|
|
|
if (err == NOERR)
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile& f = _rel->lfile(LF_EFFETTI);
|
|
|
|
|
// legge l'effetto dal record corrente della relazione
|
|
|
|
|
err = _effetto->read(f, _rel->curr());
|
2021-03-25 11:55:50 +01:00
|
|
|
|
|
2016-09-09 13:58:28 +00:00
|
|
|
|
if (err == NOERR)
|
|
|
|
|
{
|
|
|
|
|
TString16 codcom(3);
|
|
|
|
|
TToken_string riga(80);
|
|
|
|
|
TSheet_field& shcess = cess_sheet();
|
2021-03-25 11:55:50 +01:00
|
|
|
|
|
2016-09-09 13:58:28 +00:00
|
|
|
|
shcess.reset();
|
|
|
|
|
TSheet_field& shrighe = righe_sheet();
|
|
|
|
|
shrighe.reset();
|
|
|
|
|
int items = _effetto->rows_c();
|
2021-03-25 11:55:50 +01:00
|
|
|
|
|
|
|
|
|
// m.set(F_IBAN, _rel->curr().get(EFF_IBAN), 0x3);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
// carica tutti i cessionari nello sheet dal file
|
2021-03-25 11:55:50 +01:00
|
|
|
|
for (int i = 1; i <= items; i++)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
|
|
|
|
const TRectype& rec = _effetto->row_c(i);
|
|
|
|
|
riga.cut(0);
|
|
|
|
|
riga.add(rec.get(CES_RAGSOC));
|
|
|
|
|
riga.add(rec.get(CES_LOCALITA));
|
|
|
|
|
// per caricare nello sheet dei cessionari la denominazione
|
|
|
|
|
// del comune di cui si conosce il codice
|
|
|
|
|
codcom = rec.get(CES_STATO);
|
|
|
|
|
codcom << '|' << rec.get(CES_COM);
|
|
|
|
|
riga.add(codcom);
|
|
|
|
|
|
|
|
|
|
const TRectype& com = cache().get(LF_COMUNI, codcom);
|
|
|
|
|
riga.add(com.get(COM_DENCOM));
|
|
|
|
|
|
|
|
|
|
shcess.row(i-1)=riga;
|
|
|
|
|
}
|
|
|
|
|
items = _effetto->rows_r();
|
2021-03-25 11:55:50 +01:00
|
|
|
|
for (int i = 1; i <= items; i++)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
|
|
|
|
const TRectype& rec = _effetto->row_r(i);
|
|
|
|
|
riga.cut(0);
|
|
|
|
|
riga.add(rec.get(REFF_IMPORTO));
|
|
|
|
|
riga.add(rec.get(REFF_IMPORTOVAL));
|
|
|
|
|
riga.add(rec.get(REFF_CODNUM));
|
|
|
|
|
riga.add(rec.get(REFF_PROVV));
|
|
|
|
|
riga.add(rec.get(REFF_ANNODOC));
|
|
|
|
|
riga.add(rec.get(REFF_NFATT));
|
|
|
|
|
riga.add(rec.get(REFF_DATAFATT));
|
|
|
|
|
riga.add(rec.get(REFF_IMPFATT));
|
|
|
|
|
riga.add(rec.get(REFF_IMPFATTVAL));
|
|
|
|
|
riga.add(rec.get(REFF_ANNO));
|
|
|
|
|
riga.add(rec.get(REFF_NUMPART));
|
|
|
|
|
riga.add(rec.get(REFF_NRIGA));
|
|
|
|
|
riga.add(rec.get(REFF_NRATA));
|
|
|
|
|
riga.add(rec.get(REFF_ACCSAL));
|
|
|
|
|
shrighe.row(i - 1) = riga;
|
|
|
|
|
shrighe.check_row(i - 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// riscrive effetto
|
|
|
|
|
int TVariazione_effetti::rewrite(const TMask& m)
|
|
|
|
|
{
|
|
|
|
|
common_f(m);// scarica i dati dalla maschera
|
|
|
|
|
TLocalisamfile& f = _rel->lfile(LF_EFFETTI);
|
|
|
|
|
return _effetto->rewrite(f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// scrive i dati su file
|
|
|
|
|
int TVariazione_effetti::write(const TMask& m)
|
|
|
|
|
{
|
|
|
|
|
common_f(m);// scarica i dati dalla maschera
|
|
|
|
|
TLocalisamfile& f = _rel->lfile(LF_EFFETTI);
|
|
|
|
|
int err = _effetto->write(f);
|
|
|
|
|
if (err == NOERR)
|
|
|
|
|
_rel->read();// rilegge per posizionare correttamente la relazione
|
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// rimuove l'effetto
|
|
|
|
|
bool TVariazione_effetti::remove()
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile& f = _rel->lfile(LF_EFFETTI);
|
|
|
|
|
int err = _effetto->remove(f);
|
|
|
|
|
return err == NOERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// crea la relap
|
|
|
|
|
bool TVariazione_effetti::user_create()
|
|
|
|
|
{
|
|
|
|
|
open_files(LF_TAB, LF_TABCOM, LF_EFFETTI, LF_REFFETTI, LF_CESS,
|
|
|
|
|
LF_COMUNI, LF_DOC, LF_RIGHEDOC,
|
|
|
|
|
LF_CLIFO, LF_CFVEN, LF_OCCAS, 0);
|
|
|
|
|
_rel = new TRelation(LF_EFFETTI);
|
|
|
|
|
_effetto = new TEffetto;
|
2021-03-25 11:55:50 +01:00
|
|
|
|
_msk = new TEffetti_mask ;
|
2016-09-09 13:58:28 +00:00
|
|
|
|
righe_sheet().set_append(true);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// distrugge la relap
|
|
|
|
|
bool TVariazione_effetti::user_destroy()
|
|
|
|
|
{
|
|
|
|
|
delete _msk;
|
|
|
|
|
delete _effetto;
|
|
|
|
|
delete _rel;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
void TEffetti_mask::calcola_totali()
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
TSheet_field& sf = sfield(F_SHEET_RIGHE);
|
|
|
|
|
int items = sf.items();
|
|
|
|
|
real impeff, impeffval;
|
|
|
|
|
|
|
|
|
|
// scandisco tutte le righe dello sheet e ne prendo gli importi
|
|
|
|
|
// (in lire ed in valuta) e li sommo al totale
|
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
|
{
|
|
|
|
|
impeff += sf.get_real_row_cell(i, F_IMPEFF);
|
|
|
|
|
impeffval += sf.get_real_row_cell(i, F_IMPEFFVAL);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
2021-03-25 11:55:50 +01:00
|
|
|
|
set(F_TOTIMP, impeff);
|
|
|
|
|
set(F_TOTIMPVAL, impeffval);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
bool TEffetti_mask::on_sheet_event(TOperable_field& o, TField_event e, long jolly)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
TMask& m = o.mask();
|
|
|
|
|
short id = o.dlg();
|
2020-10-05 22:29:09 +02:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
switch (id)
|
|
|
|
|
{
|
|
|
|
|
case F_NUMFATT:
|
|
|
|
|
if (e == fe_modify || !is_running())
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
TEdit_field & ef = (TEdit_field &)o;
|
|
|
|
|
CheckType c = ef.check_type();
|
|
|
|
|
|
|
|
|
|
ef.check_type(CHECK_REQUIRED);
|
|
|
|
|
const bool ok = ef.check();
|
|
|
|
|
ef.check_type(c);
|
|
|
|
|
m.enable(F_DATAFATT, !ok);
|
|
|
|
|
m.enable(F_IMPFATT, !ok);
|
|
|
|
|
m.enable(F_IMPFATTVAL, !ok && is_true_value(get(F_CODVAL)));
|
|
|
|
|
if (is_running() && ok && e == fe_modify)
|
|
|
|
|
{
|
|
|
|
|
const TDocumento d(ef.browse()->cursor()->curr());
|
|
|
|
|
const real imp = d.totale_doc();
|
2020-10-05 22:29:09 +02:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
m.set(F_DATAFATT, d.get(DOC_DATADOC));
|
|
|
|
|
if (d.in_valuta())
|
|
|
|
|
{
|
|
|
|
|
const TString16 codval = d.get(DOC_CODVAL);
|
|
|
|
|
TCurrency val(imp, codval, d.get_real(DOC_CAMBIO));
|
2020-10-05 22:29:09 +02:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
val.change_to_firm_val();
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
const real& lit = val.get_num();
|
|
|
|
|
|
|
|
|
|
m.set(F_IMPFATT, lit);
|
|
|
|
|
m.set(F_IMPFATTVAL, imp);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m.set(F_IMPFATT, imp);
|
|
|
|
|
m.reset(F_IMPFATTVAL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case F_SHEET_RIGHE:
|
|
|
|
|
switch (e)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
case se_leave:
|
|
|
|
|
if (sfield(F_SHEET_RIGHE).focusdirty())
|
|
|
|
|
calcola_totali();
|
|
|
|
|
return true;
|
|
|
|
|
case se_query_del:
|
|
|
|
|
if (sfield(F_SHEET_RIGHE).items() == 1)
|
|
|
|
|
return error_box(TR("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!"));
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
break;
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
bool TEffetti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
const short id = o.dlg();
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
switch (id)
|
|
|
|
|
{
|
|
|
|
|
case F_CODCF:
|
|
|
|
|
if (e == fe_modify)
|
|
|
|
|
{
|
|
|
|
|
const char tipocf = get(F_TIPOCF)[0];
|
|
|
|
|
const long codcf = get_long(F_CODCF);
|
|
|
|
|
TCli_for & cf = (TCli_for &)cached_clifor(tipocf, codcf);
|
|
|
|
|
const TString & iban = cf.get_iban();
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2022-10-06 11:35:09 +02:00
|
|
|
|
// if (iban.full())
|
2021-03-25 11:55:50 +01:00
|
|
|
|
set(F_IBAN, iban, 0x3);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
TToken_string& banp = cf.get_ban_pres();
|
|
|
|
|
|
|
|
|
|
if (banp.full())
|
|
|
|
|
{
|
|
|
|
|
set(F_CODABIP, banp.get());
|
|
|
|
|
set(F_CODCABP, banp.get());
|
|
|
|
|
set(F_PROG, banp.get());
|
|
|
|
|
efield(F_PROG).validate(K_TAB);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
case F_CODVAL:
|
|
|
|
|
if (e == fe_init || e == fe_modify)
|
|
|
|
|
{
|
2016-09-09 13:58:28 +00:00
|
|
|
|
// se non c'e valuta o se <20> lire disabilitato i campi collegati
|
2021-03-25 11:55:50 +01:00
|
|
|
|
const bool valuta = is_true_value(o.get());
|
|
|
|
|
TSheet_field& sf = sfield(F_SHEET_RIGHE);
|
|
|
|
|
|
|
|
|
|
enable(-1, valuta);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
if (!valuta)
|
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
reset(-1);
|
|
|
|
|
reset(F_TOTIMPVAL);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
for (int i = sf.items() - 1; i >= 0; i--)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = sf.row(i);
|
2021-03-25 11:55:50 +01:00
|
|
|
|
|
|
|
|
|
sf.set_row_cell(F_IMPEFFVAL, ZERO, i);
|
|
|
|
|
sf.set_row_cell(F_IMPFATTVAL, ZERO, i);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sf.enable_column(F_IMPEFFVAL, valuta);
|
2021-03-25 11:55:50 +01:00
|
|
|
|
sf.enable_column(F_IMPFATTVAL, valuta);
|
|
|
|
|
if (o.focusdirty())
|
2016-09-09 13:58:28 +00:00
|
|
|
|
sf.force_update();
|
|
|
|
|
}
|
2021-03-25 11:55:50 +01:00
|
|
|
|
return true;
|
|
|
|
|
break;
|
2022-10-06 11:35:09 +02:00
|
|
|
|
case F_IBAN_STATO:
|
|
|
|
|
if (mode() == MODE_MOD && e == fe_init)
|
|
|
|
|
{
|
|
|
|
|
TRelation * rel = app().get_relation();
|
|
|
|
|
|
|
|
|
|
if (rel != nullptr)
|
|
|
|
|
{
|
|
|
|
|
TRectype & rec = rel->lfile().curr();
|
|
|
|
|
|
|
|
|
|
if (rec.get(EFF_IBAN).empty())
|
|
|
|
|
{
|
|
|
|
|
set(F_CODABI, rec.get(EFF_CODABI));
|
|
|
|
|
set(F_CODCAB, rec.get(EFF_CODCAB));
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-03-05 16:27:23 +01:00
|
|
|
|
break;
|
2021-03-25 11:55:50 +01:00
|
|
|
|
case F_DATASCAD:
|
|
|
|
|
if (e == fe_close)
|
|
|
|
|
{
|
|
|
|
|
const TDate datascad = get_date(F_DATASCAD);
|
|
|
|
|
TSheet_field& sf = sfield(F_SHEET_RIGHE);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
FOR_EACH_SHEET_ROW(sf, r, row)
|
|
|
|
|
{
|
|
|
|
|
TDate datafat = row->get(F_DATAFATT - FIRST_FIELD);
|
|
|
|
|
|
|
|
|
|
if (datascad < datafat)
|
|
|
|
|
return error_box(FR("La data fattura della riga %d <20> successiva alla data di scadenza"), r + 1);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
2021-03-25 11:55:50 +01:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
case F_MANDATO:
|
|
|
|
|
if (e == fe_modify && !o.empty())
|
|
|
|
|
efield(F_IBAN).on_hit();
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
case F_CAMBIO:
|
|
|
|
|
if (e == fe_modify)
|
|
|
|
|
{
|
|
|
|
|
const TString& valuta = get(F_CODVAL);
|
|
|
|
|
|
|
|
|
|
if (is_true_value(valuta))
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
const real cambio = get_real(F_CAMBIO);
|
|
|
|
|
|
|
|
|
|
TSheet_field& sf = sfield(F_SHEET_RIGHE);
|
|
|
|
|
int items = sf.items();
|
|
|
|
|
|
|
|
|
|
// scandisco tutte le righe dello sheet e modifico gli importi in lire
|
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
|
{
|
|
|
|
|
TCurrency val(sf.get_real_row_cell(i, F_IMPEFFVAL), valuta, cambio);
|
|
|
|
|
|
|
|
|
|
val.change_to_firm_val();
|
|
|
|
|
sf.set_row_cell(F_IMPEFF, val.get_num(), i);
|
|
|
|
|
}
|
|
|
|
|
if (o.focusdirty())
|
|
|
|
|
sf.force_update();
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-03-25 11:55:50 +01:00
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
case F_EFFCONT:
|
|
|
|
|
if (e == fe_init || e == fe_modify)
|
|
|
|
|
{
|
|
|
|
|
const bool da_contab = !get_bool(F_EFFCONT);
|
|
|
|
|
TSheet_field& sf = sfield(F_SHEET_RIGHE);
|
|
|
|
|
|
|
|
|
|
sf.enable_column(F_ANNO, da_contab);
|
|
|
|
|
sf.enable_column(F_NUMPART, da_contab);
|
|
|
|
|
sf.enable_column(F_NUMRIGA, da_contab);
|
|
|
|
|
sf.enable_column(F_NUMRATA, da_contab);
|
|
|
|
|
sf.enable_column(F_ACCSAL, da_contab);
|
|
|
|
|
sf.force_update();
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
case F_IMPEFFVAL:
|
|
|
|
|
case F_IMPEFF:
|
|
|
|
|
if (e == fe_modify)
|
|
|
|
|
sfield(F_SHEET_RIGHE).set_focusdirty();
|
|
|
|
|
break;
|
|
|
|
|
case F_SHEET_RIGHE:
|
|
|
|
|
return on_sheet_event(o, e, jolly);
|
|
|
|
|
default:
|
|
|
|
|
if (jolly > 0)
|
|
|
|
|
return on_sheet_event(o, e, jolly);
|
|
|
|
|
break;
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
2021-03-25 11:55:50 +01:00
|
|
|
|
return TIBAN_mask::on_field_event(o, e, jolly);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
/*
|
|
|
|
|
bool TVariazione_effetti::iban_handler(TMask_field& f, KEY k)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
if (f.to_check(k, true))
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
const TString & iban = f.get();
|
|
|
|
|
|
|
|
|
|
m.set(F_IBAN_STATO, iban.left(2), 0x3);
|
|
|
|
|
set_iban_fields(iban, m, F_BBAN, F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, -1, 0);
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
bool TVariazione_effetti::iso_handler(TMask_field& f, KEY k)
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
if (f.initial_check(k) || f.running_check(k))
|
2016-09-09 13:58:28 +00:00
|
|
|
|
{
|
2021-03-25 11:55:50 +01:00
|
|
|
|
static TString __last_iso;
|
|
|
|
|
TMask &m = f.mask();
|
|
|
|
|
const TString & iso = f.get();
|
|
|
|
|
const bool italy = iso.blank() || iso == "IT";
|
2016-09-09 13:58:28 +00:00
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
m.show(F_BBAN, !italy);
|
|
|
|
|
m.show(F_BBAN_CONTO, italy);
|
|
|
|
|
if (f.running_check(k))
|
|
|
|
|
{
|
|
|
|
|
if (iso != __last_iso)
|
|
|
|
|
{
|
|
|
|
|
const TString iban = m.get(F_IBAN);
|
|
|
|
|
|
|
|
|
|
set_iban_fields(iban.blank() || iban.left(2) != iso ? iso : iban, m, F_BBAN, F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, -1, 0);
|
|
|
|
|
}
|
|
|
|
|
__last_iso = iso;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
enable_iban_fields(m, F_BBAN, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, -1, italy, 0);
|
|
|
|
|
__last_iso = "INV";
|
|
|
|
|
}
|
2016-09-09 13:58:28 +00:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 11:55:50 +01:00
|
|
|
|
per documenti
|
|
|
|
|
*/
|
|
|
|
|
|
2016-09-09 13:58:28 +00:00
|
|
|
|
int ef0100(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TVariazione_effetti a ;
|
|
|
|
|
a.run(argc, argv, TR("Effetti"));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|