campo-sirio/ri/ri0400.cpp
alex db8f5ac09a Patch level : 10,0 nopatch
Files correlati     : ri0.exe
Ricompilazione Demo : [ ]
Commento            :


Riclassificazioni


git-svn-id: svn://10.65.10.50/branches/R_10_00@20794 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-08-24 18:03:42 +00:00

173 lines
3.5 KiB
C++
Executable File

#include "rilib01.h"
#include <automask.h>
#include <applicat.h>
#include <recset.h>
#include <reputils.h>
#include <utility.h>
#include "../cg/cglib02.h"
#include "ri0.h"
#include "ri0400a.h"
#include "rilib01.h"
///////////////////////////////////////////////////////////
// TRicl_mask
///////////////////////////////////////////////////////////
class TRicl_mask : public TAutomask
{
protected:
void update_date_to();
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TRicl_mask() : TAutomask("ri0400a") { }
virtual ~TRicl_mask() { }
};
void TRicl_mask::update_date_to()
{
const TString16 codper = get(F_PER);
const TDate dal = get_date(F_DAL);
if (dal.ok())
{
TEsercizi_contabili & es = esercizi();
es.update();
const TRectype & per = cache().get("&PER", codper);
TDate al = dal;
int nper = get_int(F_NPER);
if (nper == 0)
nper = 1;
al += per.get_int("I0") * nper;
al += per.get_int("I1") * 7 * nper;
al.addmonth(per.get_int("I2") * nper);
al.addyear(per.get_int("I3") * nper);
if (al > dal)
--al;
else
al = dal;
set(F_AL, al);
}
}
bool TRicl_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
const short id = o.dlg();
switch (id)
{
case F_PER:
case F_NPER:
if (e == fe_modify)
update_date_to();
break;
case F_ESER:
case F_DAL:
if (e == fe_modify)
{
TMask & m = o.mask();
const int eser = m.get_int(F_ESER);
const TDate dal = m.get_date(F_DAL);
if (dal.ok() && eser != 0)
{
TEsercizi_contabili & es = esercizi();
es.update();
const int anno = es.esercizio(eser).inizio().year();
if (anno != dal.year())
return o.error_box("La data di inizio deve appartenere all'esercizio specificato");
}
update_date_to();
}
else
if (e == fe_close)
{
TMask & m = o.mask();
if (m.get(F_ESER).empty() && (m.get(F_DAL).empty() || m.get(F_AL).empty()))
return o.error_box(TR("E' necessario specificare o il codice esercizio oppure\nle date limite"));
}
break;
default:
break;
}
return TRUE;
}
class TRicl_saldi : public TSkeleton_application
{
TRicl_mask *_mask;
public:
virtual void main_loop();
TRicl_saldi() {}
virtual ~TRicl_saldi() {}
};
void TRicl_saldi::main_loop()
{
TFilename output_file;
if (argc() == 2)
{
TRicl_mask mask;
while (mask.run() != K_QUIT)
{
output_file = mask.get(F_OUTPUT);
const TRecordsetExportFormat fmt = TString(output_file.ext()) == "txt" ? fmt_as400 : fmt_unknown;
if (mask.get(F_RICL).full())
{
TSaldi_ricl_recordset recset(mask);
recset.save_as(output_file, fmt);
}
else
{
TSaldi_conti_recordset recset(mask);
recset.save_as(output_file, fmt);
}
}
}
else
{
TConfig c(argv(2));
const TString16 codricl(c.get("CodRicl"));
const TString16 codper(c.get("CodPer"));
const int nper = c.get_int("NumeroPer");
const TDate dal(c.get("Dal"));
const bool provv = c.get_bool("Provvisori");
const bool all = c.get_bool("Struttura");
output_file = c.get("Output");
if (codricl.full())
{
TSaldi_ricl_recordset recset(codricl, codper, nper, dal, provv, all);
recset.save_as(output_file);
}
else
{
TSaldi_conti_recordset recset(codper, nper, dal, provv, all);
recset.save_as(output_file);
}
}
}
int ri0400 (int argc, char* argv[])
{
TRicl_saldi main_app;
main_app.run(argc, argv, TR("Riclassificazione saldi"));
return TRUE;
}