il segno degli imponibili e del totale documento (errore 1123). Nelle stampe dei registri (cg4300 e cg4400) ho tolto l'azzeramento dei due campi da ditta e a ditta (errore 0190) git-svn-id: svn://10.65.10.50/trunk@429 c028cbd2-c16b-5b4b-a496-9718f37d4682
385 lines
9.7 KiB
C++
Executable File
385 lines
9.7 KiB
C++
Executable File
// ------------------------------------------------------------
|
|
// Calcolo liquidazioni
|
|
// Part 1: interfaccia
|
|
// fv 21-1-94
|
|
// ------------------------------------------------------------
|
|
|
|
#include "cg4300.h"
|
|
#include "cg4300a.h"
|
|
#include <mov.h>
|
|
|
|
inline CG4300_App& app()
|
|
{ return (CG4300_App&)main_app(); }
|
|
|
|
void CG4300_App::user_create()
|
|
{
|
|
TProgind pnd(3,"Preparazione archivi\nPrego attendere",
|
|
FALSE, TRUE, 30);
|
|
|
|
_nditte = new TRelation(LF_NDITTE);
|
|
_nditte->add(LF_ATTIV,"CODDITTA=CODDITTA");
|
|
_nditte_r = &(_nditte->curr());
|
|
_att_r = &(_nditte->curr(LF_ATTIV));
|
|
|
|
_ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte",
|
|
"@1|Cod.@5|Ragione Sociale@50|Vers.");
|
|
_n_ditte = 0l;
|
|
|
|
pnd.addstatus(1);
|
|
|
|
for (_nditte->first(); !_nditte->eof(); _nditte->next())
|
|
{
|
|
_n_ditte++;
|
|
|
|
TToken_string* d = new TToken_string(64);
|
|
|
|
// add record
|
|
d->add(_nditte_r->get("CODDITTA"));
|
|
d->add(_nditte_r->get("RAGSOC"));
|
|
d->add(_nditte_r->get("FREQVIVA"));
|
|
_nomiditte.add(d);
|
|
}
|
|
|
|
pnd.addstatus(1);
|
|
|
|
_rel = new TRelation(LF_MOV);
|
|
_rel->add(LF_RMOVIVA,"NUMREG=NUMREG");
|
|
|
|
_cur = new TCursor(_rel, "", 2);
|
|
(*_cur) = 0;
|
|
|
|
_pim = new TTable("PIM");
|
|
_ppa = new TTable("PPA");
|
|
_plm = new TTable("PLM");
|
|
_ptm = new TTable("PTM");
|
|
_lim = new TTable("LIM");
|
|
_pla = new TTable("PLA");
|
|
_reg = new TTable("REG");
|
|
_iva = new TTable("%IVA");
|
|
_del = new TTable("%DEL");
|
|
_lia = new TTable("LIA");
|
|
|
|
_mov = &_cur->file(LF_MOV);
|
|
_rmoviva = &_cur->file(LF_RMOVIVA);
|
|
|
|
_pim_r = &(_pim->curr());
|
|
_plm_r = &(_plm->curr());
|
|
_ptm_r = &(_ptm->curr());
|
|
_lim_r = &(_lim->curr());
|
|
_iva_r = &(_iva->curr());
|
|
_del_r = &(_del->curr());
|
|
_pla_r = &(_pla->curr());
|
|
_ppa_r = &(_ppa->curr());
|
|
_reg_r = &(_reg->curr());
|
|
_rmoviva_r = &(_cur->curr(LF_RMOVIVA));
|
|
_mov_r = &(_mov->curr());
|
|
|
|
|
|
// ACHTUNG: tutti i _codatt (codici attivita') sono
|
|
// in realta' composti dal codice attivita' piu' il
|
|
// tipo attivita' (1 o 2)
|
|
|
|
_pim_anno = new TRecfield(*_pim_r,"CODTAB",0,3);
|
|
_pim_codatt = new TRecfield(*_pim_r,"CODTAB",4,9);
|
|
_pim_codreg = new TRecfield(*_pim_r,"CODTAB",10,12);
|
|
_pim_mese = new TRecfield(*_pim_r,"CODTAB",13,14);
|
|
_pim_tipocr = new TRecfield(*_pim_r,"CODTAB",15,15);
|
|
_pim_codiva = new TRecfield(*_pim_r,"CODTAB",16,17);
|
|
_ppa_year = new TRecfield(*_ppa_r,"CODTAB",0,3);
|
|
_ppa_codatt = new TRecfield(*_ppa_r,"CODTAB",4,9);
|
|
_ppa_month = new TRecfield(*_ppa_r,"CODTAB",10,11);
|
|
_ppa_kind = new TRecfield(*_ppa_r,"CODTAB",12,12);
|
|
_plm_anno = new TRecfield(*_plm_r,"CODTAB",0,3);
|
|
_plm_codatt = new TRecfield(*_plm_r,"CODTAB",4,9);
|
|
_plm_mese = new TRecfield(*_plm_r,"CODTAB",10,11);
|
|
_ptm_anno = new TRecfield(*_ptm_r,"CODTAB",0,3);
|
|
_ptm_codatt = new TRecfield(*_ptm_r,"CODTAB",4,9);
|
|
_ptm_mese = new TRecfield(*_ptm_r,"CODTAB",10,11);
|
|
_lim_anno = new TRecfield(*_lim_r,"CODTAB",0,3);
|
|
_lim_mese = new TRecfield(*_lim_r,"CODTAB",4,6);
|
|
_pla_anno = new TRecfield(*_pla_r,"CODTAB",0,3);
|
|
_pla_codatt = new TRecfield(*_pla_r,"CODTAB",4,9);
|
|
_del_ditta = new TRecfield(*_del_r,"CODTAB",0,4);
|
|
_del_anno = new TRecfield(*_del_r,"CODTAB",5,8);
|
|
_del_mese = new TRecfield(*_del_r,"CODTAB",9,10);
|
|
_del_tipo = new TRecfield(*_del_r,"CODTAB",11,11);
|
|
|
|
pnd.addstatus(1);
|
|
set_real_picture(REAL_PICTURE);
|
|
}
|
|
|
|
void CG4300_App::user_destroy()
|
|
{
|
|
delete _ditte;
|
|
|
|
delete _pim_anno;
|
|
delete _pim_codreg;
|
|
delete _pim_mese;
|
|
delete _pim_tipocr;
|
|
delete _pim_codiva;
|
|
delete _ppa_year;
|
|
delete _ppa_codatt;
|
|
delete _ppa_month;
|
|
delete _ppa_kind;
|
|
delete _plm_anno;
|
|
delete _plm_codatt;
|
|
delete _plm_mese;
|
|
delete _ptm_anno;
|
|
delete _ptm_codatt;
|
|
delete _ptm_mese;
|
|
delete _lim_anno;
|
|
delete _lim_mese;
|
|
delete _pla_anno;
|
|
delete _pla_codatt;
|
|
delete _pim_codatt;
|
|
delete _del_ditta;
|
|
delete _del_anno;
|
|
delete _del_mese;
|
|
delete _del_tipo;
|
|
|
|
delete _pim;
|
|
delete _ppa;
|
|
delete _plm;
|
|
delete _ptm;
|
|
delete _lim;
|
|
delete _pla;
|
|
delete _del;
|
|
|
|
delete _nditte;
|
|
delete _rel;
|
|
delete _cur;
|
|
}
|
|
|
|
bool CG4300_App::set_print(int n)
|
|
{
|
|
_descr_arr.destroy();
|
|
|
|
switch(n)
|
|
{
|
|
case 1: // liquidazione
|
|
_isprint = TRUE;
|
|
if (set_liquidazione())
|
|
{
|
|
if (_selected.ones() > 0l)
|
|
{
|
|
/* if (_year != yy)
|
|
{
|
|
TString cond(format("ANNOES=%s",(const char*)_year));
|
|
_cur->setfilter(cond);
|
|
}*/
|
|
TRectype & mov = _cur->curr();
|
|
TRectype from(_cur->curr()); from.zero();
|
|
TRectype to(mov);
|
|
TDate f(1, _recalc == one ? _month : 1, atoi(_year));
|
|
TDate t(1, _month, atoi(_year));
|
|
|
|
t.set_end_month();
|
|
from.put(MOV_DATAREG, f);
|
|
to.put(MOV_DATAREG, t);
|
|
_cur->setregion(from, to);
|
|
recalc_all();
|
|
return _isprint;
|
|
}
|
|
else warning_box("Nessuna ditta selezionata!");
|
|
}
|
|
break;
|
|
case 2: // estrazione deleghe
|
|
_isprint = FALSE;
|
|
if (set_deleghe())
|
|
{
|
|
/* if (_year != yy)
|
|
{
|
|
TString cond(format("ANNOES=%s",(const char*)_year));
|
|
_cur->setfilter(cond);
|
|
} */
|
|
TRectype & mov = _cur->curr();
|
|
TRectype from(_cur->curr()); from.zero();
|
|
TRectype to(mov);
|
|
TDate f(1, _recalc == one ? _month : 1, atoi(_year));
|
|
TDate t(1, _month, atoi(_year));
|
|
|
|
t.set_end_month();
|
|
from.put(MOV_DATAREG, f);
|
|
to.put(MOV_DATAREG, t);
|
|
_cur->setregion(from, to);
|
|
extract_deleghe();
|
|
return FALSE;
|
|
}
|
|
break;
|
|
case 3: // calcolo acconto
|
|
_isprint = TRUE;
|
|
if (set_acconto())
|
|
{
|
|
/* if (_year != yy)
|
|
{
|
|
TString cond(format("ANNOES=%s",(const char*)_year));
|
|
_cur->setfilter(cond);
|
|
}*/
|
|
TRectype & mov = _cur->curr();
|
|
TRectype from(_cur->curr()); from.zero();
|
|
TRectype to(mov);
|
|
TDate f(1, _recalc == one ? _month : 1, atoi(_year));
|
|
TDate t(1, _month, atoi(_year));
|
|
|
|
t.set_end_month();
|
|
from.put(MOV_DATAREG, f);
|
|
to.put(MOV_DATAREG, t);
|
|
_cur->setregion(from, to);
|
|
recalc_acconti();
|
|
return _isprint;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
long CG4300_App::select_firm_range(long from, long to, wht freq)
|
|
{
|
|
if (to == 0) to = 99999L;
|
|
|
|
for (int i = 0; i < _nomiditte.items(); i++)
|
|
{
|
|
TToken_string& d = (TToken_string&)_nomiditte[i];
|
|
const char vers = d.get_char(2);
|
|
if ((freq == mnt && vers == 'T') || (freq == quarter && vers == 'M'))
|
|
continue;
|
|
const long cod = d.get_long(0);
|
|
if (cod >= from && cod <= to)
|
|
_selected.set(i);
|
|
}
|
|
|
|
return _selected.ones();
|
|
}
|
|
|
|
|
|
bool CG4300_App::to_ditta_handler(TMask_field& f, KEY key)
|
|
{
|
|
if (key == K_TAB && f.focusdirty() || key == K_ENTER)
|
|
{
|
|
TMask& m = f.mask();
|
|
const long from = m.get_long(CG43_FLD_DFR);
|
|
const long to = m.get_long(CG43_FLD_DTO);
|
|
const wht freq = (wht)m.get_int(CG43_RDB_VERS);
|
|
if (from > 0 || to > 0)
|
|
{
|
|
const long sel = app().select_firm_range(from, to, freq);
|
|
m.set(CG43_FLD_SELECTED, sel);
|
|
// m.reset(CG43_FLD_DFR);
|
|
// m.reset(CG43_FLD_DTO);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
bool CG4300_App::set_liquidazione()
|
|
{
|
|
TMask m("cg4300a.msk");
|
|
m.set_handler(CG43_FLD_DTO, to_ditta_handler);
|
|
|
|
m.field(CG43_FLD_SELECTED).set("0");
|
|
_selected.reset();
|
|
|
|
KEY k;
|
|
// stampa abilitata per default
|
|
m.set(CG43_CHK_STAMPA,"X");
|
|
|
|
do
|
|
{
|
|
k = m.run();
|
|
|
|
if (k == K_ESC) break;
|
|
|
|
|
|
_what = (wht)m.get_int(CG43_RDB_VERS);
|
|
_month = m.get_int(CG43_LST_MESE);
|
|
|
|
if (_what == all)
|
|
{
|
|
if (_month != 3 && _month != 6 && _month != 9 &&
|
|
_month != 12 && _month != 13)
|
|
_what = mnt;
|
|
}
|
|
else if (_what == quarter)
|
|
_month = m.get_int(CG43_LST_TRIM);
|
|
|
|
_year = m.get(CG43_FLD_ANNO);
|
|
_date = m.get(CG43_FLD_DATA);
|
|
_isprint = m.get_bool(CG43_CHK_STAMPA);
|
|
_recalc = (recalc)m.get_long(CG43_LST_CALC);
|
|
_isfinal = m.get_bool(CG43_CHK_FINAL);
|
|
|
|
if (_isprint) printer().setdate(_date);
|
|
|
|
// ------------------------------------------------
|
|
m.first_focus(k);
|
|
|
|
int i;
|
|
|
|
|
|
switch(k)
|
|
{
|
|
case DLG_SELECT:
|
|
// build sheet
|
|
_ditte->destroy();
|
|
for (i = 0; i < _nomiditte.items(); i++)
|
|
{
|
|
TToken_string* d = new TToken_string(64);
|
|
*d = (TToken_string&)_nomiditte[i];
|
|
const char vers = d->get_char(2);
|
|
|
|
if ((_what == mnt && vers == 'T') || (_what == quarter && vers == 'M'))
|
|
continue;
|
|
|
|
d->insert(" |", 0);
|
|
const long pos = _ditte->add(d);
|
|
if (_selected[i]) _ditte->check(pos);
|
|
}
|
|
|
|
// seleziona e aggiungi alle gia' selezionate
|
|
if (_ditte->run() == K_ENTER)
|
|
{
|
|
for (long j = 0l; j < _ditte->items(); j++)
|
|
{
|
|
const long cod = _ditte->row(j).get_long(1);
|
|
for (int d = 0; d < _nomiditte.items(); d++)
|
|
{
|
|
const long firm = ((TToken_string&)_nomiditte[d]).get_long(0);
|
|
if (firm == cod)
|
|
{
|
|
_selected.set(d, _ditte->checked(j));
|
|
break;
|
|
}
|
|
}
|
|
#ifdef DBG
|
|
if (d >= _nomiditte.items())
|
|
yesnofatal_box("Non ritrovo piu' la ditta %ld", cod);
|
|
#endif
|
|
}
|
|
}
|
|
m.set(CG43_FLD_SELECTED, _selected.ones());
|
|
break;
|
|
case CG43_BUT_ANN:
|
|
_selected.reset();
|
|
m.reset(CG43_FLD_SELECTED);
|
|
break;
|
|
}
|
|
}
|
|
while (k != K_ENTER && k != K_ESC);
|
|
|
|
|
|
|
|
return k == K_ENTER;
|
|
}
|
|
|
|
int cg4300(int argc, char* argv[])
|
|
{
|
|
CG4300_App main_app;
|
|
main_app.run(argc, argv, "Liquidazione IVA");
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|