Files correlati : nessuno Ricompilazione Demo : [ ] Commento : Riportata la versione aga 07.150 sul main trunk git-svn-id: svn://10.65.10.50/trunk@9871 c028cbd2-c16b-5b4b-a496-9718f37d4682
219 lines
5.7 KiB
C++
Executable File
219 lines
5.7 KiB
C++
Executable File
#include <applicat.h>
|
|
#include <automask.h>
|
|
#include <progind.h>
|
|
#include <relation.h>
|
|
#include <viswin.h>
|
|
|
|
#include "ceeur.h"
|
|
#include "ceeur20.h"
|
|
|
|
#include "ammce.h"
|
|
#include "cespi.h"
|
|
#include "salce.h"
|
|
|
|
class TEuro02_app : public TEuro_app
|
|
{
|
|
protected:
|
|
virtual void main_loop();
|
|
|
|
public:
|
|
real valore_ammortizzabile(const TRelation& rel, int tipo_sit) const;
|
|
real fondo(const TRelation& rel, int tipo_sit) const;
|
|
real confronta_valori(const real& val_lit, const real& val_eur) const;
|
|
void print_arr(int tipo_sit) const;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Maschera di selezione
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TEuro02_mask : public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
public:
|
|
TEuro02_mask() : TAutomask("ceeur20") { }
|
|
};
|
|
|
|
bool TEuro02_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_DITTA:
|
|
if (e == fe_close)
|
|
{
|
|
const long ditta = atol(o.get());
|
|
main_app().set_firm(ditta);
|
|
}
|
|
break;
|
|
default: break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Applicazione principale
|
|
///////////////////////////////////////////////////////////
|
|
|
|
real TEuro02_app::confronta_valori(const real& val_lit, const real& val_eur) const
|
|
{
|
|
real expected_val_eur = val_lit / EURO; expected_val_eur.round(2);
|
|
real error = expected_val_eur - val_eur;
|
|
return error;
|
|
}
|
|
|
|
real TEuro02_app::valore_ammortizzabile(const TRelation& rel, int tipo_sit) const
|
|
{
|
|
const TRectype& salpro = rel.curr();
|
|
real val = salpro.get_real(SALCE_CSTO) - salpro.get_real(SALCE_PLUSREIN) +
|
|
salpro.get_real(SALCE_RIV75) + salpro.get_real(SALCE_RIV83);
|
|
|
|
if (tipo_sit == 1)
|
|
{
|
|
val -= salpro.get_real(SALCE_VNONAMM);
|
|
val += salpro.get_real(SALCE_RIVGF);
|
|
}
|
|
if (tipo_sit == 2)
|
|
{
|
|
val += salpro.get_real(SALCE_RIVGC);
|
|
}
|
|
|
|
const real riv90 = salpro.get(SALCE_RIV90);
|
|
const real riv91 = salpro.get(SALCE_RIV91);
|
|
if (riv90 != ZERO || riv91 != ZERO)
|
|
{
|
|
const int annipost90 = salpro.get_int(SALCE_ANNIPOST90);
|
|
if (riv91 != ZERO || annipost90 >= 3)
|
|
val += riv90;
|
|
}
|
|
val += riv91;
|
|
|
|
return val;
|
|
}
|
|
|
|
real TEuro02_app::fondo(const TRelation& rel, int tipo_sit) const
|
|
{
|
|
const TString16 idcesp = rel.curr().get(SALCE_IDCESPITE);
|
|
const TRectype& ammpro = rel.curr(LF_AMMCE);
|
|
|
|
real fondo; // Fondo ammortamento
|
|
if (ammpro.get(AMMCE_IDCESPITE) == idcesp)
|
|
{
|
|
if (ammpro.get_int(AMMCE_TPAMM) == tipo_sit)
|
|
{
|
|
fondo += ammpro.get_real(AMMCE_QNORP);
|
|
fondo += ammpro.get_real(AMMCE_QANTP);
|
|
fondo += ammpro.get_real(AMMCE_QACCP);
|
|
fondo += ammpro.get_real(AMMCE_QPERSEP);
|
|
fondo += ammpro.get_real(AMMCE_QPPRIVATEP);
|
|
fondo += ammpro.get_real(AMMCE_FPRIVATOP);
|
|
|
|
fondo += ammpro.get_real(AMMCE_QNOR);
|
|
fondo += ammpro.get_real(AMMCE_QANT);
|
|
fondo += ammpro.get_real(AMMCE_QACC);
|
|
fondo += ammpro.get_real(AMMCE_QPERSE);
|
|
fondo += ammpro.get_real(AMMCE_QPPRIVATE);
|
|
fondo += ammpro.get_real(AMMCE_FPRIVATO);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
fondo = ZERO;
|
|
}
|
|
return fondo;
|
|
}
|
|
|
|
void TEuro02_app::print_arr(int tipo_sit) const
|
|
{
|
|
TViswin vw(NULL, "Controllo arrotondamenti", FALSE, TRUE, FALSE, 0, 0, 0, 0, FALSE);
|
|
vw.maximize();
|
|
vw.open_modal();
|
|
|
|
TString expr;
|
|
expr << "CODES==CODES|IDCESPITE==IDCESPITE|TPSALDO==2|TPAMM==" << tipo_sit;
|
|
|
|
TRelation rel_lit(LF_SALCE);
|
|
rel_lit.add(LF_AMMCE, expr);
|
|
|
|
TEuroisamfile* salce_eur = new TEuroisamfile(LF_SALCE, TRUE);
|
|
TEuroisamfile* ammce_eur = new TEuroisamfile(LF_AMMCE, TRUE);
|
|
|
|
TRelation rel_eur(salce_eur);
|
|
rel_eur.add(LF_AMMCE, expr);
|
|
rel_eur.replacef(ammce_eur, LF_AMMCE, expr);
|
|
rel_eur.add(LF_CESPI, "IDCESPITE==IDCESPITE");
|
|
|
|
TCursor cur_eur(&rel_eur, "(CODES==2001)&&(TPSALDO==2)");
|
|
const long items = cur_eur.items();
|
|
cur_eur.freeze();
|
|
|
|
const TRectype& salce = cur_eur.curr();
|
|
const TRectype& cespi = cur_eur.curr(LF_CESPI);
|
|
|
|
for (cur_eur = 0L; cur_eur.pos() < items; ++cur_eur)
|
|
{
|
|
rel_lit.curr() = cur_eur.curr();
|
|
if (rel_lit.read() == NOERR)
|
|
{
|
|
const TString16 idcespite = salce.get(SALCE_IDCESPITE);
|
|
|
|
const real val_amm_lit = valore_ammortizzabile(rel_lit, tipo_sit);
|
|
const real val_amm_eur = valore_ammortizzabile(rel_eur, tipo_sit);
|
|
|
|
const real fondo_lit = fondo(rel_lit, tipo_sit);
|
|
const real fondo_eur = fondo(rel_eur, tipo_sit);
|
|
|
|
const real residuo_lit = val_amm_lit - fondo_lit;
|
|
const real residuo_eur = val_amm_eur - fondo_eur;
|
|
|
|
const real err = confronta_valori(residuo_lit, residuo_eur);
|
|
if (err <= -0.01 || err >= 0.01)
|
|
{
|
|
TString str;
|
|
str << "Cespite " << idcespite << " - " << cespi.get(CESPI_DESC);
|
|
str << " - Situazione ";
|
|
switch (tipo_sit)
|
|
{
|
|
case 2: str << "Civilistica"; break;
|
|
case 3: str << "Gestionale"; break;
|
|
default: str << "Fiscale"; break;
|
|
}
|
|
vw.add_line(str); str.cut(0);
|
|
|
|
str << "Residuo in Lire " << residuo_lit.string(".");
|
|
str << " - Residuo in Euro " << residuo_eur.string(".2");
|
|
vw.add_line(str); str.cut(0);
|
|
|
|
str << "Errore di arrotondamento in Euro " << err.string(".2");
|
|
vw.add_line(str); str.cut(0);
|
|
|
|
vw.add_line(str);
|
|
}
|
|
}
|
|
}
|
|
|
|
vw.close_print();
|
|
vw.run();
|
|
vw.close_modal();
|
|
}
|
|
|
|
void TEuro02_app::main_loop()
|
|
{
|
|
goto_lire();
|
|
TEuro02_mask m;
|
|
while (m.run() == K_ENTER)
|
|
{
|
|
const int tipo_sit = m.get_int(F_TIPO);
|
|
print_arr(tipo_sit);
|
|
}
|
|
}
|
|
|
|
int ceeur02(int argc, char* argv[])
|
|
{
|
|
TEuro02_app aa;
|
|
aa.run(argc, argv, "Controllo arrotondamenti");
|
|
|
|
return 0;
|
|
}
|