56eb66a4a0
git-svn-id: svn://10.65.10.50/trunk@1488 c028cbd2-c16b-5b4b-a496-9718f37d4682
264 lines
5.6 KiB
C++
Executable File
264 lines
5.6 KiB
C++
Executable File
// Apertura nuovo esercizio
|
|
#include "cg4501.h"
|
|
#include "cg4500a.h"
|
|
|
|
class TAp_eser : public TApplication
|
|
{
|
|
TTable* _esc, * _reg;
|
|
int _anno, _newanno;
|
|
TDate _dataini, _datafin, _datainp, _datafip;
|
|
|
|
protected:
|
|
static bool mask_dataini (TMask_field&, KEY);
|
|
static bool mask_newanno (TMask_field&, KEY);
|
|
|
|
public:
|
|
virtual bool create();
|
|
virtual bool destroy();
|
|
virtual bool menu(MENU_TAG m);
|
|
|
|
bool set();
|
|
bool apertura_es();
|
|
|
|
TAp_eser() {}
|
|
};
|
|
|
|
TDate InizioEsercizio(int anno)
|
|
{
|
|
TTable TabEs ("ESC");
|
|
TString codtab;
|
|
TDate inizio_es;
|
|
|
|
TabEs.zero();
|
|
codtab.format ("%04d", anno);
|
|
TabEs.put ("CODTAB", codtab);
|
|
TabEs.read();
|
|
if (TabEs.good())
|
|
inizio_es= TabEs.get_date ("D0");
|
|
|
|
return inizio_es;
|
|
}
|
|
|
|
TDate FineEsercizio(int anno)
|
|
{
|
|
TTable TabEs ("ESC");
|
|
TString codtab;
|
|
TDate fine_es;
|
|
|
|
TabEs.zero();
|
|
codtab.format ("%04d", anno);
|
|
TabEs.put ("CODTAB", codtab);
|
|
TabEs.read();
|
|
if (TabEs.good())
|
|
fine_es= TabEs.get_date ("D1");
|
|
|
|
return fine_es;
|
|
}
|
|
|
|
bool TAp_eser::mask_newanno (TMask_field& f, KEY k)
|
|
{
|
|
TTable TabEs ("ESC");
|
|
TString codtab;
|
|
|
|
// if ( (k == K_TAB) && f.mask().is_running() )
|
|
if ( (k == K_ENTER) && f.to_check(k) )
|
|
{
|
|
int newanno = f.mask().get_int(F_NUOVOANNO);
|
|
int anno = f.mask().get_int(F_ANNO);
|
|
TabEs.zero();
|
|
codtab.format ("%04d", newanno);
|
|
TabEs.put ("CODTAB", codtab);
|
|
TabEs.read();
|
|
if ( TabEs.good() )
|
|
{
|
|
f.warning_box ("L'anno inserito e' gia' presente nella tabella degli esercizi!");
|
|
return FALSE;
|
|
}
|
|
|
|
if (newanno != anno + 1)
|
|
{
|
|
f.warning_box ("L'anno del nuovo esercizio deve essere successivo all'anno esercizio precedente");
|
|
return FALSE;
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TAp_eser::mask_dataini (TMask_field& f, KEY k)
|
|
{
|
|
if ( (k == K_ENTER) && f.to_check(k) )
|
|
{
|
|
TDate data(f.mask().get(F_DATAINI));
|
|
TDate fine(f.mask().get(F_DATAFINC));
|
|
/*
|
|
if ( data.year() != FineEsercizio(anno).year() + 1 )
|
|
{
|
|
warning_box ("L'anno del nuovo esercizio deve essere successivo a quello della fine dell'esercizio precedente");
|
|
return FALSE;
|
|
}
|
|
*/
|
|
if ( data <= fine )
|
|
{
|
|
f.warning_box ("La data di inizio del nuovo esercizio deve essere superiore alla data di fine esercizio precedente");
|
|
return FALSE;
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TAp_eser::create()
|
|
{
|
|
_esc = new TTable("ESC");
|
|
_reg = new TTable("REG");
|
|
|
|
enable_menu_item(M_FILE_NEW, FALSE);
|
|
|
|
dispatch_e_menu (BAR_ITEM(1));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TAp_eser::destroy()
|
|
{
|
|
delete _esc;
|
|
delete _reg;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TAp_eser::menu(MENU_TAG m)
|
|
{
|
|
TTable TabEs ("ESC");
|
|
TMask msk ("cg4500a");
|
|
|
|
if (TabEs.last() != NOERR)
|
|
return error_box("Non e' ancora stato aperto alcun esercizio!");
|
|
|
|
int anno = TabEs.get_int ("CODTAB");
|
|
TDate inizio = TabEs.get_date("D0"); //data inizio es. in corso
|
|
TDate fine = TabEs.get_date("D1"); //data fine es. in corso
|
|
|
|
msk.set(F_ANNO, anno);
|
|
msk.set(F_DATAINIC, inizio.string());
|
|
msk.set(F_DATAFINC, fine.string());
|
|
msk.set(F_NUOVOANNO, anno+1);
|
|
|
|
msk.set_handler (F_NUOVOANNO, mask_newanno);
|
|
msk.set_handler (F_DATAINI, mask_dataini);
|
|
|
|
if (msk.run() == K_ENTER)
|
|
{
|
|
_anno = msk.get_int(F_ANNO);
|
|
_datainp = msk.get(F_DATAINIC);
|
|
_datafip = msk.get(F_DATAFINC);
|
|
_newanno = msk.get_int(F_NUOVOANNO); //nuovo anno esercizio
|
|
_dataini = msk.get(F_DATAINI);
|
|
_datafin = msk.get(F_DATAFIN);
|
|
|
|
apertura_es();
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
bool TAp_eser::apertura_es()
|
|
{
|
|
TTable TabReg ("REG");
|
|
TTable TabEs ("ESC");
|
|
TString anno (4);
|
|
TString annonew(4);
|
|
TDate data;
|
|
bool ok = FALSE;
|
|
|
|
//viene aggiornata la tabella dei registri. Se esisteva gia' un record relativo al nuovo esercizio, viene cancellato.
|
|
//In ogni caso ne viene creato uno nuovo relativo al nuovo esercizio.
|
|
TabReg.zero();
|
|
annonew = format ("%04d", _newanno);
|
|
TabReg.put ("CODTAB", annonew);
|
|
|
|
TRectype r (TabReg.curr());
|
|
|
|
TabReg.read(_isgteq);
|
|
|
|
for (; !TabReg.eof(); TabReg.next())
|
|
{
|
|
if (TabReg.curr() != r) break;
|
|
|
|
int tiporeg = TabReg.get_int("I0");
|
|
if (tiporeg == 5)
|
|
TabReg.remove();
|
|
}
|
|
|
|
TabReg.zero();
|
|
TRectype nuovo (TabReg.curr());
|
|
anno = format ("%04d", _anno);
|
|
TabReg.put ("CODTAB", anno);
|
|
|
|
TRectype rec (TabReg.curr());
|
|
|
|
TabReg.read(_isgteq);
|
|
|
|
for (; !TabReg.eof(); TabReg.next())
|
|
{
|
|
if (TabReg.curr() != rec) break;
|
|
|
|
int tiporeg = TabReg.get_int("I0");
|
|
TString cod_reg = TabReg.get("CODTAB");
|
|
cod_reg = cod_reg.mid(4,3);
|
|
if (tiporeg == 5)
|
|
{
|
|
ok = TRUE;
|
|
nuovo = TabReg.curr();
|
|
TString16 cod;
|
|
cod << _newanno << cod_reg;
|
|
nuovo.put("CODTAB", cod);
|
|
nuovo.put("D2", data);
|
|
nuovo.put("D3", data);
|
|
nuovo.put("I6", 0L);
|
|
nuovo.put("R1", real(0.0));
|
|
nuovo.put("R2", real(0.0));
|
|
|
|
TabReg.write(nuovo);
|
|
}
|
|
}
|
|
/*
|
|
if (!ok)
|
|
{
|
|
error_box("Non esiste il registro libro giornale relativo all'es. precedente");
|
|
return FALSE;
|
|
}
|
|
*/
|
|
//viene aggiornata la tabella degli esercizi
|
|
TabEs.zero();
|
|
annonew = format ("%04d", _newanno);
|
|
TabEs.put ("CODTAB", annonew);
|
|
TabEs.put ("D0", _dataini);
|
|
TabEs.put ("D1", _datafin);
|
|
TabEs.write();
|
|
|
|
message_box("Apertura nuovo esercizio completata");
|
|
return TRUE;
|
|
}
|
|
|
|
int cg4500 (int argc, char* argv[])
|
|
{
|
|
switch (*argv[2])
|
|
{
|
|
case 'C':
|
|
{
|
|
TAp_eser a;
|
|
a.run(argc, argv, "Apertura nuovo esercizio");
|
|
}
|
|
break;
|
|
case 'I':
|
|
{
|
|
TAp_iva a;
|
|
a.run(argc, argv, "Apertura nuovo esercizio IVA");
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|