campo-sirio/cg/cg6802.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

586 lines
14 KiB
C++
Executable File

#include "cglib04.h"
#include "cg6802.h"
bool TAnn_mov::create()
{
TApplication::create();
_pcon = new TLocalisamfile (LF_PCON);
_clifo = new TLocalisamfile (LF_CLIFO);
_mov = new TLocalisamfile (LF_MOV);
_rmov = new TLocalisamfile (LF_RMOV);
_rmoviva = new TLocalisamfile (LF_RMOVIVA);
_part = new TLocalisamfile (LF_PARTITE);
_scad = new TLocalisamfile (LF_SCADENZE);
_pagsca = new TLocalisamfile (LF_PAGSCA);
_rec_mov = new TRectype (LF_MOV);
_registra = FALSE;
dispatch_e_menu (BAR_ITEM_ID(1));
return TRUE;
}
bool TAnn_mov::destroy()
{
delete _pcon;
delete _clifo;
delete _mov;
delete _rmov;
delete _rmoviva;
delete _part;
delete _scad;
delete _pagsca;
delete _rec_mov;
return TApplication::destroy();
}
void TAnn_mov::apri_temp_file()
{
TString80 tmpmov = "%";
tmpmov << get_firm_dir();
tmpmov << "\\" << TEMP_MOV;
TString80 tmprmov = "%";
tmprmov << get_firm_dir();
tmprmov << "\\" << TEMP_RMOV;
TString80 tmprmoviva = "%";
tmprmoviva << get_firm_dir();
tmprmoviva << "\\" << TEMP_RMOVIVA;
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;
_tmov = new TIsamtempfile(LF_MOV, tmpmov, 0);
_trmov = new TIsamtempfile(LF_RMOV, tmprmov, 0);
_is_iva = FALSE;
TString tmp = tmprmoviva.mid(1);
tmp << ".dbf";
if (fexist(tmp))
{
_tiva = new TIsamtempfile(LF_RMOVIVA, tmprmoviva, 0);
_is_iva = TRUE;
}
_is_salda = FALSE;
tmp = tmppart.mid(1);
tmp << ".dbf";
if (fexist(tmp))
{
_tpart = new TIsamtempfile(LF_PARTITE, tmppart, 0);
_tscad = new TIsamtempfile(LF_SCADENZE, tmpscad, 0);
_tpagsca = new TIsamtempfile(LF_PAGSCA, tmppagsca, 0);
_is_salda = TRUE;
}
}
void TAnn_mov::chiudi_tempfile()
{
delete _tmov;
delete _trmov;
if (_is_iva)
delete _tiva;
if (_is_salda)
{
delete _tpart;
delete _tscad;
delete _tpagsca;
}
}
bool TAnn_mov::set()
{
_dittaric = get_firm();
if (!esegui_controlli()) return FALSE;
apri_temp_file();
if (!video())
{
if (_registra)
setta_parametri_record(" ","C");
}
chiudi_tempfile();
return FALSE;
}
bool TAnn_mov::video()
{
TMask* msk = new TMask("cg6802a");
KEY tasto;
do
{
tasto = msk->run();
if (tasto != K_ENTER)
{
delete msk;
return FALSE;
}
if (esiste_testata_mov(*msk))
{
TMask* mask = new TMask("cg6802b");
mask->set_handler(F_REGIVA, codice_registro_hnd);
mask->set_handler(F_CODCAUS, codice_causale_hnd);
setta_campi_maschera(*mask);
tasto = mask->run();
switch (tasto)
{
case K_ESC :
break;
case K_QUIT :
break;
case K_DEL :
{
annulla(*mask);
_registra = TRUE;
}
break;
default:
break;
}
delete mask;
}
}
while (tasto != K_QUIT); //K_ENTER
delete msk;
return TRUE;
}
bool TAnn_mov::esiste_testata_mov(TMask& m)
{
_numreg = m.get_long(F_NUMREG);
_tmov->setkey(1);
_tmov->zero();
_tmov->put(MOV_NUMREG, _numreg);
if (_tmov->read() == NOERR)
*_rec_mov = _tmov->curr();
else
return error_box(TR("Registrazione richiesta NON PRESENTE tra i movimenti in trasferimento"));
return TRUE;
}
void TAnn_mov::setta_campi_maschera(TMask& m)
{
TDate datareg (_rec_mov->get_date(MOV_DATAREG));
TDate datadoc (_rec_mov->get_date(MOV_DATADOC));
TString numdoc = _rec_mov->get (MOV_NUMDOC);
TString regiva = _rec_mov->get (MOV_REG);
// regiva.trim();
long protiva = _rec_mov->get_long(MOV_PROTIVA);
TString codcaus = _rec_mov->get (MOV_CODCAUS);
m.set(F_NUMREG, _numreg);
m.set(F_DATAREG, datareg.string());
m.set(F_DATADOC, datadoc.string());
m.set(F_NUMDOC, numdoc);
m.set(F_REGIVA, regiva);
m.set(F_PROTIVA, protiva);
m.set(F_CODCAUS, codcaus);
m.disable(F_NUMREG);
m.disable(F_DATAREG);
m.disable(F_DATADOC);
m.disable(F_NUMDOC);
m.disable(F_REGIVA);
m.disable(F_PROTIVA);
m.disable(F_CODCAUS);
}
void TAnn_mov::annulla(TMask& m)
{
TRectype* rec_rmov,* rec_riva;
rec_rmov = new TRectype (LF_RMOV);
// Cancello la testata del movimento
long numreg = m.get_long(F_NUMREG);
_tmov->setkey(1);
_tmov->zero();
_tmov->put(MOV_NUMREG, numreg);
if (_tmov->read() == NOERR)
_tmov->remove();
// Cancello tutte le righe di Primanota
_trmov->setkey(1);
_trmov->zero();
_trmov->put(RMV_NUMREG, numreg);
*rec_rmov = _trmov->curr();
for (_trmov->read(); !_trmov->eof(); _trmov->next())
{
if (_trmov->curr() > *rec_rmov) break;
_trmov->remove();
}
delete rec_rmov;
// Cancello tutte le righe iva
rec_riva = new TRectype (LF_RMOVIVA);
_tiva->setkey(1);
_tiva->zero();
_tiva->put(RMI_NUMREG, numreg);
*rec_riva = _tiva->curr();
for (_tiva->read(); !_tiva->eof(); _tiva->next())
{
if (_tiva->curr() > *rec_riva) break;
_tiva->remove();
}
delete rec_riva;
if (_is_salda)
{
TRectype* rec_part;
rec_part = new TRectype (LF_PARTITE);
_tpart->setkey(2);
_tpart->zero();
_tpart->put(PART_NREG, numreg);
*rec_part = _tpart->curr();
for (_tpart->read(_isgteq); !_tpart->eof(); _tpart->next())
{
if (_tpart->curr() != *rec_part) break;
int tipomov = _tpart->get_int (PART_TIPOMOV);
char tipocf = _tpart->get_char(PART_TIPOCF);
int gruppo = _tpart->get_int (PART_GRUPPO);
int conto = _tpart->get_int (PART_CONTO);
long codcf = _tpart->get_long(PART_SOTTOCONTO);
int anno = _tpart->get_int (PART_ANNO);
TString numpart = _tpart->get (PART_NUMPART);
int nriga = _tpart->get_int (PART_NRIGA);
if (!controlla_abbuoni_diffcam(tipocf,gruppo,conto,codcf,anno,numpart,nriga,0))
continue;
if (tipomov == 1)
{
_tscad->zero();
_tscad->put(SCAD_TIPOCF, tipocf);
if (gruppo != 0)
_tscad->put(SCAD_GRUPPO, gruppo);
if (conto != 0)
_tscad->put(SCAD_CONTO, conto);
if (codcf != 0)
_tscad->put(SCAD_SOTTOCONTO, codcf);
_tscad->put(SCAD_ANNO, anno);
_tscad->put(SCAD_NUMPART, numpart);
_tscad->put(SCAD_NRIGA, nriga);
TRectype scad (_tscad->curr());
for (_tscad->read(_isgteq); !_tscad->eof(); _tscad->next())
{
TString rec = scad.get(SCAD_NUMPART);
TString file = _tscad->get(SCAD_NUMPART);
if (_tscad->curr() != scad || file != rec) break;
int nrata = _tscad->get_int (SCAD_NRATA);
sgancia_pagamenti(tipocf,gruppo,conto,codcf,anno,numpart,nriga,nrata);
_tscad->remove();
}
}
if (tipomov != 1)
{
_tpagsca->zero();
_tpagsca->put(PAGSCA_TIPOC, tipocf);
if (gruppo != 0)
_tpagsca->put(PAGSCA_GRUPPO, gruppo);
if (conto != 0)
_tpagsca->put(PAGSCA_CONTO, conto);
if (codcf != 0)
_tpagsca->put(PAGSCA_SOTTOCONTO, codcf);
_tpagsca->put(PAGSCA_ANNO, anno);
_tpagsca->put(PAGSCA_NUMPART, numpart);
TRectype pagsca (_tpagsca->curr());
for (_tpagsca->read(_isgteq); !_tpagsca->eof(); _tpagsca->next())
{
int nrigp = _tpagsca->get_int(PAGSCA_NRIGP);
TString rec = pagsca.get(PAGSCA_NUMPART);
TString file = _tpagsca->get(PAGSCA_NUMPART);
if (_tpagsca->curr() != pagsca || file != rec) break;
if (nriga != nrigp) continue;
_tpagsca->remove();
}
}
_tpart->remove();
}
delete rec_part;
}
}
bool TAnn_mov::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;
}
void TAnn_mov::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 TAnn_mov::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 TAnn_mov::codice_registro_hnd(TMask_field& f, KEY k)
{
TTable reg ("REG");
TString descr,dep;
if (k == K_TAB)
{
TString codreg = f.get();
TDate datareg (f.mask().get(F_DATAREG));
int anno = date2esc(datareg);
reg.zero();
reg.put("CODTAB", codreg);
if (reg.read() == NOERR)
{
descr = reg.get("S0");
f.mask().set(F_DESCRREG, descr);
}
}
return TRUE;
}
bool TAnn_mov::codice_causale_hnd(TMask_field& f, KEY k)
{
TLocalisamfile cau (LF_CAUSALI);
TString descr;
if (k == K_TAB)
{
TString codcau = f.get();
cau.setkey(1);
cau.zero();
cau.put("CODCAUS", codcau);
if (cau.read() == NOERR)
{
descr = cau.get("DESCR");
f.mask().set(F_DESCRCAU, descr);
}
}
return TRUE;
}
bool TAnn_mov::esegui_controlli()
{
TConfig conf(CONFIG_DITTA);
_std = conf.get("FlStTra");
if (!prefix().exist(_dittaric))
return error_box(TR("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"));
if (!leggi_trasfer())
return FALSE;
if (!controlli())
return FALSE;
return TRUE;
}
bool TAnn_mov::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 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"));
return TRUE;
}
void TAnn_mov::leggi_record_controllo()
{
_tras_file.read_control_rec();
_control_rec = _tras_file.record();
}
void TAnn_mov::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 TAnn_mov::menu(MENU_TAG m)
{
if (m == BAR_ITEM_ID(1))
return set();
return FALSE;
}