1995-03-24 11:46:05 +00:00
|
|
|
#include "cglib04.h"
|
|
|
|
#include "cg2802.h"
|
|
|
|
|
|
|
|
HIDDEN int date2esc(const TDate& d, int* prevesc)
|
|
|
|
{
|
|
|
|
if (prevesc) *prevesc = 0;
|
|
|
|
TTable esc("ESC");
|
|
|
|
for (int err = esc.first(); err == NOERR; err = esc.next())
|
|
|
|
{
|
|
|
|
const TDate ia(esc.get("D0")); // Data inizio esercizio
|
|
|
|
const TDate fa(esc.get("D1")); // Data fine esercizio
|
|
|
|
const anno = esc.get_int("CODTAB");
|
|
|
|
if (d >= ia && d <= fa)
|
|
|
|
return anno;
|
|
|
|
if (prevesc) *prevesc = anno;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::create()
|
|
|
|
{
|
|
|
|
TApplication::create();
|
|
|
|
|
|
|
|
_pcon = new TLocalisamfile (LF_PCON);
|
|
|
|
_clifo = new TLocalisamfile (LF_CLIFO);
|
1995-05-31 16:00:32 +00:00
|
|
|
_mov = new TLocalisamfile (LF_MOV);
|
1995-03-24 11:46:05 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
_tmov = new TIsamtempfile(LF_MOV, tmpmov, 0);
|
|
|
|
_trmov = new TIsamtempfile(LF_RMOV, tmprmov, 0);
|
|
|
|
_tiva = new TIsamtempfile(LF_RMOVIVA, tmprmoviva, 0);
|
|
|
|
|
|
|
|
_rec_mov = new TRectype (LF_MOV);
|
|
|
|
|
|
|
|
dispatch_e_menu (BAR_ITEM(1));
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::destroy()
|
|
|
|
{
|
|
|
|
delete _pcon;
|
|
|
|
delete _clifo;
|
1995-05-31 16:00:32 +00:00
|
|
|
delete _mov;
|
1995-03-24 11:46:05 +00:00
|
|
|
|
|
|
|
delete _tmov;
|
|
|
|
delete _trmov;
|
|
|
|
delete _tiva;
|
|
|
|
|
|
|
|
delete _rec_mov;
|
|
|
|
|
|
|
|
return TApplication::destroy();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::set()
|
|
|
|
{
|
|
|
|
_dittaric = get_firm();
|
|
|
|
|
|
|
|
if (!esegui_controlli()) return FALSE;
|
|
|
|
|
|
|
|
if (!video())
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::video()
|
|
|
|
{
|
|
|
|
TMask msk ("cg2802a");
|
|
|
|
KEY tasto;
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
tasto = msk.run();
|
|
|
|
|
|
|
|
if (tasto != K_ENTER) return FALSE;
|
|
|
|
|
|
|
|
if (esiste_testata_mov(msk))
|
|
|
|
{
|
|
|
|
TMask mask ("cg2802b");
|
|
|
|
|
|
|
|
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_SAVE :
|
|
|
|
{
|
|
|
|
annulla(mask);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
while (tasto != K_QUIT); //K_ENTER
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::esiste_testata_mov(TMask& m)
|
|
|
|
{
|
|
|
|
long nrec;
|
|
|
|
|
|
|
|
_numreg = m.get_long(F_NUMREG);
|
|
|
|
|
|
|
|
_tmov->setkey(1);
|
|
|
|
_tmov->zero();
|
|
|
|
_tmov->put(MOV_NUMREG, _numreg);
|
|
|
|
|
|
|
|
if (_tmov->read() == NOERR)
|
|
|
|
{
|
|
|
|
nrec = _tmov->get_long(MOV_NUMGIO);
|
|
|
|
nrec += _tras_file.start('Z');
|
|
|
|
|
|
|
|
_tras_file.read_rec_trasfer(nrec);
|
|
|
|
_record = _tras_file.read_rec();
|
|
|
|
|
|
|
|
char annullato = _record.sub(248,249)[0];
|
|
|
|
|
|
|
|
if (annullato == 'A')
|
|
|
|
return error_box("Registrazione presente ma gia' ANNULLATA in precedenza");
|
|
|
|
|
|
|
|
*_rec_mov = _tmov->curr();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return error_box("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);
|
|
|
|
|
|
|
|
long numreg = m.get_long(F_NUMREG);
|
|
|
|
|
|
|
|
_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;
|
|
|
|
|
|
|
|
long numrec = _trmov->get_int(RMV_ANNOES);
|
|
|
|
numrec += _tras_file.start('Z');
|
|
|
|
|
|
|
|
_tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota
|
|
|
|
|
|
|
|
_tras_file.put("A","Z1",51,numrec);
|
|
|
|
|
|
|
|
_tras_file.write(numrec);
|
|
|
|
}
|
|
|
|
|
|
|
|
delete rec_rmov;
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
long numrec = _tiva->get_int(RMI_ANNOES);
|
|
|
|
numrec += _tras_file.start('U');
|
|
|
|
|
|
|
|
_tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota
|
|
|
|
|
|
|
|
_tras_file.put("A","U1",51,numrec);
|
|
|
|
|
|
|
|
_tras_file.write(numrec);
|
|
|
|
}
|
|
|
|
|
|
|
|
delete rec_riva;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::leggi_trasfer()
|
|
|
|
{
|
|
|
|
_trasf = _tras_file.path(_dittaric);
|
|
|
|
_trasf << "\\trasfer";
|
|
|
|
|
|
|
|
_tras_file.open(_trasf);
|
|
|
|
|
|
|
|
if (_tras_file.exist())
|
|
|
|
{
|
|
|
|
if (_tras_file.read_control_rec())
|
|
|
|
_control_rec = _tras_file.record();
|
|
|
|
else
|
|
|
|
return error_box("Rilevati gravi errori negli archivi:procedura interrotta");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return error_box("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();
|
|
|
|
char cr = codreg[0];
|
|
|
|
TDate datareg (f.mask().get(F_DATAREG));
|
|
|
|
int anno = date2esc(datareg);
|
|
|
|
|
|
|
|
if (isdigit(cr))
|
|
|
|
dep.format("%04d%03c", anno, cr);
|
|
|
|
else
|
|
|
|
dep.format("%04d%-3c", anno, cr);
|
|
|
|
|
|
|
|
reg.zero();
|
|
|
|
reg.put("CODTAB", dep);
|
|
|
|
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");
|
|
|
|
|
1995-03-24 16:49:18 +00:00
|
|
|
if (!prefix().exist(_dittaric))
|
1995-03-24 11:46:05 +00:00
|
|
|
return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta");
|
|
|
|
|
|
|
|
if (!leggi_trasfer())
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if (!controlli())
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::controlli()
|
|
|
|
{
|
|
|
|
if (_std == "M")
|
|
|
|
return error_box("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato");
|
|
|
|
|
|
|
|
if (_std == "*")
|
|
|
|
{
|
|
|
|
warning_box("Trasferimento interamente completato: proseguire per cancellare il file");
|
|
|
|
fremove(_trasf);
|
|
|
|
setta_parametri_record(""," ",FALSE);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
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,bool uselab)
|
|
|
|
{
|
|
|
|
TConfig conf (CONFIG_DITTA);
|
|
|
|
|
|
|
|
conf.set("FlStTra", flag);
|
|
|
|
|
|
|
|
if (uselab)
|
|
|
|
{
|
|
|
|
leggi_record_controllo();
|
|
|
|
_control_rec.overwrite(sigla,240);
|
|
|
|
|
|
|
|
const int size = 256;
|
|
|
|
|
|
|
|
_tras_file.write_control_rec(_control_rec, size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TAnn_mov::menu(MENU_TAG m)
|
|
|
|
{
|
|
|
|
if (m == BAR_ITEM(1))
|
|
|
|
return set();
|
|
|
|
return FALSE;
|
|
|
|
}
|