campo-sirio/cg/cg6804.cpp
luca aa0912819c Patch level :10.0 250
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :corretta chiamata dei BAR_ITEM con BAR_ITEM_ID


git-svn-id: svn://10.65.10.50/trunk@18333 c028cbd2-c16b-5b4b-a496-9718f37d4682
2009-02-24 10:16:54 +00:00

2648 lines
79 KiB
C++
Executable File

#include "cglib04.h"
#include "cg6804.h"
#include "cg6804a.h"
HIDDEN TVar_sc& app() { return (TVar_sc &) main_app(); }
TVar_sc::TVar_sc() : _control_rec(""), _trasf(""), _std(""), _numpart(""), _tmcf("")
{
}
char TVar_sc::TipoConto(int g, int c)
{
/*
TLocalisamfile pcon (LF_PCON);
char tipo = ' ';
pcon.setkey(1);
pcon.zero();
pcon.put(PCN_GRUPPO, g);
pcon.put(PCN_CONTO, c);
pcon.put(PCN_SOTTOCONTO, 0l);
if (pcon.read() == NOERR)
tipo = pcon.get_char(PCN_TMCF);
*/
TString8 key; key.format("%d|%d", g, c);
char tipo = cache().get(LF_PCON, key, PCN_TMCF)[0];
if (tipo < ' ') tipo = ' ';
return tipo;
}
bool TVar_sc::create()
{
TApplication::create();
_part = new TLocalisamfile (LF_PARTITE);
_scad = new TLocalisamfile (LF_SCADENZE);
_pagsca = new TLocalisamfile (LF_PAGSCA);
_rec_part = new TRectype (LF_PARTITE);
_rec_scad = new TRectype (LF_SCADENZE);
_rec_pagsca = new TRectype (LF_PAGSCA);
_msk = new TMask ("cg6804a");
_mask = new TMask ("cg6804b");
TSheet_field& rp = (TSheet_field&)(_mask->field(F_RIGAPART));
rp.set_notify(a_notify);
rp.sheet_mask().set_handler(101, tipocf_handler);
rp.sheet_mask().set_handler(104, codcf_handler);
rp.sheet_mask().set_handler(108, rifpart_handler);
rp.sheet_mask().set_handler(115, datareg_handler);
rp.sheet_mask().set_handler(111, codcaus_handler);
rp.sheet_mask().set_handler(109, datadoc_handler);
rp.sheet_mask().set_handler(110, numdoc_handler);
rp.sheet_mask().set_handler(117, contocl_handler);
rp.sheet_mask().set_handler(119, tipomov_handler);
rp.sheet_mask().set_handler(121, sezione_handler);
rp.sheet_mask().set_handler(123, tipopag_handler);
rp.sheet_mask().set_handler(122, datapag_handler);
rp.sheet_mask().set_handler(124, codval_handler);
rp.sheet_mask().set_handler(125, datacam_handler);
rp.sheet_mask().set_handler(126, cambio_handler);
rp.sheet_mask().set_handler(100, gestione_handler);
rp.sheet_mask().set_handler(DLG_OK, registra_dati_comuni);
rp.sheet_mask().set_handler(DLG_DELREC, elimina_partita);
rp.swap_columns(105,106);
rp.swap_columns(105,107);
rp.swap_columns(105,108);
rp.swap_columns(105,109);
rp.swap_columns(105,110);
_registrato = FALSE;
_aperti = FALSE;
dispatch_e_menu (BAR_ITEM_ID(1));
return TRUE;
}
bool TVar_sc::destroy()
{
delete _mask;
delete _msk;
delete _rec_part;
delete _rec_scad;
delete _rec_pagsca;
delete _part;
delete _scad;
delete _pagsca;
// delete _tab_reg;
if (_aperti)
{
delete _tpart;
delete _tscad;
delete _tpagsca;
}
return TApplication::destroy();
}
void TVar_sc::apri_temp_file()
{
TString80 tmppart = "%";
tmppart << get_firm_dir();
tmppart << "\\" << TEMP_PART;
TString80 tmpscad = "%";
tmpscad << get_firm_dir();
tmpscad << "\\" << TEMP_SCAD;
TString80 tmppagsca = "%";
tmppagsca << get_firm_dir();
tmppagsca << "\\" << TEMP_PAGSCA;
_tpart = new TIsamtempfile(LF_PARTITE, tmppart, 0);
_tscad = new TIsamtempfile(LF_SCADENZE, tmpscad, 0);
_tpagsca = new TIsamtempfile(LF_PAGSCA, tmppagsca, 0);
_aperti = TRUE;
}
void TVar_sc::leggi_record_controllo()
{
_tras_file.read_control_rec();
_control_rec = _tras_file.record();
}
bool TVar_sc::main_loop()
{
_dittaric = get_firm();
if (!esegui_controlli()) return FALSE;
apri_temp_file();
if (!video_SC())
{
if (_registrato)
{
setta_parametri_record(" ","C");
leggi_record_controllo();
TString str;
str.spaces(60);
_control_rec.overwrite(str,241);
_tras_file.write_control_rec(_control_rec,1024);
}
return FALSE;
}
return FALSE;
}
bool TVar_sc::a_notify(TSheet_field& s, int r, KEY k)
{
if (k == K_INS)
return FALSE;
return TRUE;
}
bool TVar_sc::gestione_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask& m = f.mask();
if (!m.check_fields()) return FALSE;
char tipocf = f.mask().get (101)[0];
int gruppo = f.mask().get_int (102);
int conto = f.mask().get_int (103);
long sottoc = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (108);
int tipomov = f.mask().get_int (119);
if (tipomov == 1)
{
TMask* msk = new TMask("cg6804d");
KEY k;
TSheet_field& rp = (TSheet_field&) msk->field(F_RIGASCAD);
rp.set_notify(a_notify);
rp.sheet_mask().set_handler(109, nrata_handler);
rp.sheet_mask().set_handler(111, codpag_handler);
rp.sheet_mask().set_handler(112, tpscad_handler);
rp.sheet_mask().set_handler(113, ultclass_handler);
rp.sheet_mask().set_handler(110, datascad_handler);
rp.sheet_mask().set_handler(120, banca_handler);
rp.sheet_mask().set_handler(122, banca_handler);
rp.sheet_mask().set_handler(124, datasoll_handler);
rp.sheet_mask().set_handler(116, importo_handler);
rp.sheet_mask().set_handler(117, impval_handler);
rp.sheet_mask().set_handler(DLG_DELREC, elimina_scadenza);
rp.swap_columns(105,106);
rp.swap_columns(105,107);
rp.swap_columns(105,108);
rp.swap_columns(105,109);
rp.swap_columns(105,110);
app().setta_mask_scad(tipocf,gruppo,conto,sottoc,anno,npart,nriga,*msk);
k = msk->run();
switch (k)
{
case K_ESC :
break;
case K_QUIT :
break;
case K_SAVE :
{
app().registra_scadenze(*msk);
app()._registrato = TRUE;
}
break;
default:
break;
}
delete msk;
}
else
{
TMask* msk = new TMask("cg6804e");
KEY k;
TSheet_field& rp = (TSheet_field&) msk->field(F_RIGAPAGSCA);
rp.set_notify(a_notify);
rp.sheet_mask().set_handler(110, rifpartita_handler);
rp.sheet_mask().set_handler(111, accsal_handler);
rp.sheet_mask().set_handler(113, importo_handler);
rp.sheet_mask().set_handler(120, impvalp_handler);
rp.sheet_mask().set_handler(131, passat_handler);
rp.sheet_mask().set_handler(127, banca_handler);
rp.sheet_mask().set_handler(129, banca_handler);
rp.sheet_mask().set_handler(124, contropartita_handler);
rp.sheet_mask().set_handler(115, ritenute_handler);
rp.sheet_mask().set_handler(116, sezione_abb_handler);
rp.sheet_mask().set_handler(117, abbuoni_handler);
rp.sheet_mask().set_handler(118, sezione_dc_handler);
rp.sheet_mask().set_handler(119, diffcambio_handler);
rp.sheet_mask().set_handler(DLG_DELREC, elimina_pagamenti);
rp.swap_columns(105,106);
rp.swap_columns(105,107);
rp.swap_columns(105,108);
rp.swap_columns(105,109);
rp.swap_columns(105,110);
rp.swap_columns(105,111);
app().setta_mask_pagsca(tipocf,gruppo,conto,sottoc,anno,npart,nriga,*msk);
k = msk->run();
switch (k)
{
case K_ESC :
break;
case K_QUIT :
break;
case K_SAVE :
{
app().registra_pagamenti(*msk);
app()._registrato = TRUE;
}
break;
default:
break;
}
delete msk;
}
}
return TRUE;
}
char TVar_sc::sezione(char tipo,int gruppo,int conto,long sottoc,int anno,const TString& npart,int nriga,TString& codval,TMask& m)
{
char sez = '\0';
TSheet_field& part = (TSheet_field&)m.field(F_RIGAPART);
for (int i = 0 ; i < part.items(); i++)
{
TToken_string& row = part.row(i);
char tp = row.get (0)[0];
int g = row.get_int (1);
int c = row.get_int (2);
long s = row.get_long(3);
int an = row.get_int (5);
TString np = row.get (6);
int nr = row.get_int (7);
if (tipo == tp && gruppo == g && conto == c && sottoc == s &&
anno == an && npart == np && nriga == nr)
{
sez = part.sheet_mask().get(121)[0];
codval = part.sheet_mask().get(124);
codval.trim();
break;
}
}
return sez;
}
void TVar_sc::descr_condpag(const TString& codpag,int tipopag,const TString& ultclass,TString& d_condpag)
{
if (ultclass.not_empty())
{
TTable clr ("%CLR");
TString dep (format("%d%s", tipopag,(const char*) ultclass));
clr.zero();
clr.put("CODTAB", dep);
if (clr.read() == NOERR)
d_condpag = clr.get("S0");
else
d_condpag = "";
}
else
{
TTable rpg ("%RPG");
int tipo;
TString dep;
for (int i = 0; !rpg.eof(); rpg.next(), i++)
{
dep.format("%-s%3d", (const char*) codpag, i);
rpg.zero();
rpg.put("CODTAB", dep);
if (rpg.read() == NOERR)
{
tipo = rpg.get_int("I1");
if (tipo == tipopag)
{
switch(tipo)
{
case 1: d_condpag = TR("Rimessa diretta");
break;
case 2: d_condpag = TR("Tratta");
break;
case 3: d_condpag = TR("Ricevuta bancaria");
break;
case 4: d_condpag = TR("Cessione");
break;
case 5: d_condpag = TR("Paghero'");
break;
case 6: d_condpag = TR("Lettera di credito");
break;
case 7: d_condpag = TR("Tratta accettata");
break;
case 8: d_condpag = TR("Rapporti interbancari diretti");
break;
case 9: d_condpag = TR("Bonifico");
break;
case 10: d_condpag = TR("Altro");
break;
default: break;
};
break;
}
}
else
{
d_condpag = "";
break;
}
}
}
}
void TVar_sc::setta_mask_scad(char tipo,int gruppo,int conto,long sottoc,
int anno,const TString& numpart,int nriga,TMask& m)
{
_tscad->setkey(1);
_tscad->zero();
_tscad->put(SCAD_TIPOCF, tipo);
if (gruppo != 0)
_tscad->put(SCAD_GRUPPO, gruppo);
if (conto != 0)
_tscad->put(SCAD_CONTO, conto);
if (sottoc != 0)
_tscad->put(SCAD_SOTTOCONTO, sottoc);
if (anno != 0)
_tscad->put(SCAD_ANNO, anno);
_tscad->put(SCAD_NUMPART, numpart);
if (nriga != 0)
_tscad->put(SCAD_NRIGA, nriga);
TRectype scadenza (_tscad->curr());
TSheet_field& scad = (TSheet_field&)m.field(F_RIGASCAD);
const long last_c = _tscad->items();
_tscad->read(_isgteq);
for (int i = 0 ; !_tscad->eof(); _tscad->next(), i++)
{
TString part_rec = scadenza.get(SCAD_NUMPART);
TString part_file = _tscad->get(SCAD_NUMPART);
if (_tscad->curr() != scadenza || part_rec != part_file) break;
TToken_string& row = scad.row(i);
TString tipoc (_tscad->get (SCAD_TIPOCF));
int nrata = _tscad->get_int (SCAD_NRATA);
TString16 datascad (_tscad->get_date(SCAD_DATASCAD));
TString16 codpag (_tscad->get (SCAD_CODPAG));
int tipopag = _tscad->get_int (SCAD_TIPOPAG);
TString ultclass (_tscad->get (SCAD_ULTCLASS));
real importo (_tscad->get_real(SCAD_IMPORTO));
real impval (_tscad->get_real(SCAD_IMPORTOVAL));
TString descr (_tscad->get (SCAD_DESCR));
long nsabi = _tscad->get_long(SCAD_CODABIPR);
long nscab = _tscad->get_long(SCAD_CODCABPR);
long vsabi = _tscad->get_long(SCAD_CODABI);
long vscab = _tscad->get_long(SCAD_CODCAB);
TString codag (_tscad->get (SCAD_CODAG));
TString16 datasoll (_tscad->get_date(SCAD_DATASOLL));
int nsoll = _tscad->get_int (SCAD_NSOLL);
TString d_conto,d_condpag,codval;
codval = "";
char sez = sezione(tipo,gruppo,conto,sottoc,anno,numpart,nriga,codval,*_mask);
descr_conto(tipoc,gruppo,conto,sottoc,d_conto);
descr_condpag(codpag,tipopag,ultclass,d_condpag);
TString16 str;
row.add(tipo);
str.format("%3d", gruppo);
row.add(str);
str.format("%3d", conto);
row.add(str);
str.format("%6ld", sottoc);
row.add(str);
row.add(d_conto);
str.format("%4d", anno);
row.add(str);
row.add(numpart);
str.format("%4d", nriga);
row.add(str);
str.format("%4d", nrata);
row.add(str);
row.add(datascad);
row.add(codpag);
str.format("%d", tipopag);
row.add(str);
row.add(ultclass);
row.add(d_condpag);
row.add(sez);
row.add(importo.string());
row.add(impval.string());
row.add(descr);
str.format("%5ld", nsabi);
row.add(str);
str.format("%5ld", nscab);
row.add(str);
str.format("%5ld", vsabi);
row.add(str);
str.format("%5ld", vscab);
row.add(str);
row.add(codag);
row.add(datasoll);
str.format("%2d", nsoll);
row.add(str);
}
}
void TVar_sc::setta_mask_pagsca(char tipo,int gruppo,int conto,long sottoc,
int anno,const TString& numpart,int nriga,TMask& m)
{
_tpagsca->setkey(1);
_tpagsca->zero();
_tpagsca->put(PAGSCA_TIPOC, tipo);
if (gruppo != 0)
_tpagsca->put(PAGSCA_GRUPPO, gruppo);
if (conto != 0)
_tpagsca->put(PAGSCA_CONTO, conto);
if (sottoc != 0)
_tpagsca->put(PAGSCA_SOTTOCONTO, sottoc);
if (anno != 0)
_tpagsca->put(PAGSCA_ANNO, anno);
_tpagsca->put(PAGSCA_NUMPART, numpart);
TRectype pagamenti (_tpagsca->curr());
TSheet_field& pag = (TSheet_field&)m.field(F_RIGAPAGSCA);
const long last_c = _tpagsca->items();
_tpagsca->read(_isgteq);
for (int i = 0 ; !_tpagsca->eof(); _tpagsca->next(), i++)
{
TString rec = pagamenti.get(PAGSCA_NUMPART);
TString file = _tpagsca->get(PAGSCA_NUMPART);
if (_tpagsca->curr() != pagamenti || file != rec) break;
int nrigp = _tpagsca->get_int(PAGSCA_NRIGP);
int nriga_fatt = _tpagsca->get_int(PAGSCA_NRIGA);
if (nriga != nrigp) continue;
TToken_string& row = pag.row(i);
TString tipoc (_tpagsca->get (PAGSCA_TIPOC));
int nrata = _tpagsca->get_int (PAGSCA_NRATA);
TString16 accsal (_tpagsca->get (PAGSCA_ACCSAL));
real importo (_tpagsca->get_real(PAGSCA_IMPORTO));
real ritenute (_tpagsca->get_real(PAGSCA_RITENUTE));
real ritsoc (_tpagsca->get_real(PAGSCA_RITSOC));
real abbuoni (_tpagsca->get_real(PAGSCA_ABBUONI));
real diffcam (_tpagsca->get_real(PAGSCA_DIFFCAM));
real impval (_tpagsca->get_real(PAGSCA_IMPORTOVAL));
TString tipocc (_tpagsca->get (PAGSCA_TIPOCC));
int gruppoc = _tpagsca->get_int (PAGSCA_GRUPPOC);
int contoc = _tpagsca->get_int (PAGSCA_CONTOC);
long sottocc = _tpagsca->get_long(PAGSCA_SOTTOCONTC);
long nsabi = _tpagsca->get_long(PAGSCA_CODABIPR);
long nscab = _tpagsca->get_long(PAGSCA_CODCABPR);
long vsabi = _tpagsca->get_long(PAGSCA_CODABI);
long vscab = _tpagsca->get_long(PAGSCA_CODCAB);
TString codag (_tpagsca->get (PAGSCA_CODAG));
char passat = _tpagsca->get_char(PAGSCA_PASSATT);
TString d_conto,d_contoc,codval;
char sezab = '\0';
char sezdc = '\0';
char sez = sezione(tipo,gruppo,conto,sottoc,anno,numpart,nriga,codval,*_mask);
descr_conto(tipoc,gruppo,conto,sottoc,d_conto);
descr_conto(tipocc,gruppoc,contoc,sottocc,d_contoc); // Contropartita
if (abbuoni != ZERO)
{
sezab;
if (passat == 'A')
sezab = 'D';
else
if (passat == 'P')
sezab = 'A';
if (sezab != sez)
abbuoni = abbuoni * -1;
}
if (diffcam != ZERO)
{
sezdc = sez;
if (diffcam < ZERO)
{
diffcam = diffcam * -1;
if (sez == 'D')
sezdc = 'A';
else
if (sez == 'A')
sezdc = 'D';
}
}
TString16 str;
row.add(tipo);
str.format("%3d", gruppo);
row.add(str);
str.format("%3d", conto);
row.add(str);
str.format("%6ld", sottoc);
row.add(str);
row.add(d_conto);
str.format("%4d", anno);
row.add(str);
row.add(numpart);
str.format("%4d", nriga_fatt);
row.add(str);
str.format("%4d", nrata);
row.add(str);
str.format("%4d", nrigp);
row.add(str);
row.add(accsal);
str.format("%c", sez);
row.add(str);
row.add(importo.string());
if (ritenute != ZERO)
row.add(str);
else
row.add("");
row.add(ritenute.string());
str.format("%c", sezab);
row.add(str);
row.add(abbuoni.string());
str.format("%c", sezdc);
row.add(str);
row.add(diffcam.string());
row.add(impval.string());
row.add(tipocc);
str.format("%3d", gruppoc);
row.add(str);
str.format("%3d", contoc);
row.add(str);
str.format("%6ld", sottocc);
row.add(str);
row.add(d_contoc);
str.format("%5ld", nsabi);
row.add(str);
str.format("%5ld", nscab);
row.add(str);
str.format("%5ld", vsabi);
row.add(str);
str.format("%5ld", vscab);
row.add(str);
row.add(codag);
str.format("%c", passat);
row.add(str);
row.add(ritsoc.string());
}
}
bool TVar_sc::video_SC()
{
KEY tasto;
do
{
_msk->reset(F_ANNO);
_msk->reset(F_NUMPART);
_msk->reset(F_NRIGA);
tasto = _msk->run();
if (tasto != K_ENTER) return FALSE;
_tipocf = _msk->get (F_TIPOCF)[0];
_gruppo = _msk->get_int (F_GRUPPO);
_conto = _msk->get_int (F_CONTO);
_sottoc = _msk->get_long(F_SOTTOCONTO);
_anno = _msk->get_int (F_ANNO);
_numpart = _msk->get (F_NUMPART);
_nriga = _msk->get_int (F_NRIGA);
setta_campi_maschera(*_mask);
_mask->force_update();
tasto = _mask->run();
switch (tasto)
{
case K_ESC :
break;
case K_QUIT :
break;
case K_SAVE :
{
registra_partita(*_mask);
_registrato = TRUE;
}
break;
default:
break;
}
}
while (tasto != K_QUIT); //K_ENTER
return TRUE;
}
bool TVar_sc::descr_conto(const TString& tipo,int g,int c,long s,TString& d_conto)
{
if (tipo == "C" || tipo == "F")
{
TLocalisamfile clifo (LF_CLIFO);
clifo.setkey(1);
clifo.zero();
clifo.put(CLI_TIPOCF, tipo);
clifo.put(CLI_CODCF, s);
if (clifo.read() == NOERR)
{
d_conto = clifo.get(CLI_RAGSOC);
return TRUE;
}
else
{
d_conto = "";
return FALSE;
}
}
else
{
TLocalisamfile pcon (LF_PCON);
pcon.setkey(1);
pcon.zero();
pcon.put(PCN_GRUPPO, g);
pcon.put(PCN_CONTO, c);
pcon.put(PCN_SOTTOCONTO, s);
if (pcon.read() == NOERR)
{
d_conto = pcon.get(PCN_DESCR);
return TRUE;
}
else
{
d_conto = "";
return FALSE;
}
}
return TRUE;
}
bool TVar_sc::descr_caus(const TString& codcaus,TString& d_caus)
{
TLocalisamfile cau (LF_CAUSALI);
cau.setkey(1);
cau.zero();
cau.put("CODCAUS", (const char*) codcaus);
if (cau.read() == NOERR)
{
d_caus = cau.get (CAU_DESCR);
_dd_caus = cau.get_bool(CAU_DATADOC);
_nd_caus = cau.get_bool(CAU_NUMDOC);
_tm_caus = cau.get_int (CAU_TIPOMOV);
_movval = cau.get_bool(CAU_MOVVAL);
return TRUE;
}
else
{
d_caus = "";
_dd_caus = FALSE;
_nd_caus = FALSE;
_tm_caus = 0;
_movval = FALSE;
return FALSE;
}
return TRUE;
}
bool TVar_sc::descr_contocl(int g,int c,TString& d_conto)
{
TLocalisamfile pcon (LF_PCON);
pcon.setkey(1);
pcon.zero();
pcon.put(PCN_GRUPPO, g);
pcon.put(PCN_CONTO, c);
pcon.read();
if ( (g == pcon.get_int(PCN_GRUPPO)) && (c == pcon.get_int(PCN_CONTO)) )
{
d_conto = pcon.get(PCN_DESCR);
return TRUE;
}
else
{
d_conto = "";
return FALSE;
}
return TRUE;
}
void TVar_sc::setta_campi_maschera(TMask& m)
{
if (_gruppo == 0 && _conto == 0 && _sottoc == 0 && _anno == 0
&& _numpart.empty() && _nriga == 0)
{
_tpart->setkey(1);
_tpart->zero();
_tpart->first();
}
else
{
_tpart->setkey(1);
_tpart->zero();
_tpart->put(PART_TIPOCF, _tipocf);
if (_gruppo != 0)
_tpart->put(PART_GRUPPO, _gruppo);
if (_conto != 0)
_tpart->put(PART_CONTO, _conto);
if (_sottoc != 0)
_tpart->put(PART_SOTTOCONTO, _sottoc);
if (_anno != 0)
_tpart->put(PART_ANNO, _anno);
_tpart->put(PART_NUMPART, _numpart);
if (_nriga != 0)
_tpart->put(PART_NRIGA, _nriga);
TRectype partita (_tpart->curr());
_tpart->read(_isgteq);
if (_tpart->curr() != partita)
{
_tpart->zero();
_tpart->first();
}
}
TSheet_field& partita = (TSheet_field&)m.field(F_RIGAPART);
const long last_c = _tpart->items();
partita.destroy();
for (int i = 0 ; !_tpart->eof(); _tpart->next(), i++)
{
TToken_string& row = partita.row(i);
TString16 tipoc (_tpart->get (PART_TIPOCF));
int gruppo = _tpart->get_int (PART_GRUPPO);
int conto = _tpart->get_int (PART_CONTO);
long sottoc = _tpart->get_long(PART_SOTTOCONTO);
int anno = _tpart->get_int (PART_ANNO);
TString16 numpart (_tpart->get (PART_NUMPART));
int nriga = _tpart->get_int (PART_NRIGA);
TString16 datareg (_tpart->get_date(PART_DATAREG));
TString16 codcaus (_tpart->get (PART_CODCAUS));
int gruppocl = _tpart->get_int (PART_GRUPPOCL);
int contocl = _tpart->get_int (PART_CONTOCL);
int tipomov = _tpart->get_int (PART_TIPOMOV);
TString descr (_tpart->get (PART_DESCR));
TString16 sezione (_tpart->get (PART_SEZ));
TString16 datapag (_tpart->get_date(PART_DATAPAG));
TString16 codval (_tpart->get (PART_CODVAL));
TString16 datacam (_tpart->get_date(PART_DATACAM));
TString16 numdoc (_tpart->get (PART_NUMDOC));
TString16 datadoc (_tpart->get_date(PART_DATADOC));
int tipopag = _tpart->get_int (PART_TIPOPAG);
real cambio (_tpart->get_real(PART_CAMBIO));
long numreg = _tpart->get_long(PART_NREG);
int numrig = _tpart->get_int (PART_NUMRIG);
TString d_conto,d_caus,d_contocl;
descr_conto(tipoc,gruppo,conto,sottoc,d_conto);
descr_caus(codcaus,d_caus);
descr_contocl(gruppocl,contocl,d_contocl);
TString16 str;
row.add(tipoc);
str.format("%3d", gruppo);
row.add(str);
str.format("%3d", conto);
row.add(str);
str.format("%6ld", sottoc);
row.add(str);
row.add(d_conto);
str.format("%4d", anno);
row.add(str);
row.add(numpart);
str.format("%4d", nriga);
row.add(str);
row.add(datadoc);
row.add(numdoc);
row.add(codcaus);
row.add(d_caus);
str.format("%7ld", numreg);
row.add(str);
str.format("%3d", numrig);
row.add(str);
row.add(datareg);
str.format("%3d", gruppocl);
row.add(str);
str.format("%3d", contocl);
row.add(str);
row.add(d_contocl);
str.format("%d", tipomov);
row.add(str);
row.add(descr);
row.add(sezione);
row.add(datapag);
str.format("%d", tipopag);
row.add(str);
row.add(codval);
row.add(datacam);
row.add(cambio.string());
row.add(tipoc);
str.format("%3d", gruppo);
row.add(str);
str.format("%3d", conto);
row.add(str);
str.format("%6ld", sottoc);
row.add(str);
row.add(d_conto);
row.add(tipoc);
str.format("%3d", gruppo);
row.add(str);
str.format("%3d", conto);
row.add(str);
str.format("%6ld", sottoc);
row.add(str);
row.add(d_conto);
}
}
bool TVar_sc::tipo_contocl(int g,int c,TString& tipo)
{
TLocalisamfile pcon (LF_PCON);
pcon.setkey(1);
pcon.zero();
pcon.put(PCN_GRUPPO, g);
pcon.put(PCN_CONTO, c);
pcon.read();
if ( (g == pcon.get_int(PCN_GRUPPO)) && (c == pcon.get_int(PCN_CONTO)) )
{
tipo = pcon.get(PCN_TMCF);
return TRUE;
}
else
{
tipo = "";
return FALSE;
}
return TRUE;
}
bool TVar_sc::codvaluta(const TString& codval)
{
TTable val ("%VAL");
TString dep;
dep.format("%-3s", (const char*) codval);
val.zero();
val.put("CODTAB", dep);
if (val.read() == NOERR)
return TRUE;
else
return FALSE;
return TRUE;
}
int TVar_sc::tipo_movimento(char tipo,int gruppo,int conto,long sottoc,int anno,const TString& npart,int nriga,TMask& m)
{
int tipomov = 0;
TSheet_field& part = (TSheet_field&)m.field(F_RIGAPART);
for (int i = 0 ; i < part.items(); i++)
{
TToken_string& row = part.row(i);
char tp = row.get (0)[0];
int g = row.get_int (1);
int c = row.get_int (2);
long s = row.get_long(3);
int an = row.get_int (5);
TString np = row.get (6);
int nr = row.get_int (7);
if (tipo == tp && gruppo == g && conto == c && sottoc == s &&
anno == an && npart == np && nriga == nr)
{
tipomov = part.sheet_mask().get_int(119);
break;
}
}
return tipomov;
}
// *****************************************
// ***** HANDLER sulla riga di partita *****
// *****************************************
bool TVar_sc::tipocf_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString16 tipocf(f.get());
if (tipocf != "" && tipocf != "C" && tipocf != "F")
return f.warning_box(TR("Tipo anagrafica errato"));
}
return TRUE;
}
bool TVar_sc::codcf_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString tipocf = f.mask().get (101);
int gruppo = f.mask().get_int(102);
int conto = f.mask().get_int(103);
long sottoc = atol(f.get());
TString desc;
if (!app().descr_conto(tipocf,gruppo,conto,sottoc,desc))
return f.warning_box(TR("Codice anagrafica errato"));
}
return TRUE;
}
bool TVar_sc::rifpart_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
int anno = f.mask().get_int(106);
TString numpart = f.mask().get (107);
int nriga = atoi(f.get());
if (anno == 0 || numpart.empty() || nriga == 0)
return f.warning_box(TR("Riferimento partita errato"));
}
return TRUE;
}
bool TVar_sc::datareg_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
if ( !(TDate::isdate(f.get())) )
return warning_box(TR("Data errata o formato non valido"));
}
return TRUE;
}
bool TVar_sc::codcaus_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString appoggio;
TString codcaus = f.get();
int tipomov = f.mask().get_int(119);
if (codcaus.not_empty())
if (!app().descr_caus(codcaus,appoggio))
return f.warning_box(TR("Valore non valido per codice causale"));
long nreg = f.mask().get_long(113);
if (nreg != 0 && codcaus.empty())
return f.warning_box(TR("Se e' indicato il numero di operazione la causale deve essere significativa"));
if (tipomov == 0)
f.mask().set(119,app()._tm_caus);
else
{
if (codcaus.not_empty())
if (tipomov != app()._tm_caus)
return f.warning_box(TR("Tipo movimento partita non congruo con tipo movimento indicato sulla causale"));
}
}
return TRUE;
}
bool TVar_sc::datadoc_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString appoggio;
TString codcaus = f.mask().get(111);
TString datadoc = f.get();
datadoc.trim();
app().descr_caus(codcaus,appoggio);
if (datadoc.empty() && app()._dd_caus)
return f.warning_box(TR("Data documento obbligatoria"));
}
return TRUE;
}
bool TVar_sc::numdoc_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString appoggio;
TString codcaus = f.mask().get(111);
TString numdoc = f.get();
app().descr_caus(codcaus,appoggio);
if (numdoc.empty() && app()._nd_caus)
return f.warning_box(TR("Numero documento obbligatorio"));
}
return TRUE;
}
bool TVar_sc::contocl_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString tmcf;
int gruppo = f.mask().get_int(116);
int conto = atoi(f.get());
if (gruppo == 0 && conto == 0) return TRUE;
if (!app().tipo_contocl(gruppo,conto,tmcf))
return f.warning_box(TR("Codice conto non esistente su piano dei conti"));
TString tipo = f.mask().get(101);
if (tipo != tmcf)
return f.warning_box(TR("Tipo conto C/F non congruo con tipo anagrafica"));
}
return TRUE;
}
bool TVar_sc::tipomov_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
int tipomov = atoi(f.get());
if (tipomov != 1 && tipomov != 2 && tipomov != 3 && tipomov != 5 && tipomov != 6)
return f.warning_box(TR("Tipo movimento errato"));
TString codcaus = f.mask().get(111);
if (codcaus.not_empty())
{
TString appoggio;
app().descr_caus(codcaus,appoggio);
if (tipomov != app()._tm_caus)
return f.warning_box("Tipo movimento partita non congruo con tipo movimento indicato sulla causale");
}
}
return TRUE;
}
bool TVar_sc::sezione_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString sezione = f.get();
if (sezione != "D" && sezione != "A")
return f.warning_box(TR("Sezione dare/avere errata"));
}
return TRUE;
}
bool TVar_sc::tipopag_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
int tipomov = f.mask().get_int(119);
int tipopag = atoi(f.get());
if (tipomov == 1 && tipopag != 0)
return f.warning_box(TR("In caso di fattura non e' possibile indicare il tipo pagamento"));
if (tipomov != 1 && tipomov != 2)
if (tipopag < 1 || tipopag > 9)
return f.warning_box(TR("Tipo pagamento errato"));
}
return TRUE;
}
bool TVar_sc::datapag_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
int tipomov = f.mask().get_int(119);
TString datapag (f.get());
datapag.trim();
if (tipomov == 1 && datapag.not_empty())
return f.warning_box(TR("In caso di fattura non e' possibile indicare la data del pagamento"));
if (tipomov != 1)
if (datapag.empty() || !(TDate::isdate(datapag)))
return f.warning_box(TR("Se il movimento non e' una fattura la data di pagamento deve essere indicata"));
}
return TRUE;
}
bool TVar_sc::codval_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval (f.get());
if (codval.not_empty())
{
if (!app().codvaluta(codval))
return f.warning_box(TR("Codice valuta non presente in tabella"));
TConfig conf (CONFIG_DITTA);
TString valuta = conf.get("GesVal");
if (codval.not_empty() && valuta.empty())
return f.warning_box(TR("Non e' possibile indicare il codice valuta se non indicata la gestione valuta sui parametri ditta"));
if (codval.empty() && valuta.not_empty())
return f.warning_box(TR("Il codice valuta deve essere indicato in quanto indicata la gestione in valuta sui parametri ditta"));
TString codcaus (f.mask().get(111));
if (codcaus.not_empty())
{
TString appoggio;
if (app().descr_caus(codcaus,appoggio))
{
if (app()._movval && codval.empty())
return f.warning_box(TR("Il codice valuta deve essere indicato in quanto indicata la gestione in valuta sulla causale"));
if (!app()._movval && codval.not_empty())
return f.warning_box(TR("Non e' possibile indicare il codice in valuta se non indicato il flag gestione valuta sulla causale"));
}
}
}
else
{
TDate datacam (f.mask().get_date(125));
real cambio (f.mask().get_real(126));
if (datacam.ok())
return f.warning_box(TR("Non e' possibile indicare la data cambio se non e' indicato il codice valuta"));
if (cambio != ZERO)
return f.warning_box(TR("Non e' possibile indicare il cambio se non e' indicato il codice valuta"));
}
}
return TRUE;
}
bool TVar_sc::datacam_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval (f.mask().get(124));
TString datacam (f.get());
datacam.trim();
if (codval.not_empty())
if (datacam.empty() || !(TDate::isdate(datacam)))
return f.warning_box(TR("Se il codice valuta e' indicato la data cambio deve essere significativa"));
}
return TRUE;
}
bool TVar_sc::cambio_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval (f.mask().get(124));
real cambio (f.get());
if (codval.not_empty())
if (cambio == ZERO)
return f.warning_box(TR("Se il codice valuta e' indicato il cambio deve essere significativo"));
}
return TRUE;
}
// ******************************************
// ***** HANDLER sulla riga di scadenza *****
// ******************************************
bool TVar_sc::nrata_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
int nrata = atoi(f.get());
if (nrata == 0)
return f.warning_box(TR("Il numero di rata deve essere significativo"));
}
return TRUE;
}
bool TVar_sc::codpag_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) )
{
TString descr;
TString codpag = f.get();
if (codpag.not_empty())
{
if (f.mask().is_running())
{
TTable cpg ("%CPG");
TString dep (format("%-4s", (const char*) codpag));
cpg.zero();
cpg.put("CODTAB", dep);
if (cpg.read() != NOERR)
return f.warning_box(TR("Codice di pagamento errato o non presente in tabella"));
}
TTable rpg ("%RPG");
int tipo;
int tipopag = f.mask().get_int(112);
TString dep;
for (int i = 0; !rpg.eof(); rpg.next(), i++)
{
dep.format("%-s%3d", (const char*) codpag, i);
rpg.zero();
rpg.put("CODTAB", dep);
if (rpg.read() == NOERR)
{
tipo = rpg.get_int("I1");
if (tipo == tipopag)
{
switch(tipo)
{
case 1: descr = TR("Rimessa diretta");
break;
case 2: descr = TR("Tratta");
break;
case 3: descr = TR("Ricevuta bancaria");
break;
case 4: descr = TR("Cessione");
break;
case 5: descr = TR("Paghero'");
break;
case 6: descr = TR("Lettera di credito");
break;
case 7: descr = TR("Tratta accettata");
break;
case 8: descr = TR("Rapporti interbancari diretti");
break;
case 9: descr = TR("Bonifico");
break;
case 10: descr = TR("Altro");
break;
default: break;
};
break;
}
}
else
{
descr = "";
break;
}
}
if (f.mask().is_running())
{
if (tipopag != 0)
{
if (tipopag != tipo)
return f.warning_box(TR("Il tipo pagamento della scadenza non e' congruo con il tipo pagamento del codice di pagamento"));
}
else
f.mask().set(112,tipo);
}
}
TString ultclass = f.mask().get(113);
if (ultclass.empty())
f.mask().set(114, descr);
}
return TRUE;
}
bool TVar_sc::tpscad_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codpag = f.mask().get(111);
if (codpag.empty()) return TRUE;
int tipopag = atoi(f.get());
if (tipopag < 1 || tipopag > 9)
return f.warning_box(TR("Tipo pagamento errato"));
TTable cpg ("%CPG");
TString dep (format("%-4s", (const char*) codpag));
int tipo = 0;
cpg.zero();
cpg.put("CODTAB", dep);
if (cpg.read() == NOERR)
tipo = atoi(cpg.get("S4"));
if (tipopag != tipo)
return f.warning_box(TR("Il tipo pagamento della scadenza non e' congruo con il tipo pagamento del codice di pagamento"));
}
return TRUE;
}
bool TVar_sc::ultclass_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString descr;
TString ultclass = f.get();
int tipopag = f.mask().get_int(112);
if (ultclass.empty())
{
TTable rpg ("%RPG");
int tipo;
TString codpag = f.mask().get(111);
int tipopag = f.mask().get_int(112);
TString dep;
for (int i = 0; !rpg.eof(); rpg.next(), i++)
{
dep.format("%-s%3d", (const char*) codpag, i);
rpg.zero();
rpg.put("CODTAB", dep);
if (rpg.read() == NOERR)
{
tipo = rpg.get_int("I1");
if (tipo == tipopag)
{
switch(tipo)
{
case 1: descr = TR("Rimessa diretta");
break;
case 2: descr = TR("Tratta");
break;
case 3: descr = TR("Ricevuta bancaria");
break;
case 4: descr = TR("Cessione");
break;
case 5: descr = TR("Paghero'");
break;
case 6: descr = TR("Lettera di credito");
break;
case 7: descr = TR("Tratta accettata");
break;
case 8: descr = TR("Rapporti interbancari diretti");
break;
case 9: descr = TR("Bonifico");
break;
case 10: descr = TR("Altro");
break;
default: break;
};
break;
}
}
else
{
descr = "";
break;
}
}
f.mask().set(114, descr);
return TRUE;
}
TTable clr ("%CLR");
TString dep (format("%d%s", tipopag,(const char*) ultclass));
clr.zero();
clr.put("CODTAB", dep);
if (clr.read() == NOERR)
descr = clr.get("S0");
else
return f.warning_box(TR("Ulteriore classificazione errata o non presente in tabella"));
f.mask().set(114, descr);
}
return TRUE;
}
bool TVar_sc::datascad_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString datascad (f.get());
datascad.trim();
if (datascad.empty() || !(TDate::isdate(datascad)))
return f.warning_box(TR("Data scadenza errata"));
}
return TRUE;
}
bool TVar_sc::banca_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString mess;
long abi;
long cab = atol(f.get());
int id = f.dlg();
if (id == 120)
{
abi = f.mask().get_long(119);
mess = TR("Codice nostra banca errato o non presente in tabella");
}
else
if (id == 122)
{
abi = f.mask().get_long(121);
mess = TR("Codice vostra banca errato o non presente in tabella");
}
else
if (id == 127)
{
abi = f.mask().get_long(126);
mess = TR("Codice nostra banca errato o non presente in tabella");
}
else
if (id == 129)
{
abi = f.mask().get_long(128);
mess = TR("Codice vostra banca errato o non presente in tabella");
}
if (abi == 0 && cab == 0) return TRUE;
TTable ban ("%BAN");
TString dep;
if (abi != 0 && cab != 0)
dep.format("%05ld%05ld", abi,cab);
if (abi != 0 && cab == 0)
dep.format("%05ld", abi);
ban.zero();
ban.put("CODTAB", dep);
if (ban.read() != NOERR)
return f.warning_box("%s", (const char*) mess);
}
return TRUE;
}
bool TVar_sc::datasoll_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString datasoll (f.get());
datasoll.trim();
if (datasoll.empty())
return TRUE;
if (!(TDate::isdate(datasoll)))
return f.warning_box(TR("Data sollecito errata"));
}
return TRUE;
}
bool TVar_sc::importo_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
real importo (f.get());
if (importo == ZERO)
return f.warning_box(TR("L'importo del pagamento deve essere significativo"));
}
return TRUE;
}
bool TVar_sc::impval_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval;
real importo (f.get());
char tipo = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (108);
app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask));
if (codval.empty() && importo != ZERO)
return f.warning_box(TR("L'importo in valuta della scadenza non puo' essere indicato se non indicato il codice valuta"));
if (codval.not_empty() && importo == ZERO)
return f.warning_box(TR("L'importo in valuta della scadenza deve essere significativo"));
}
return TRUE;
}
// *******************************************
// ***** HANDLER sulla riga di pagamento *****
// *******************************************
bool TVar_sc::record_partite(char tipo,int g,int c,long s,int anno,TString& npart,int nriga)
{
TRecnotype nrec = _tpart->recno();
TIsamtempfile& part = *_tpart;
part.zero();
part.put(PART_TIPOCF, tipo);
part.put(PART_GRUPPO, g);
part.put(PART_CONTO, c);
part.put(PART_SOTTOCONTO, s);
part.put(PART_ANNO, anno);
part.put(PART_NUMPART, npart);
part.put(PART_NRIGA, nriga);
if (part.read() == NOERR)
{
_tpart->readat(nrec);
return TRUE;
}
_tpart->readat(nrec);
return FALSE;
}
bool TVar_sc::record_scadenze(char tipo,int g,int c,long s,int anno,TString& npart,int nriga,int nrata)
{
TRecnotype nrec = _tscad->recno();
TIsamtempfile& scad = *_tscad;
scad.zero();
scad.put(SCAD_TIPOCF, tipo);
scad.put(SCAD_GRUPPO, g);
scad.put(SCAD_CONTO, c);
scad.put(SCAD_SOTTOCONTO, s);
scad.put(SCAD_ANNO, anno);
scad.put(SCAD_NUMPART, npart);
scad.put(SCAD_NRIGA, nriga);
scad.put(SCAD_NRATA, nrata);
if (scad.read() == NOERR)
{
_tscad->readat(nrec);
return TRUE;
}
_tscad->readat(nrec);
return FALSE;
}
bool TVar_sc::rifpartita_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
int nriga = f.mask().get_int(108);
int nrata = f.mask().get_int(109);
if (nriga == 9999 || nrata == 9999) return TRUE;
char t = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
if (!app().record_partite(t,g,c,s,anno,npart,nriga))
return f.warning_box(TR("Non esiste la riga partita corrispondente"));
if (!app().record_scadenze(t,g,c,s,anno,npart,nriga,nrata))
return f.warning_box(TR("Non esiste la rata di scadenza corrispondente"));
}
return TRUE;
}
bool TVar_sc::accsal_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString accsal = f.get();
char t = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (110);
int tipo = app().tipo_movimento(t,g,c,s,anno,npart,nriga,*(app()._mask));
if ( (tipo == 2 || tipo == 5) && accsal == "S")
return f.warning_box(TR("Il flag in acconto / a saldo non puo' essere indicato in caso di Nota credito e Insoluto"));
if (accsal != "S" && accsal != "A")
return f.warning_box(TR("Flag in acconto / a saldo errato"));
}
return TRUE;
}
bool TVar_sc::passat_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
real abbuoni (f.mask().get_real(117));
TString passat = f.get();
if (abbuoni != ZERO)
if (passat != "P" && passat != "A")
return f.warning_box(TR("Flag attivo / passivo errato"));
}
return TRUE;
}
bool TVar_sc::impvalp_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval;
real importo (f.get());
char tipo = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (110);
app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask));
if (codval.empty() && importo != ZERO)
return f.warning_box(TR("L'importo in valuta del pagamento non puo' essere indicato se non indicato il codice valuta"));
if (codval.not_empty() && importo == ZERO)
return f.warning_box(TR("L'importo in valuta del pagamento deve essere significativo"));
}
return TRUE;
}
bool TVar_sc::sezione_abb_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString sez (f.get());
real abbuoni (f.mask().get(117));
if (sez != "D" && sez != "A" && sez != "")
return f.warning_box(TR("Valore non valido per sezione"));
if (abbuoni != ZERO && sez.empty())
return f.warning_box(TR("Se gli abbuoni sono significativi la sezione deve essere indicata"));
if (sez == "D")
f.mask().set(131,"A");
else
if (sez == "A")
f.mask().set(131,"P");
else
f.mask().set(131,"");
}
return TRUE;
}
bool TVar_sc::ritenute_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval;
char tipo = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (110);
real ritenute (f.get());
int tipomov = app().tipo_movimento(tipo,g,c,s,anno,npart,nriga,*(app()._mask));
if ( (tipomov == 2 || tipomov == 5) && ritenute != ZERO)
return f.warning_box(TR("La ritenuta non puo' essere indicata in caso di Nota credito e Insoluto"));
char sez = app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask));
TString str (format("%c", sez));
if (ritenute != ZERO)
f.mask().set(114,str);
else
f.mask().set(114,"");
}
return TRUE;
}
bool TVar_sc::abbuoni_handler(TMask_field& f, KEY k)
{
if (k == K_TAB)
{
TString codval;
char tipo = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (110);
app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask));
if (codval.not_empty())
((TReal_field&)f).set_decimals(3);
else
((TReal_field&)f).set_decimals(0);
}
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString accsal (f.mask().get(111));
real abbuoni (f.get());
if (accsal == "A" && abbuoni != ZERO)
return f.warning_box(TR("Gli abbuoni possono essere indicati solo se a SALDO"));
}
return TRUE;
}
bool TVar_sc::sezione_dc_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString sez (f.get());
real diffcam (f.mask().get(119));
if (sez != "D" && sez != "A" && sez != "")
return f.warning_box(TR("Valore non valido per sezione"));
if (diffcam != ZERO && sez.empty())
return f.warning_box(TR("Se la differenza cambio e' significativa la sezione deve essere indicata"));
}
return TRUE;
}
bool TVar_sc::diffcambio_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
TString codval;
char tipo = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (110);
app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask));
TString accsal (f.mask().get(111));
real diffcam (f.get());
if (accsal == "A" && diffcam != ZERO)
return f.warning_box(TR("La differenza cambio puo' essere indicata solo se a SALDO"));
if (codval.empty() && diffcam != ZERO)
return f.warning_box(TR("La differenza cambio puo' essere indicata solo in caso di valuta"));
}
return TRUE;
}
bool TVar_sc::contropartita_handler(TMask_field& f, KEY k)
{
if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
{
char tipo = f.mask().get (101)[0];
int g = f.mask().get_int (102);
int c = f.mask().get_int (103);
long s = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString npart = f.mask().get (107);
int nriga = f.mask().get_int (110);
TString tipocf = f.mask().get(121);
if (tipocf == "C" || tipocf == "F")
{
long codcf = f.mask().get_long(124);
if (codcf == 0) return TRUE;
TLocalisamfile clifo (LF_CLIFO);
clifo.setkey(1);
clifo.zero();
clifo.put(CLI_TIPOCF, tipocf);
clifo.put(CLI_CODCF, codcf);
if (clifo.read() != NOERR)
return f.warning_box(TR("Codice di contropartita errato o non presente in anagrafica clienti/fornitori"));
}
else
{
int gruppo = f.mask().get_int (122);
int conto = f.mask().get_int (123);
long sottoc = f.mask().get_long(124);
if (gruppo == 0 && conto == 0 && sottoc == 0) return TRUE;
TLocalisamfile pcon (LF_PCON);
pcon.setkey(1);
pcon.zero();
pcon.put(PCN_GRUPPO, gruppo);
pcon.put(PCN_CONTO, conto);
pcon.put(PCN_SOTTOCONTO, sottoc);
if (pcon.read() != NOERR)
return f.warning_box(TR("Codice contropartita errato o non presente in piano conti"));
}
}
return TRUE;
}
bool TVar_sc::registra_dati_comuni(TMask_field& f, KEY k)
{
if (k == K_ENTER && f.mask().is_running())
{
long nreg = f.mask().get_long(113);
int nrig = f.mask().get_int (114);
if (nreg != 0 && nrig != 0)
{
TDate datareg (f.mask().get_date(115));
TString numdoc (f.mask().get (110));
TDate datadoc (f.mask().get_date(109));
TString codcaus (f.mask().get (111));
TSheet_field& part = (TSheet_field&)app()._mask->field(F_RIGAPART);
for (int i = 0; i < part.items(); i++)
{
TToken_string& row = part.row(i);
long numreg = row.get_long(12);
int numrig = row.get_int (13);
if (nreg != numreg || nrig != numrig) continue;
TString d_caus;
app().descr_caus(codcaus,d_caus);
row.add(datadoc,8);
row.add(numdoc,9);
row.add(codcaus,10);
row.add(d_caus,11);
row.add(datareg,14);
}
part.force_update();
}
}
return TRUE;
}
bool TVar_sc::cancella_partita(TMask_field& f)
{
TIsamtempfile& part = *_tpart;
char tipo = f.mask().get (101)[0];
int gruppo = f.mask().get_int (102);
int conto = f.mask().get_int (103);
long sottoc = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString numpart = f.mask().get (107);
int nriga = f.mask().get_int (108);
int tipomov = f.mask().get_int (119);
if (!controlla_abbuoni_diffcam(tipo,gruppo,conto,sottoc,anno,numpart,nriga,0))
return f.message_box(TR("Impossibile eliminare questa partita in quanto esistono uno o piu' pagamenti riferiti ad essa contenenti abbuoni o differenze cambio"));
part.setkey(1);
part.zero();
part.put(PART_TIPOCF, tipo);
part.put(PART_GRUPPO, gruppo);
part.put(PART_CONTO, conto);
part.put(PART_SOTTOCONTO, sottoc);
part.put(PART_ANNO, anno);
part.put(PART_NUMPART, numpart);
part.put(PART_NRIGA, nriga);
if (part.read() == NOERR)
{
part.remove();
if (tipomov == 1)
{
TIsamtempfile& scad = *_tscad;
scad.setkey(1);
scad.zero();
scad.put(SCAD_TIPOCF, tipo);
scad.put(SCAD_GRUPPO, gruppo);
scad.put(SCAD_CONTO, conto);
scad.put(SCAD_SOTTOCONTO, sottoc);
scad.put(SCAD_ANNO, anno);
scad.put(SCAD_NUMPART, numpart);
scad.put(SCAD_NRIGA, nriga);
TRectype scadenza (scad.curr());
for (scad.read(_isgteq); !scad.eof(); scad.next())
{
TString rec = scadenza.get(SCAD_NUMPART);
TString file = scad.get(SCAD_NUMPART);
if (scad.curr() != scadenza || file != rec) break;
int nrata = scad.get_int (SCAD_NRATA);
scad.remove();
sgancia_pagamenti(tipo,gruppo,conto,sottoc,anno,numpart,nriga,nrata);
}
}
else
if (tipomov != 1)
{
TIsamtempfile& pagsca = *_tpagsca;
pagsca.setkey(1);
pagsca.zero();
pagsca.put(PAGSCA_TIPOC, tipo);
pagsca.put(PAGSCA_GRUPPO, gruppo);
pagsca.put(PAGSCA_CONTO, conto);
pagsca.put(PAGSCA_SOTTOCONTO, sottoc);
pagsca.put(PAGSCA_ANNO, anno);
pagsca.put(PAGSCA_NUMPART, numpart);
TRectype pagamenti (pagsca.curr());
for (pagsca.read(_isgteq); !pagsca.eof(); pagsca.next())
{
TString rec = pagamenti.get(PAGSCA_NUMPART);
TString file = pagsca.get(PAGSCA_NUMPART);
if (pagsca.curr() != pagamenti || file != rec) break;
int nrigp = pagsca.get_int (PAGSCA_NRIGP);
if (nriga != nrigp) continue;
pagsca.remove();
}
}
}
else
return f.warning_box(TR("Non esiste la riga di partita richiesta sull'archivio delle partite"));
return TRUE;
}
bool TVar_sc::controlla_abbuoni_diffcam(char tipo,int g,int c,long s,int anno,TString& npart,int nriga,int nrata)
{
TIsamtempfile& pagsca = *_tpagsca;
pagsca.setkey(1);
pagsca.zero();
pagsca.put(PAGSCA_TIPOC, tipo);
pagsca.put(PAGSCA_GRUPPO, g);
pagsca.put(PAGSCA_CONTO, c);
pagsca.put(PAGSCA_SOTTOCONTO, s);
pagsca.put(PAGSCA_ANNO, anno);
pagsca.put(PAGSCA_NUMPART, npart);
pagsca.put(PAGSCA_NRIGA, nriga);
if (nrata != 0)
pagsca.put(PAGSCA_NRATA, nrata);
TRectype pagamenti (pagsca.curr());
for (pagsca.read(_isgteq); !pagsca.eof(); pagsca.next())
{
TString rec = pagamenti.get(PAGSCA_NUMPART);
TString file = pagsca.get(PAGSCA_NUMPART);
if (pagsca.curr() != pagamenti || file != rec) break;
real abbuoni = pagsca.get_real(PAGSCA_ABBUONI);
real diffcam = pagsca.get_real(PAGSCA_DIFFCAM);
if (abbuoni != ZERO || diffcam != ZERO)
return FALSE;
}
return TRUE;
}
bool TVar_sc::elimina_partita(TMask_field& f, KEY k)
{
if (k == K_SPACE && f.mask().is_running())
if (!app().cancella_partita(f))
return FALSE;
return TRUE;
}
void TVar_sc::sgancia_pagamenti(char tipo,int g,int c,long s,int anno,TString& npart,int nriga,int nrata)
{
TIsamtempfile& pagsca = *_tpagsca;
pagsca.setkey(1);
pagsca.zero();
pagsca.put(PAGSCA_TIPOC, tipo);
pagsca.put(PAGSCA_GRUPPO, g);
pagsca.put(PAGSCA_CONTO, c);
pagsca.put(PAGSCA_SOTTOCONTO, s);
pagsca.put(PAGSCA_ANNO, anno);
pagsca.put(PAGSCA_NUMPART, npart);
pagsca.put(PAGSCA_NRIGA, nriga);
pagsca.put(PAGSCA_NRATA, nrata);
TRectype pagamenti (pagsca.curr());
for (pagsca.read(_isgteq); !pagsca.eof(); pagsca.next())
{
TString rec = pagamenti.get(PAGSCA_NUMPART);
TString file = pagsca.get(PAGSCA_NUMPART);
if (pagsca.curr() != pagamenti || file != rec) break;
TRectype pag (pagsca.curr());
pag.put(PAGSCA_NRIGA, 9999);
pag.put(PAGSCA_NRATA, 9999);
TRecnotype nrec = pagsca.recno();
pagsca.remove();
pagsca.curr() = pag;
if (pagsca.read() == NOERR)
{
real importo = pagsca.get_real(PAGSCA_IMPORTO) + pag.get_real(PAGSCA_IMPORTO);
real impval = pagsca.get_real(PAGSCA_IMPORTOVAL) + pag.get_real(PAGSCA_IMPORTOVAL);
real ritenute = pagsca.get_real(PAGSCA_RITENUTE) + pag.get_real(PAGSCA_RITENUTE);
real ritsoc = pagsca.get_real(PAGSCA_RITSOC) + pag.get_real(PAGSCA_RITSOC);
pagsca.put(PAGSCA_IMPORTO, importo);
pagsca.put(PAGSCA_IMPORTOVAL, impval);
pagsca.put(PAGSCA_RITENUTE, ritenute);
pagsca.put(PAGSCA_RITSOC, ritsoc);
pagsca.put(PAGSCA_ACCSAL, "A");
pagsca.rewrite();
}
else
{
pagsca.curr() = pag;
pagsca.write();
}
pagsca.readat(nrec);
}
}
bool TVar_sc::elimina_scadenza(TMask_field& f, KEY k)
{
if (k == K_SPACE && f.mask().is_running())
if (!app().cancella_scadenza(f))
return FALSE;
return TRUE;
}
bool TVar_sc::cancella_scadenza(TMask_field& f)
{
TIsamtempfile& scad = *_tscad;
char tipo = f.mask().get (101)[0];
int gruppo = f.mask().get_int (102);
int conto = f.mask().get_int (103);
long sottoc = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString numpart = f.mask().get (107);
int nriga = f.mask().get_int (108);
int nrata = f.mask().get_int (109);
if (!controlla_abbuoni_diffcam(tipo,gruppo,conto,sottoc,anno,numpart,nriga,nrata))
return f.message_box(TR("Impossibile eliminare questa scadenza in quanto esistono uno o piu' pagamenti riferiti ad essa contenenti abbuoni o differenze cambio"));
scad.setkey(1);
scad.zero();
scad.put(SCAD_TIPOCF, tipo);
scad.put(SCAD_GRUPPO, gruppo);
scad.put(SCAD_CONTO, conto);
scad.put(SCAD_SOTTOCONTO, sottoc);
scad.put(SCAD_ANNO, anno);
scad.put(SCAD_NUMPART, numpart);
scad.put(SCAD_NRIGA, nriga);
scad.put(SCAD_NRATA, nrata);
if (scad.read() == NOERR)
{
scad.remove();
sgancia_pagamenti(tipo,gruppo,conto,sottoc,anno,numpart,nriga,nrata);
}
else
return f.warning_box(TR("Non esiste la scadenza richiesta sull'archivio delle scadenze"));
return TRUE;
}
bool TVar_sc::elimina_pagamenti(TMask_field& f, KEY k)
{
if (k == K_SPACE && f.mask().is_running())
if (!app().cancella_pagamenti(f))
return FALSE;
return TRUE;
}
bool TVar_sc::cancella_pagamenti(TMask_field& f)
{
TIsamtempfile& pagsca = *_tpagsca;
char tipo = f.mask().get (101)[0];
int gruppo = f.mask().get_int (102);
int conto = f.mask().get_int (103);
long sottoc = f.mask().get_long(104);
int anno = f.mask().get_int (106);
TString numpart = f.mask().get (107);
int nriga = f.mask().get_int (108);
int nrata = f.mask().get_int (109);
int nrigp = f.mask().get_int (110);
pagsca.setkey(1);
pagsca.zero();
pagsca.put(PAGSCA_TIPOC, tipo);
pagsca.put(PAGSCA_GRUPPO, gruppo);
pagsca.put(PAGSCA_CONTO, conto);
pagsca.put(PAGSCA_SOTTOCONTO, sottoc);
pagsca.put(PAGSCA_ANNO, anno);
pagsca.put(PAGSCA_NUMPART, numpart);
pagsca.put(PAGSCA_NRIGA, nriga);
pagsca.put(PAGSCA_NRATA, nrata);
pagsca.put(PAGSCA_NRIGP, nrigp);
if (pagsca.read() == NOERR)
{
pagsca.remove();
}
else
return f.warning_box(TR("Non esiste il pagamento richiesto sull'archivio dei pagamenti"));
return TRUE;
}
void TVar_sc::registra_partita(TMask& m)
{
TSheet_field& part = (TSheet_field&)m.field(F_RIGAPART);
for (int i = 0 ; i < part.items(); i++)
{
TToken_string& row = part.row(i);
char tipo = row.get (0)[0];
int gruppo = row.get_int (1);
int conto = row.get_int (2);
long sottoc = row.get_long(3);
int anno = row.get_int (5);
TString numpart = row.get (6);
int nriga = row.get_int (7);
TDate datadoc (row.get (8));
TString numdoc = row.get (9);
TString codcaus = row.get (10);
long nreg = row.get_long(12);
int nrig = row.get_int (13);
TDate datareg (row.get (14));
int gruppocl = row.get_int (15);
int contocl = row.get_int (16);
int tipomov = row.get_int (18);
TString descr = row.get (19);
char sez = row.get (20)[0];
TDate datapag (row.get (21));
int tipopag = row.get_int (22);
TString codval (row.get (23));
TDate datacam (row.get (24));
real cambio (row.get (25));
_tpart->setkey(1);
_tpart->zero();
_tpart->put(PART_TIPOCF, tipo);
_tpart->put(PART_GRUPPO, gruppo);
_tpart->put(PART_CONTO, conto);
_tpart->put(PART_SOTTOCONTO, sottoc);
_tpart->put(PART_ANNO, anno);
_tpart->put(PART_NUMPART, numpart);
_tpart->put(PART_NRIGA, nriga);
if (_tpart->read() == NOERR)
{
_tpart->put(PART_TIPOCF, tipo);
_tpart->put(PART_GRUPPO, gruppo);
_tpart->put(PART_CONTO, conto);
_tpart->put(PART_SOTTOCONTO, sottoc);
_tpart->put(PART_ANNO, anno);
_tpart->put(PART_NUMPART, numpart);
_tpart->put(PART_NRIGA, nriga);
_tpart->put(PART_DATADOC, datadoc);
_tpart->put(PART_NUMDOC, numdoc);
_tpart->put(PART_CODCAUS, codcaus);
_tpart->put(PART_NREG, nreg);
_tpart->put(PART_NUMRIG, nrig);
_tpart->put(PART_DATAREG, datareg);
_tpart->put(PART_GRUPPOCL, gruppocl);
_tpart->put(PART_CONTOCL, contocl);
_tpart->put(PART_TIPOMOV, tipomov);
_tpart->put(PART_DESCR, descr);
_tpart->put(PART_SEZ, sez);
_tpart->put(PART_DATAPAG, datapag);
_tpart->put(PART_TIPOPAG, tipopag);
_tpart->put(PART_CODVAL, codval);
_tpart->put(PART_DATACAM, datacam);
_tpart->put(PART_CAMBIO, cambio);
_tpart->rewrite();
}
else
{
_tpart->put(PART_TIPOCF, tipo);
_tpart->put(PART_GRUPPO, gruppo);
_tpart->put(PART_CONTO, conto);
_tpart->put(PART_SOTTOCONTO, sottoc);
_tpart->put(PART_ANNO, anno);
_tpart->put(PART_NUMPART, numpart);
_tpart->put(PART_NRIGA, nriga);
_tpart->put(PART_DATADOC, datadoc);
_tpart->put(PART_NUMDOC, numdoc);
_tpart->put(PART_CODCAUS, codcaus);
_tpart->put(PART_NREG, nreg);
_tpart->put(PART_NUMRIG, nrig);
_tpart->put(PART_DATAREG, datareg);
_tpart->put(PART_GRUPPOCL, gruppocl);
_tpart->put(PART_CONTOCL, contocl);
_tpart->put(PART_TIPOMOV, tipomov);
_tpart->put(PART_DESCR, descr);
_tpart->put(PART_SEZ, sez);
_tpart->put(PART_DATAPAG, datapag);
_tpart->put(PART_TIPOPAG, tipopag);
_tpart->put(PART_CODVAL, codval);
_tpart->put(PART_DATACAM, datacam);
_tpart->put(PART_CAMBIO, cambio);
_tpart->write();
}
}
}
void TVar_sc::registra_scadenze(TMask& m)
{
TSheet_field& scad = (TSheet_field&)m.field(F_RIGASCAD);
for (int i = 0 ; i < scad.items(); i++)
{
TToken_string& row = scad.row(i);
char tipo = row.get (0)[0];
int gruppo = row.get_int (1);
int conto = row.get_int (2);
long sottoc = row.get_long(3);
int anno = row.get_int (5);
TString numpart = row.get (6);
int nriga = row.get_int (7);
int nrata = row.get_int (8);
TDate datascad (row.get (9));
TString codpag = row.get (10);
int tipopag = row.get_int (11);
TString ultclass = row.get (12);
real importo (row.get (15));
real impval (row.get (16));
TString descr = row.get (17);
long nsabi = row.get_long(19);
long nscab = row.get_long(19);
long vsabi = row.get_long(20);
long vscab = row.get_long(21);
TString codag = row.get (22);
TDate datasoll (row.get (23));
int nsoll = row.get_int (24);
_tscad->setkey(1);
_tscad->zero();
_tscad->put(SCAD_TIPOCF, tipo);
_tscad->put(SCAD_GRUPPO, gruppo);
_tscad->put(SCAD_CONTO, conto);
_tscad->put(SCAD_SOTTOCONTO, sottoc);
_tscad->put(SCAD_ANNO, anno);
_tscad->put(SCAD_NUMPART, numpart);
_tscad->put(SCAD_NRIGA, nriga);
_tscad->put(SCAD_NRATA, nrata);
if (_tscad->read() == NOERR)
{
_tscad->put(SCAD_TIPOCF, tipo);
_tscad->put(SCAD_GRUPPO, gruppo);
_tscad->put(SCAD_CONTO, conto);
_tscad->put(SCAD_SOTTOCONTO, sottoc);
_tscad->put(SCAD_ANNO, anno);
_tscad->put(SCAD_NUMPART, numpart);
_tscad->put(SCAD_NRIGA, nriga);
_tscad->put(SCAD_NRATA, nrata);
_tscad->put(SCAD_DATASCAD, datascad);
_tscad->put(SCAD_CODPAG, codpag);
_tscad->put(SCAD_TIPOPAG, tipopag);
_tscad->put(SCAD_ULTCLASS, ultclass);
_tscad->put(SCAD_IMPORTO, importo);
_tscad->put(SCAD_IMPORTOVAL, impval);
_tscad->put(SCAD_DESCR, descr);
_tscad->put(SCAD_CODABIPR, nsabi);
_tscad->put(SCAD_CODCABPR, nscab);
_tscad->put(SCAD_CODABI, vsabi);
_tscad->put(SCAD_CODCAB, vscab);
_tscad->put(SCAD_CODAG, codag);
_tscad->put(SCAD_DATASOLL, datasoll);
_tscad->put(SCAD_NSOLL, nsoll);
_tscad->rewrite();
}
else
{
_tscad->put(SCAD_TIPOCF, tipo);
_tscad->put(SCAD_GRUPPO, gruppo);
_tscad->put(SCAD_CONTO, conto);
_tscad->put(SCAD_SOTTOCONTO, sottoc);
_tscad->put(SCAD_ANNO, anno);
_tscad->put(SCAD_NUMPART, numpart);
_tscad->put(SCAD_NRIGA, nriga);
_tscad->put(SCAD_NRATA, nrata);
_tscad->put(SCAD_DATASCAD, datascad);
_tscad->put(SCAD_CODPAG, codpag);
_tscad->put(SCAD_TIPOPAG, tipopag);
_tscad->put(SCAD_ULTCLASS, ultclass);
_tscad->put(SCAD_IMPORTO, importo);
_tscad->put(SCAD_IMPORTOVAL, impval);
_tscad->put(SCAD_DESCR, descr);
_tscad->put(SCAD_CODABIPR, nsabi);
_tscad->put(SCAD_CODCABPR, nscab);
_tscad->put(SCAD_CODABI, vsabi);
_tscad->put(SCAD_CODCAB, vscab);
_tscad->put(SCAD_CODAG, codag);
_tscad->put(SCAD_DATASOLL, datasoll);
_tscad->put(SCAD_NSOLL, nsoll);
_tscad->write();
}
}
}
void TVar_sc::registra_pagamenti(TMask& m)
{
TString passat;
TSheet_field& pag = (TSheet_field&)m.field(F_RIGAPAGSCA);
for (int i = 0 ; i < pag.items(); i++)
{
TToken_string& row = pag.row(i);
char tipo = row.get (0)[0];
int gruppo = row.get_int (1);
int conto = row.get_int (2);
long sottoc = row.get_long(3);
int anno = row.get_int (5);
TString numpart = row.get (6);
int nriga = row.get_int (7);
int nrata = row.get_int (8);
int nrigp = row.get_int (9);
TString accsal = row.get (10);
real importo (row.get (12));
real ritenute (row.get (14));
real abbuoni (row.get (16));
real diffcam (row.get (18));
real impval (row.get (19));
char tipoc = row.get (20)[0];
int gruppoc = row.get_int(21);
int contoc = row.get_int(22);
long sottocc = row.get_long(23);
long nsabi = row.get_long(25);
long nscab = row.get_long(26);
long vsabi = row.get_long(27);
long vscab = row.get_long(28);
TString codag = row.get (29);
real ritsoc (row.get (31));
TString codval = "";
char sez = sezione(tipo,gruppo,conto,sottoc,anno,numpart,nriga,codval,*_mask);
char sezab = row.get(15)[0];
if (sezab != sez)
abbuoni = abbuoni * -1;
if (sezab == 'A')
passat = "P";
else
if (sezab == 'D')
passat = "A";
char sezdc = row.get(17)[0];
if (sezdc != sez)
diffcam = diffcam * -1;
_tpagsca->setkey(1);
_tpagsca->zero();
_tpagsca->put(PAGSCA_TIPOC, tipo);
_tpagsca->put(PAGSCA_GRUPPO, gruppo);
_tpagsca->put(PAGSCA_CONTO, conto);
_tpagsca->put(PAGSCA_SOTTOCONTO, sottoc);
_tpagsca->put(PAGSCA_ANNO, anno);
_tpagsca->put(PAGSCA_NUMPART, numpart);
_tpagsca->put(PAGSCA_NRIGA, nriga);
_tpagsca->put(PAGSCA_NRATA, nrata);
_tpagsca->put(PAGSCA_NRIGP, nrigp);
if (_tpagsca->read() == NOERR)
{
_tpagsca->put(PAGSCA_TIPOC, tipo);
_tpagsca->put(PAGSCA_GRUPPO, gruppo);
_tpagsca->put(PAGSCA_CONTO, conto);
_tpagsca->put(PAGSCA_SOTTOCONTO, sottoc);
_tpagsca->put(PAGSCA_ANNO, anno);
_tpagsca->put(PAGSCA_NUMPART, numpart);
_tpagsca->put(PAGSCA_NRIGA, nriga);
_tpagsca->put(PAGSCA_NRATA, nrata);
_tpagsca->put(PAGSCA_NRIGP, nrigp);
_tpagsca->put(PAGSCA_ACCSAL, accsal);
_tpagsca->put(PAGSCA_IMPORTO, importo);
_tpagsca->put(PAGSCA_RITENUTE, ritenute);
_tpagsca->put(PAGSCA_RITSOC, ritsoc);
_tpagsca->put(PAGSCA_ABBUONI, abbuoni);
_tpagsca->put(PAGSCA_DIFFCAM, diffcam);
_tpagsca->put(PAGSCA_IMPORTOVAL, impval);
_tpagsca->put(PAGSCA_TIPOCC, tipoc);
_tpagsca->put(PAGSCA_GRUPPOC, gruppoc);
_tpagsca->put(PAGSCA_CONTOC, contoc);
_tpagsca->put(PAGSCA_SOTTOCONTC, sottocc);
_tpagsca->put(PAGSCA_CODABIPR, nsabi);
_tpagsca->put(PAGSCA_CODCABPR, nscab);
_tpagsca->put(PAGSCA_CODABI, vsabi);
_tpagsca->put(PAGSCA_CODCAB, vscab);
_tpagsca->put(PAGSCA_CODAG, codag);
_tpagsca->put(PAGSCA_PASSATT, passat);
_tpagsca->rewrite();
}
else
{
_tpagsca->put(PAGSCA_TIPOC, tipo);
_tpagsca->put(PAGSCA_GRUPPO, gruppo);
_tpagsca->put(PAGSCA_CONTO, conto);
_tpagsca->put(PAGSCA_SOTTOCONTO, sottoc);
_tpagsca->put(PAGSCA_ANNO, anno);
_tpagsca->put(PAGSCA_NUMPART, numpart);
_tpagsca->put(PAGSCA_NRIGA, nriga);
_tpagsca->put(PAGSCA_NRATA, nrata);
_tpagsca->put(PAGSCA_NRIGP, nrigp);
_tpagsca->put(PAGSCA_ACCSAL, accsal);
_tpagsca->put(PAGSCA_IMPORTO, importo);
_tpagsca->put(PAGSCA_RITENUTE, ritenute);
_tpagsca->put(PAGSCA_RITSOC, ritsoc);
_tpagsca->put(PAGSCA_ABBUONI, abbuoni);
_tpagsca->put(PAGSCA_DIFFCAM, diffcam);
_tpagsca->put(PAGSCA_IMPORTOVAL, impval);
_tpagsca->put(PAGSCA_TIPOCC, tipoc);
_tpagsca->put(PAGSCA_GRUPPOC, gruppoc);
_tpagsca->put(PAGSCA_CONTOC, contoc);
_tpagsca->put(PAGSCA_SOTTOCONTC, sottocc);
_tpagsca->put(PAGSCA_CODABIPR, nsabi);
_tpagsca->put(PAGSCA_CODCABPR, nscab);
_tpagsca->put(PAGSCA_CODABI, vsabi);
_tpagsca->put(PAGSCA_CODCAB, vscab);
_tpagsca->put(PAGSCA_CODAG, codag);
_tpagsca->put(PAGSCA_PASSATT, passat);
_tpagsca->write();
}
}
}
bool TVar_sc::leggi_trasfer()
{
_trasf = _tras_file.path(_dittaric);
_trasf << HEADER;
_tras_file.open(_trasf);
if (_tras_file.exist())
{
if (_tras_file.read_control_rec())
_control_rec = _tras_file.record();
else
return error_box(TR("Rilevati gravi errori negli archivi:procedura interrotta"));
}
else
return error_box(TR("Al momento non presenti trasferimenti attivi sulla ditta selezionata"));
return TRUE;
}
bool TVar_sc::esegui_controlli()
{
TConfig conf(CONFIG_DITTA);
_std = conf.get("FlStTra");
if (!prefix().exist(_dittaric))
return error_box(TR("Gli archivi della ditta %05ld non esistono."), _dittaric);
if (!leggi_trasfer())
return FALSE;
if (!controlli())
return FALSE;
return TRUE;
}
void TVar_sc::setta_parametri_record(const TString& sigla,const TString& flag)
{
TConfig conf (CONFIG_DITTA);
conf.set("FlStTra", flag);
leggi_record_controllo();
_control_rec.overwrite(sigla,240);
const int size = 1024;
_tras_file.write_control_rec(_control_rec, size);
}
bool TVar_sc::controlli()
{
TString16 chiave,sigla;
chiave = _control_rec.sub(241,256);
chiave.trim();
sigla = _control_rec.sub(240,241);
sigla.trim();
if (_std == "M" && sigla == "Z" && chiave != "")
return error_box(TR("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"));
if (_std == "M" && sigla == "U")
return error_box(TR("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"));
if (_std == "M" && sigla == "B")
return error_box(TR("Variazione NON POSSIBILE: trasferimento movimenti saldaconto gia' iniziato"));
if (_std == "*")
{
warning_box(TR("Trasferimento interamente completato: proseguire per cancellare il file"));
_tras_file.remove_all();
setta_parametri_record(" "," ");
return FALSE;
}
if (_std == "T")
return error_box(TR("Variazione NON POSSIBILE: eseguire prima la ricezione delle tabelle"));
const bool is_sc = _control_rec.sub(86,95).find('B') >= 0;
if (!is_sc)
return error_box(TR("Variazione NON POSSIBILE: non esistono movimenti saldaconto."));
return TRUE;
}
bool TVar_sc::menu(MENU_TAG m)
{
if (m == BAR_ITEM_ID(1))
return main_loop();
return FALSE;
}