66c50f0249
git-svn-id: svn://10.65.10.50/trunk@3568 c028cbd2-c16b-5b4b-a496-9718f37d4682
930 lines
23 KiB
C++
Executable File
930 lines
23 KiB
C++
Executable File
// 771230.cpp - Quadri C, D, D1, E, E1, E2
|
|
#include <relapp.h>
|
|
#include <config.h>
|
|
#include <msksheet.h>
|
|
#include <sort.h>
|
|
#include <tabutil.h>
|
|
#include <progind.h>
|
|
#include "caus77.h"
|
|
#include "77lib.h"
|
|
#include "scperc.h"
|
|
#include "rpag.h"
|
|
#include "perc.h"
|
|
#include "prospe1.h"
|
|
#include "defmask.h"
|
|
#include "771230a.h"
|
|
#include "774200.h"
|
|
|
|
class TQuadroC_E2 : public TRelation_application
|
|
{
|
|
private:
|
|
TString _quadro; // Codice del quadro in gestione
|
|
bool _registra; // Se TRUE fa i riporti
|
|
|
|
struct righe_pag
|
|
{
|
|
char tipoa;
|
|
char codan[6];
|
|
char codcau[3];
|
|
char perc[7]; //3 + 2decimali + la virgola
|
|
real somme;
|
|
real impo;
|
|
real rite;
|
|
real comp;
|
|
bool acim;
|
|
bool bInps;
|
|
real inps;
|
|
};
|
|
righe_pag* _rig;
|
|
TRelation* _rel;
|
|
TMask* _msk[2];
|
|
TSort* _sort;
|
|
long _codanagr;
|
|
char _tipoa, _tipoq;
|
|
int _nproga;
|
|
int _mode;
|
|
int _anno_dic; // anno dichiarazione
|
|
TLocalisamfile* _per, *_scper, *_rpag, *_qd;
|
|
TTable* _ca7;
|
|
TRiporti _rip;
|
|
long _codditta;
|
|
int _file;
|
|
|
|
private:
|
|
static bool nprog_handler (TMask_field& f, KEY key);
|
|
static bool codanagr_handler(TMask_field& f, KEY key);
|
|
static bool genera_handler (TMask_field& f, KEY key);
|
|
static bool codditta_hnd (TMask_field& f, KEY key);
|
|
static bool setta_nprog (TMask_field& f);
|
|
static bool imponibile_hnd (TMask_field& f, KEY key);
|
|
|
|
bool QuadroC() const { return _tipoq == 'C'; }
|
|
bool QuadroD() const { return _tipoq == 'D'; }
|
|
bool QuadroD1() const { return _tipoq == '1'; }
|
|
bool QuadroE() const { return _tipoq == 'E'; }
|
|
bool QuadroE1() const { return _tipoq == '2'; }
|
|
bool QuadroE2() const { return _tipoq == '3'; }
|
|
|
|
protected:
|
|
virtual bool user_create();
|
|
virtual bool user_destroy();
|
|
virtual int rewrite(const TMask& m);
|
|
virtual int write (const TMask& m);
|
|
virtual bool remove();
|
|
virtual TRelation* get_relation() const { return _rel; }
|
|
virtual TMask* get_mask(int mode);
|
|
virtual bool changing_mask(int mode);
|
|
virtual void init_query_mode (TMask&);
|
|
virtual void init_query_insert_mode (TMask&);
|
|
virtual void on_config_change();
|
|
|
|
TMask* load_mask(int n);
|
|
bool generazione();
|
|
bool azzera_quadro();
|
|
void riempi_record(char,long,int,const real&,const real&,
|
|
const real&,const real&,const real&,bool,
|
|
const real& inps_perc, bool bCinps=FALSE);
|
|
void init_sort();
|
|
void leggi_sort(TProgind&);
|
|
TRectype& look_causali(int c);
|
|
int anno_dic() const { return _anno_dic; }
|
|
bool scrivi_dati_per(TRectype& rec);
|
|
void genera_prospetto(int,real&,real&,real&);
|
|
|
|
public:
|
|
TQuadroC_E2(char tipo);
|
|
virtual ~TQuadroC_E2() {};
|
|
};
|
|
|
|
inline TQuadroC_E2& app() { return (TQuadroC_E2&) main_app(); }
|
|
|
|
TQuadroC_E2::TQuadroC_E2(char tipo): _rel(NULL), _mode(0), _tipoq(tipo)
|
|
{
|
|
memset(_msk, 0, sizeof(_msk));
|
|
}
|
|
|
|
bool TQuadroC_E2::changing_mask(int mode)
|
|
{
|
|
if (mode == MODE_QUERY)
|
|
return _mode != MODE_QUERY;
|
|
else
|
|
return TRUE;
|
|
}
|
|
|
|
TMask* TQuadroC_E2::get_mask(int mode)
|
|
{
|
|
const int m = (mode == MODE_QUERY) ? 0 : 1;
|
|
_mode = mode;
|
|
return load_mask(m);
|
|
}
|
|
|
|
TMask* TQuadroC_E2::load_mask(int n)
|
|
{
|
|
if (_msk[n] != NULL)
|
|
return _msk[n];
|
|
|
|
TFilename name("771230");
|
|
|
|
if (n == 0)
|
|
{
|
|
switch (_tipoq)
|
|
{
|
|
case 'C':
|
|
name << 'd';
|
|
break;
|
|
case 'D':
|
|
name << 'a';
|
|
break;
|
|
case '1':
|
|
name << 'e';
|
|
break;
|
|
case 'E' :
|
|
name << 'g';
|
|
break;
|
|
case '2' :
|
|
name << 'i';
|
|
break;
|
|
case '3':
|
|
name = "77qe2a";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (_tipoq)
|
|
{
|
|
case 'C':
|
|
name << 'f';
|
|
break;
|
|
case 'D':
|
|
name << 'b';
|
|
break;
|
|
case '1':
|
|
name << 'c';
|
|
break;
|
|
case 'E':
|
|
name << 'h';
|
|
break;
|
|
case '2' :
|
|
name << 'l';
|
|
break;
|
|
case '3':
|
|
name = "77qe2b";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
TMask* m = new TMask(name);
|
|
|
|
switch (n)
|
|
{
|
|
case 0:
|
|
if (m)
|
|
{
|
|
m->set_handler(F_CODDITTA, codditta_hnd);
|
|
m->set_handler(F_NPROG, nprog_handler);
|
|
m->set_handler(F_CODANAGRCOM, codanagr_handler);
|
|
m->set_handler(F_CODANAGRPERC, codanagr_handler);
|
|
if (_quadro != "E2")
|
|
m->set_handler(F_GENERA, genera_handler);
|
|
}
|
|
break;
|
|
case 1:
|
|
if (m)
|
|
{
|
|
m->set_handler(F_IMPONIBILE, imponibile_hnd);
|
|
m->set_handler(F_PERC, imponibile_hnd);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
m->disable(DLG_FINDREC);
|
|
|
|
return _msk[n] = m;
|
|
}
|
|
|
|
// Ricerca e output dell'ultimo nprog del percipiente scelto
|
|
bool TQuadroC_E2::setta_nprog(TMask_field& f)
|
|
{
|
|
long nprog = 0L;
|
|
const char tipoa = f.mask().get(F_TIPOA)[0];
|
|
const long codanagr = atol(f.get());
|
|
const long codditta = get_firm_770();
|
|
|
|
TLocalisamfile quad(app()._file);
|
|
|
|
quad.zero();
|
|
quad.put("CODDITTA", codditta);
|
|
quad.put("TIPOA", tipoa);
|
|
quad.put("CODANAGR", codanagr);
|
|
|
|
TRectype rec(quad.curr());
|
|
|
|
quad.read();
|
|
|
|
if (quad.curr() > rec)
|
|
{
|
|
f.mask().set(F_NPROG, nprog+1);
|
|
return TRUE;
|
|
}
|
|
|
|
for ( ; !quad.eof(); quad.next())
|
|
{
|
|
if (quad.curr() > rec) break;
|
|
nprog = quad.get_long("NPROG");
|
|
}
|
|
|
|
//app()._last_scheda = nprog;
|
|
|
|
f.mask().set(F_NPROG, nprog+1);
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroC_E2::codditta_hnd(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_TAB && !f.mask().is_running())
|
|
{
|
|
TString16 codditta; codditta << app()._codditta;
|
|
if (codditta != "0")
|
|
{
|
|
f.set(codditta);
|
|
f.check();
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroC_E2::imponibile_hnd(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_TAB)
|
|
{
|
|
if (f.dlg() == F_PERC)
|
|
{
|
|
real perc (f.get());
|
|
if (perc == ZERO)
|
|
{
|
|
int causale = f.mask().get_int(F_CODCAUS);
|
|
TRectype& cau = app().look_causali(causale);
|
|
real aliquota = cau.get_real(rPERC_RAC);
|
|
f.mask().set(F_PERC, aliquota.string());
|
|
}
|
|
}
|
|
|
|
real imponibile (f.mask().get(F_IMPONIBILE));
|
|
real aliquota (f.mask().get(F_PERC));
|
|
|
|
real importo = ZERO;
|
|
|
|
importo = imponibile * (aliquota/100);
|
|
|
|
f.mask().set(app()._tipoq == 'C' ? F_RITENUTE : F_IMPORTO, importo.string());
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void TQuadroC_E2::init_sort()
|
|
{
|
|
_rig = new righe_pag;
|
|
_sort = new TSort(sizeof(righe_pag));
|
|
|
|
_sort->addsortkey ((char*)&(_rig->tipoa) - (char*)&(_rig->tipoa), 1);
|
|
_sort->addsortkey ((char*)&(_rig->codan) - (char*)&(_rig->tipoa), 5);
|
|
_sort->addsortkey ((char*)&(_rig->codcau) - (char*)&(_rig->tipoa), 2);
|
|
_sort->addsortkey ((char*)&(_rig->perc) - (char*)&(_rig->tipoa), 6);
|
|
_sort->init();
|
|
}
|
|
|
|
void TQuadroC_E2::riempi_record(char t,long ca,int cc,const real& p,
|
|
const real& so,const real& im,
|
|
const real& ri,const real& co,bool acim,
|
|
const real& inps, bool bInps)
|
|
{
|
|
_rig->tipoa = t;
|
|
sprintf(_rig->codan, "%5ld", ca);
|
|
sprintf(_rig->codcau, "%02d", cc);
|
|
// 22.5.96 Cambiato il formato @@@,@@ con @.@@@,@@
|
|
// Ci vuole anche il punto delle migliaia se real::string() sbaglia
|
|
// a calcolare il numero di decimali.
|
|
// TString16 pp(p.string("@.@@@,@@"));
|
|
double ppd = atof(p.string());
|
|
sprintf(_rig->perc, "%.2f", ppd);
|
|
_rig->somme = so;
|
|
_rig->impo = im;
|
|
_rig->rite = ri;
|
|
_rig->comp = co;
|
|
_rig->acim = acim;
|
|
_rig->inps = inps;
|
|
_rig->bInps = bInps;
|
|
_sort->sort((const char*)_rig);
|
|
}
|
|
|
|
bool TQuadroC_E2::genera_handler(TMask_field& f , KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
app().generazione();
|
|
app()._registra = TRUE; // Genera i riporti alla fine
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
TRectype& TQuadroC_E2::look_causali(int codc)
|
|
{
|
|
TString16 dep;
|
|
_ca7->zero();
|
|
dep.format("%02d", codc);
|
|
_ca7->put("CODTAB", dep);
|
|
_ca7->read();
|
|
if (_ca7->bad())
|
|
_ca7->zero();
|
|
return _ca7->curr();
|
|
}
|
|
|
|
bool TQuadroC_E2::generazione()
|
|
{
|
|
if (!yesno_box("Conferma la generazione ?"))
|
|
return FALSE;
|
|
|
|
init_sort();
|
|
|
|
TToken_string exp;
|
|
exp.add("CODDITTA=CODDITTA");
|
|
exp.add("TIPOA=TIPOA");
|
|
exp.add("CODANAGR=CODANAGR");
|
|
exp.add("NPROG=NPROG");
|
|
|
|
TRelation rel (LF_SCPERC);
|
|
rel.add(LF_RPAG, exp, 1);
|
|
TString16 filt; filt.format("CODDITTA=%ld", get_firm_770());
|
|
|
|
TCursor cur (&rel,filt,1);
|
|
|
|
azzera_quadro();
|
|
|
|
TLocalisamfile& scperc = rel.lfile();
|
|
TLocalisamfile& rpag = rel.lfile(LF_RPAG);
|
|
cur = 0L;
|
|
const long nitems = cur.items();
|
|
|
|
TProgind p(nitems ? nitems : 1, "Generazione in corso...", FALSE, TRUE, 70);
|
|
long codan, codditta;
|
|
char tipoa;
|
|
int codcaus, nprog;
|
|
TString16 qua;
|
|
TDate datapag;
|
|
real perc=ZERO,spesa=ZERO,impo=ZERO,rite=ZERO,comp=ZERO,inps=ZERO;
|
|
|
|
for (; cur.pos() < nitems; ++cur)
|
|
{
|
|
p.addstatus(1);
|
|
|
|
codditta = scperc.get_long(SPR_CODDITTA);
|
|
tipoa = scperc.get(SPR_TIPOA)[0];
|
|
codan = scperc.get_long(SPR_CODANAGR);
|
|
codcaus = scperc.get_int(SPR_CODCAUS);
|
|
nprog = scperc.get_int(SPR_NPROG);
|
|
|
|
TRectype cau = look_causali(codcaus);
|
|
TString16 qua = cau.get(bCODICE_QUADRO);
|
|
bool acc_imp = cau.get_bool(bSOMME_ASSOG_RAC);
|
|
bool bContrInps = cau.get_bool(bCONTRIBUTO_INPS);
|
|
|
|
if (_tipoq == 'D' && qua != "D") continue;
|
|
if (_tipoq == 'C' && qua != "C") continue;
|
|
if (_tipoq == '1' && qua != "D1") continue;
|
|
if (_tipoq == 'E' && qua != "E") continue;
|
|
if (_tipoq == '2' && qua != "E1") continue;
|
|
|
|
if (cur.is_first_match(LF_RPAG))
|
|
{
|
|
TRecnotype nrec = rpag.recno();
|
|
rpag.zero();
|
|
rpag.setkey(1);
|
|
rpag.put(PAG_CODDITTA, (long)codditta);
|
|
rpag.put(PAG_TIPOA, tipoa);
|
|
rpag.put(PAG_CODANAGR, (long)codan);
|
|
rpag.put(PAG_NPROG, nprog);
|
|
TRectype recc (rpag.curr());
|
|
for (rpag.read(_isgteq); !rpag.eof() ;rpag.next())
|
|
{
|
|
TRectype rec (rpag.curr());
|
|
if (rec > recc) break;
|
|
datapag = rpag.get(PAG_DATAPAG);
|
|
if (datapag.year() != _anno_dic)
|
|
continue;
|
|
//codtrib = cau.get_int("I0");
|
|
perc = rpag.get_real(PAG_PERC);
|
|
spesa = rpag.get_real(PAG_SPESA);
|
|
rite = rpag.get_real(PAG_RITENUTA);
|
|
impo = rpag.get_real(PAG_IMPONIBILE);
|
|
comp = rpag.get_real(PAG_COMPENSO);
|
|
inps = rpag.get_real(PAG_INPSPERC);
|
|
|
|
if (perc==ZERO && comp==ZERO && rite==ZERO && impo==ZERO
|
|
&& spesa==ZERO)
|
|
continue;
|
|
riempi_record(tipoa,codan,codcaus,perc,spesa,impo,rite,comp,acc_imp,inps,bContrInps);
|
|
}
|
|
rpag.readat(nrec);
|
|
}
|
|
}
|
|
_sort->endsort();
|
|
|
|
leggi_sort(p);
|
|
|
|
delete _rig;
|
|
delete _sort;
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroC_E2::azzera_quadro()
|
|
{
|
|
const char* title;
|
|
|
|
if (_tipoq == 'C')
|
|
title = "Azzeramento quadro C";
|
|
else
|
|
if (_tipoq == 'D')
|
|
title = "Azzeramento quadro D";
|
|
else
|
|
if (_tipoq == '1')
|
|
title = "Azzeramento quadro D1";
|
|
else
|
|
if (_tipoq == 'E')
|
|
title = "Azzeramento quadro E";
|
|
else
|
|
title = "Azzeramento quadro E1";
|
|
|
|
|
|
// Tutto cio' solo per contare gli items e far andare correttamente
|
|
// il "termometro" (sic..)
|
|
TRelation rel (_file);
|
|
TString16 filt; filt.format("CODDITTA=%ld", get_firm_770());
|
|
TCursor cur (&rel,filt,1);
|
|
// TLocalisamfile& quadro = rel.lfile();
|
|
TLocalisamfile quadro(_file);
|
|
cur = 0L;
|
|
const long nitems = cur.items();
|
|
|
|
TProgind prog(nitems, title, FALSE, TRUE);
|
|
|
|
quadro.zero();
|
|
quadro.put("CODDITTA", (long)get_firm_770());
|
|
TRectype dep(quadro.curr());
|
|
|
|
for (quadro.read(); !quadro.eof(); quadro.next())
|
|
{
|
|
prog.addstatus(1);
|
|
if (quadro.curr() > dep) break;
|
|
quadro.read(_isequal, _lock);
|
|
quadro.remove();
|
|
}
|
|
|
|
if (_tipoq == '2')
|
|
{
|
|
TLocalisamfile quadro(LF_PROSPE1);
|
|
|
|
TProgind prog(quadro.items(), "Azzeramento prospetto del quadro E1", FALSE, TRUE);
|
|
|
|
quadro.zero();
|
|
quadro.put("CODDITTA", (long)get_firm_770());
|
|
TRectype dep(quadro.curr());
|
|
|
|
for (quadro.read(); !quadro.eof(); quadro.next())
|
|
{
|
|
prog.addstatus(1);
|
|
if (quadro.curr() > dep) break;
|
|
quadro.read(_isequal, _lock);
|
|
quadro.remove();
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void TQuadroC_E2::genera_prospetto(int cau, real& comp, real& impo, real& rite)
|
|
{
|
|
TLocalisamfile pr (LF_PROSPE1);
|
|
|
|
pr.setkey(1);
|
|
pr.zero();
|
|
pr.put(PRE_CODDITTA, (long)get_firm_770());
|
|
pr.put(PRE_CODCAUS, cau);
|
|
if (pr.read() == NOERR)
|
|
{
|
|
comp += pr.get_real(PRE_COMPENSO);
|
|
impo += pr.get_real(PRE_IMPONIBILE);
|
|
rite += pr.get_real(PRE_RITENUTA);
|
|
|
|
pr.put(PRE_COMPENSO, comp);
|
|
pr.put(PRE_IMPONIBILE, impo);
|
|
pr.put(PRE_RITENUTA, rite);
|
|
pr.rewrite();
|
|
}
|
|
else
|
|
{
|
|
pr.put(PRE_CODDITTA, (long)get_firm_770());
|
|
pr.put(PRE_CODCAUS, cau);
|
|
pr.put(PRE_COMPENSO, comp);
|
|
pr.put(PRE_IMPONIBILE, impo);
|
|
pr.put(PRE_RITENUTA, rite);
|
|
pr.write();
|
|
}
|
|
}
|
|
|
|
void TQuadroC_E2::leggi_sort(TProgind& p)
|
|
{
|
|
TLocalisamfile qd(_file);
|
|
const char* buf;
|
|
TString16 keyp, key, perc, perc_p;
|
|
char tipoa, tipoa_p;
|
|
long codanag, codanag_p;
|
|
int codcaus_p, codcaus, nprog;
|
|
real tot_somme=ZERO,tot_impo=ZERO,tot_rite=ZERO,tot_comp=ZERO, rQCInps=ZERO;
|
|
real rTotQCInps = ZERO;
|
|
bool esiste_record=FALSE, bAssoggettateRacc=FALSE,bFattoProspetto=FALSE;
|
|
struct righe_pag* rp;
|
|
|
|
keyp = key = "";
|
|
nprog = 1;
|
|
tot_somme = tot_impo = tot_rite = tot_comp = ZERO;
|
|
|
|
while ((buf = _sort->retrieve()) != NULL)
|
|
{
|
|
p.addstatus(1);
|
|
esiste_record = TRUE;
|
|
rp = (struct righe_pag*)buf;
|
|
tipoa = rp->tipoa;
|
|
codanag = atol(rp->codan);
|
|
codcaus = atoi(rp->codcau);
|
|
perc = rp->perc;
|
|
bAssoggettateRacc = rp->acim;
|
|
// non frega un tubo bInps = rp->bInps; // se la riga aveva il contributo inps nella caus.
|
|
rQCInps = rp->inps;
|
|
|
|
if (QuadroE1() && !bAssoggettateRacc)
|
|
{
|
|
genera_prospetto(codcaus,rp->comp,rp->impo,rp->rite);
|
|
bFattoProspetto = TRUE;
|
|
}
|
|
else
|
|
{
|
|
key.format("%c%5ld%2d%s", tipoa, codanag, codcaus, (const char*)perc);
|
|
if ( (key != keyp) && (keyp != "") )
|
|
{
|
|
bFattoProspetto = FALSE;
|
|
qd.zero();
|
|
qd.put("CODDITTA", (long)get_firm_770());
|
|
qd.put("TIPOA", tipoa_p);
|
|
qd.put("CODANAGR", (long)codanag_p);
|
|
qd.put("CODCAUS", codcaus_p);
|
|
qd.put("NPROG", nprog++);
|
|
|
|
// 12.6.96 aggiunto contributo inps
|
|
if (QuadroC())
|
|
qd.put("CONTSSN", rTotQCInps);
|
|
|
|
if (QuadroD() || QuadroC() || QuadroE())
|
|
qd.put("SOMME", tot_somme + tot_comp - tot_impo);
|
|
else
|
|
if (QuadroD1())
|
|
{
|
|
qd.put("QUOTAPRO", tot_comp - tot_impo);
|
|
qd.put("SPESEANT", tot_somme);
|
|
}
|
|
else
|
|
if (QuadroE1())
|
|
qd.put("SOMME", tot_comp);
|
|
|
|
if (QuadroE1())
|
|
qd.put("AMMONTARE", tot_impo);
|
|
else
|
|
qd.put("IMPONIBILE", tot_impo);
|
|
|
|
if (QuadroC())
|
|
qd.put("RITENUTE", tot_rite);
|
|
else
|
|
qd.put("IMPORTO", tot_rite);
|
|
|
|
qd.put("PERC", perc_p);
|
|
|
|
if (!QuadroE() && !QuadroE1())
|
|
qd.put("TOTALE", tot_comp + tot_somme);
|
|
|
|
if (QuadroC())
|
|
qd.put("TOTALE", tot_somme + tot_impo + rTotQCInps);
|
|
|
|
if (QuadroE1())
|
|
qd.put("NETTO", tot_comp - tot_rite);
|
|
else
|
|
qd.put("NETTO", tot_impo - tot_rite);
|
|
qd.write();
|
|
rTotQCInps = tot_impo = tot_somme = tot_rite = tot_comp = ZERO;
|
|
}
|
|
|
|
tot_somme += rp->somme;
|
|
tot_rite += rp->rite;
|
|
tot_impo += rp->impo;
|
|
tot_comp += rp->comp;
|
|
rTotQCInps += rQCInps;
|
|
|
|
if (tipoa_p != tipoa || codanag != codanag_p)
|
|
nprog = 1;
|
|
|
|
tipoa_p = tipoa;
|
|
codanag_p = codanag;
|
|
codcaus_p = codcaus;
|
|
perc_p = perc;
|
|
|
|
keyp.format("%c%5ld%2d%s", tipoa_p, codanag_p, codcaus_p, (const char*)perc_p);
|
|
}
|
|
} // while (retrieve() != NULL)
|
|
|
|
if (esiste_record || bFattoProspetto)
|
|
{
|
|
qd.zero();
|
|
qd.put("CODDITTA", (long)_codditta);
|
|
qd.put("TIPOA", tipoa_p);
|
|
qd.put("CODANAGR", (long)codanag_p);
|
|
qd.put("CODCAUS", codcaus_p);
|
|
qd.put("NPROG", nprog++);
|
|
|
|
if (QuadroD() || QuadroC() || QuadroE())
|
|
qd.put("SOMME", tot_somme + tot_comp - tot_impo);
|
|
else
|
|
if (QuadroD1())
|
|
{
|
|
qd.put("QUOTAPRO", tot_comp - tot_impo);
|
|
qd.put("SPESEANT", tot_somme);
|
|
}
|
|
else
|
|
if (QuadroE1())
|
|
qd.put("SOMME", tot_comp);
|
|
|
|
if (QuadroE1())
|
|
qd.put("AMMONTARE", tot_impo);
|
|
else
|
|
qd.put("IMPONIBILE", tot_impo);
|
|
|
|
if (QuadroC())
|
|
qd.put("RITENUTE", tot_rite);
|
|
else
|
|
qd.put("IMPORTO", tot_rite);
|
|
|
|
qd.put("PERC", perc_p);
|
|
|
|
// 12.6.96 aggiunto contributo inps
|
|
if (QuadroC())
|
|
qd.put("CONTSSN", rTotQCInps);
|
|
|
|
if (!QuadroE() && !QuadroE1())
|
|
qd.put("TOTALE", tot_comp + tot_somme);
|
|
|
|
if (QuadroC())
|
|
qd.put("TOTALE", tot_somme + tot_impo + rTotQCInps);
|
|
|
|
if (QuadroE1())
|
|
qd.put("NETTO", tot_comp - tot_rite);
|
|
else
|
|
qd.put("NETTO", tot_impo - tot_rite);
|
|
qd.write();
|
|
}
|
|
}
|
|
|
|
bool TQuadroC_E2::codanagr_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& m = f.mask();
|
|
const long codanagr = atol(f.get());
|
|
const char tipoa = m.get(F_TIPOA)[0];
|
|
// 12.6.96 Non lascia andare avanti se il perc. non esiste
|
|
if (!esiste_perc(tipoa, codanagr))
|
|
return f.warning_box("Percipiente inesistente");
|
|
if (app()._quadro != "E2")
|
|
f.mask().disable(F_GENERA);
|
|
TString16 dummy(f.get());
|
|
if (dummy.not_empty())
|
|
setta_nprog(f);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
// Passa al modo inserimento/modifica.
|
|
bool TQuadroC_E2::nprog_handler(TMask_field& f, KEY key)
|
|
{
|
|
if (!f.mask().is_running()) return TRUE;
|
|
|
|
if (key == K_TAB)
|
|
{
|
|
const int nprog = atoi(f.get());
|
|
if (nprog==0) return TRUE;
|
|
f.mask().stop_run(K_AUTO_ENTER); // entra in modo modifica (se il record che ha chiave specificata esiste gia') oppure
|
|
// inserimento (se trova che non esiste)
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroC_E2::scrivi_dati_per(TRectype& rec)
|
|
{
|
|
TLocalisamfile dati_per(LF_PERC);
|
|
const long codditta = rec.get_long("CODDITTA");
|
|
char tipoa = rec.get_char("TIPOA");
|
|
const long codanagr = rec.get_long("CODANAGR");
|
|
|
|
dati_per.zero();
|
|
dati_per.put("CODDITTA", codditta);
|
|
dati_per.put("TIPOA", tipoa);
|
|
dati_per.put("CODANAGR", codanagr);
|
|
|
|
const bool preesistente = (dati_per.read() == NOERR);
|
|
|
|
if (!preesistente)
|
|
{
|
|
dati_per.zero();
|
|
dati_per.put("CODDITTA", codditta);
|
|
dati_per.put("TIPOA", tipoa);
|
|
dati_per.put("CODANAGR", codanagr);
|
|
|
|
dati_per.write();
|
|
}
|
|
|
|
return preesistente;
|
|
}
|
|
|
|
int TQuadroC_E2::rewrite(const TMask& m)
|
|
{
|
|
m.autosave(_rel);
|
|
const int err = _rel->rewrite();
|
|
scrivi_dati_per(_rel->curr());
|
|
_registra = TRUE;
|
|
return err;
|
|
}
|
|
|
|
int TQuadroC_E2::write(const TMask& m)
|
|
{
|
|
m.autosave(_rel);
|
|
const int err = _rel->write();
|
|
scrivi_dati_per(_rel->curr());
|
|
|
|
_registra = TRUE;
|
|
|
|
return err;
|
|
}
|
|
|
|
bool TQuadroC_E2::remove()
|
|
{
|
|
_registra = TRUE;
|
|
return TRelation_application::remove();
|
|
}
|
|
|
|
bool TQuadroC_E2::user_create()
|
|
{
|
|
switch (_tipoq)
|
|
{
|
|
case 'C':
|
|
_file = LF_QUAC;
|
|
_quadro = "C";
|
|
break;
|
|
case 'D':
|
|
_file = LF_QUAD;
|
|
_quadro = "D";
|
|
break;
|
|
case '1':
|
|
_file = LF_QUAD1;
|
|
_quadro = "D1";
|
|
break;
|
|
case 'E':
|
|
_file = LF_QUAE;
|
|
_quadro = "E";
|
|
break;
|
|
case '2':
|
|
_file = LF_QUAE1;
|
|
_quadro = "E1";
|
|
break;
|
|
case '3':
|
|
_file = LF_QUAE2;
|
|
_quadro = "E2";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
_qd = new TLocalisamfile(_file);
|
|
_rel = new TRelation(_file);
|
|
_rpag = new TLocalisamfile(LF_RPAG);
|
|
_ca7 = new TTable ("%CA7");
|
|
_codditta = get_firm_770();
|
|
set_search_field(F_CODANAGRPERC);
|
|
|
|
_registra = FALSE;
|
|
|
|
load_mask(0);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroC_E2::user_destroy()
|
|
{
|
|
if (_msk[1] != NULL) delete _msk[1];
|
|
if (_msk[0] != NULL) delete _msk[0];
|
|
|
|
TString16 quadro = "";
|
|
|
|
switch (_tipoq)
|
|
{
|
|
case 'C':
|
|
quadro << "C";
|
|
break;
|
|
case 'D':
|
|
quadro << "D";
|
|
break;
|
|
case '1':
|
|
quadro << "D1";
|
|
break;
|
|
case 'E':
|
|
quadro << "E";
|
|
break;
|
|
case '2':
|
|
quadro << "E1";
|
|
break;
|
|
case '3':
|
|
quadro << "E2";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (_registra)
|
|
_rip.set(quadro);
|
|
|
|
delete _rel;
|
|
delete _qd;
|
|
delete _rpag;
|
|
delete _ca7;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void TQuadroC_E2::on_config_change()
|
|
{
|
|
TConfig conf(CONFIG_STUDIO);
|
|
_anno_dic = (int)conf.get_long(ANNO_SEL, NULL);
|
|
}
|
|
|
|
void TQuadroC_E2::init_query_mode(TMask& m)
|
|
{
|
|
m.set(F_ANNODIC, _anno_dic);
|
|
if (_quadro != "E2")
|
|
m.enable(F_GENERA);
|
|
|
|
// forza il ricalcolo dell'ultimo numero disponibile
|
|
TString16 dummy(m.get(F_NPROG));
|
|
if (dummy.not_empty())
|
|
setta_nprog(m.field(F_NPROG));
|
|
|
|
m.send_key(K_SHIFT+K_CTRL+'h', -1); // nasconde (hide) group 1 - Scelta ANAGR
|
|
m.send_key(K_SHIFT+K_CTRL+'s', -2); // abilita (show) group 2 - Ricerca su DATI PERC
|
|
}
|
|
|
|
void TQuadroC_E2::init_query_insert_mode(TMask& m)
|
|
{
|
|
m.set(F_ANNODIC, _anno_dic);
|
|
|
|
m.send_key(K_SHIFT+K_CTRL+'h', -2); // group 3 Nasconde ricerca su PERC
|
|
m.send_key(K_SHIFT+K_CTRL+'s', -1); // group 1 Ricerca su ANAGR
|
|
}
|
|
|
|
int quadriC_E2(int argc, char* argv[])
|
|
{
|
|
const char tipo = toupper(*argv[2]);
|
|
const char* title = "Quadro D";
|
|
TQuadroC_E2 a(tipo);
|
|
switch (tipo)
|
|
{
|
|
case '1':
|
|
title = "Quadro D1";
|
|
break;
|
|
case 'C':
|
|
title = "Quadro C";
|
|
break;
|
|
case 'E':
|
|
title = "Quadro E";
|
|
break;
|
|
case '2':
|
|
title = "Quadro E1";
|
|
break;
|
|
case '3':
|
|
title = "Quadro E2";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
a.run(argc, argv, title);
|
|
return TRUE;
|
|
}
|