Corretta funzione che calcola lo scaduto
git-svn-id: svn://10.65.10.50/trunk@2555 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
188e1d0430
commit
41b63caf96
@ -349,6 +349,9 @@ protected:
|
|||||||
|
|
||||||
TImporto importo(const TPartita& game, const TRectype& pag, bool valuta) const;
|
TImporto importo(const TPartita& game, const TRectype& pag, bool valuta) const;
|
||||||
|
|
||||||
|
static TPartita* _sort_game;
|
||||||
|
static int ordina_pag(const void* pag1, const void* pag2);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TEC_row& row(int r) const { return (TEC_row&)operator[](r); }
|
TEC_row& row(int r) const { return (TEC_row&)operator[](r); }
|
||||||
|
|
||||||
@ -356,6 +359,8 @@ public:
|
|||||||
virtual ~TEC_array() {}
|
virtual ~TEC_array() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TPartita* TEC_array::_sort_game = NULL;
|
||||||
|
|
||||||
// Calcola l'importo su di una riga di pagamento
|
// Calcola l'importo su di una riga di pagamento
|
||||||
TImporto TEC_array::importo(const TPartita& game, const TRectype& pag, bool valuta) const
|
TImporto TEC_array::importo(const TPartita& game, const TRectype& pag, bool valuta) const
|
||||||
{
|
{
|
||||||
@ -401,6 +406,17 @@ TImporto& TEC_array::importo_riga_scaduto(int n)
|
|||||||
return *imp;
|
return *imp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ordina i pagamenti in ordine di DATAPAG
|
||||||
|
int TEC_array::ordina_pag(const void* pag1, const void* pag2)
|
||||||
|
{
|
||||||
|
const int r1 = (*(TRectype**)pag1)->get_int(PAGSCA_NRIGP);
|
||||||
|
const TDate d1 = _sort_game->riga(r1).get(PART_DATAPAG);
|
||||||
|
const int r2 = (*(TRectype**)pag2)->get_int(PAGSCA_NRIGP);
|
||||||
|
const TDate d2 = _sort_game->riga(r2).get(PART_DATAPAG);
|
||||||
|
const int diff = d1 == d2 ? 0 : (d1 > d2 ? +1 : -1);
|
||||||
|
return diff;
|
||||||
|
}
|
||||||
|
|
||||||
real TEC_array::calcola_scaduto(const TRiga_scadenze& rata, bool valuta)
|
real TEC_array::calcola_scaduto(const TRiga_scadenze& rata, bool valuta)
|
||||||
{
|
{
|
||||||
const TPartita& game = rata.partita();
|
const TPartita& game = rata.partita();
|
||||||
@ -410,10 +426,21 @@ real TEC_array::calcola_scaduto(const TRiga_scadenze& rata, bool valuta)
|
|||||||
|
|
||||||
int riga_corrente_scaduto = 0;
|
int riga_corrente_scaduto = 0;
|
||||||
|
|
||||||
const int lastp = rata.last(); // Ultimo pagamento sulla rata corrente
|
const int numpag = rata.rows(); // Numero totale di pagamenti sulla rata
|
||||||
for (int p = rata.first(); p <= lastp; p = rata.succ(p)) // Qui bisogna andare in avanti!
|
TRectype** arrpag = NULL; // Array di puntatori ai pagamenti
|
||||||
|
if (numpag > 0)
|
||||||
{
|
{
|
||||||
const TRectype& pag = rata.row(p);
|
arrpag = new TRectype*[numpag];
|
||||||
|
int i = 0;
|
||||||
|
for (int p = rata.last(); p > 0; p = rata.pred(p))
|
||||||
|
arrpag[i++] = (TRectype*)&rata.row(p); // Copia puntatori ai pagamenti nell'array
|
||||||
|
_sort_game = (TPartita*)&game; // Inizializza partita di appoggio al sort
|
||||||
|
qsort(arrpag, numpag, sizeof(TRectype*), ordina_pag);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < numpag; i++)
|
||||||
|
{
|
||||||
|
const TRectype& pag = *arrpag[i];
|
||||||
const int nrigp = pag.get_int(PAGSCA_NRIGP);
|
const int nrigp = pag.get_int(PAGSCA_NRIGP);
|
||||||
const TRiga_partite& sum = game.riga(nrigp);
|
const TRiga_partite& sum = game.riga(nrigp);
|
||||||
TImporto imp = importo(game, pag, valuta);
|
TImporto imp = importo(game, pag, valuta);
|
||||||
@ -450,7 +477,7 @@ real TEC_array::calcola_scaduto(const TRiga_scadenze& rata, bool valuta)
|
|||||||
if (tm == tm_insoluto)
|
if (tm == tm_insoluto)
|
||||||
riga_corrente_scaduto = nrigp;
|
riga_corrente_scaduto = nrigp;
|
||||||
else
|
else
|
||||||
CHECKD(riga_corrente_scaduto > 0, "Pagamento insoluto senza insoluto ", p);
|
CHECKD(riga_corrente_scaduto > 0, "Pagamento insoluto senza insoluto ", nrigp);
|
||||||
importo_riga_scaduto(riga_corrente_scaduto) += imp;
|
importo_riga_scaduto(riga_corrente_scaduto) += imp;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -459,6 +486,9 @@ real TEC_array::calcola_scaduto(const TRiga_scadenze& rata, bool valuta)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (arrpag != NULL)
|
||||||
|
delete arrpag;
|
||||||
|
|
||||||
scaduto_rata.normalize(sezione);
|
scaduto_rata.normalize(sezione);
|
||||||
return scaduto_rata.valore();
|
return scaduto_rata.valore();
|
||||||
}
|
}
|
||||||
@ -821,11 +851,12 @@ void TEC_form::print_total(int riga, const THash_object& o)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const TTotal& t = (const TTotal&)o.obj();
|
const TTotal& t = (const TTotal&)o.obj();
|
||||||
const TImporto& imp = t.importo();
|
TImporto imp = t.importo(); imp.normalize();
|
||||||
|
|
||||||
const bool in_valuta = o.key().not_empty();
|
const bool in_valuta = o.key().not_empty();
|
||||||
TForm_item& dare = foot.find_field(PEC_DARE);
|
TForm_item& dare = foot.find_field(PEC_DARE);
|
||||||
TForm_item& avere = foot.find_field(PEC_AVERE);
|
TForm_item& avere = foot.find_field(PEC_AVERE);
|
||||||
TString_array old_pictures;//pictures da rippristinare dopo aver stampato
|
TString_array old_pictures;//pictures da ripristinare dopo aver stampato
|
||||||
|
|
||||||
if (dare.x() <= 0 || avere.x() <= 0)
|
if (dare.x() <= 0 || avere.x() <= 0)
|
||||||
{
|
{
|
||||||
@ -840,25 +871,15 @@ void TEC_form::print_total(int riga, const THash_object& o)
|
|||||||
modify_picture(dare,old_pictures,in_valuta);
|
modify_picture(dare,old_pictures,in_valuta);
|
||||||
modify_picture(avere,old_pictures,in_valuta);
|
modify_picture(avere,old_pictures,in_valuta);
|
||||||
|
|
||||||
char sez = imp.sezione();
|
if (imp.sezione() == 'D')
|
||||||
real num = imp.valore();
|
|
||||||
if (sez=='D' && num<0)
|
|
||||||
{
|
{
|
||||||
num = abs(num); sez = 'A';
|
dare.set(imp.valore().string());
|
||||||
}
|
|
||||||
if (sez=='A' && num<0)
|
|
||||||
{
|
|
||||||
num = abs(num); sez = 'D';
|
|
||||||
}
|
|
||||||
if (sez == 'D')
|
|
||||||
{
|
|
||||||
dare.set(num.string());
|
|
||||||
avere.set("");
|
avere.set("");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dare.set("");
|
dare.set("");
|
||||||
avere.set(num.string());
|
avere.set(imp.valore().string());
|
||||||
}
|
}
|
||||||
|
|
||||||
TForm_item& scaduto = foot.find_field(PEC_SCADUTO);
|
TForm_item& scaduto = foot.find_field(PEC_SCADUTO);
|
||||||
@ -1022,10 +1043,6 @@ bool TEC_form::print_game(const TPartita& game)
|
|||||||
sld.importo_lire(implire);
|
sld.importo_lire(implire);
|
||||||
sld.print_on(body);
|
sld.print_on(body);
|
||||||
pr.print(body.row(0));
|
pr.print(body.row(0));
|
||||||
|
|
||||||
// Salta una riga vuota
|
|
||||||
TPrintrow vuota;
|
|
||||||
pr.print(vuota);
|
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
@ -1262,7 +1279,8 @@ int TStampaEC_application::print_ec()
|
|||||||
const bool stampa_chiuse = mask().get_bool(F_STAMPCHIU);
|
const bool stampa_chiuse = mask().get_bool(F_STAMPCHIU);
|
||||||
const TDate data_chiuse = mask().get(F_DATACHIU);
|
const TDate data_chiuse = mask().get(F_DATACHIU);
|
||||||
|
|
||||||
bool one_printed = FALSE;
|
bool one_printed = FALSE; // Non ho stampato ancora nulla
|
||||||
|
|
||||||
for (int err = partite.read(_isgteq);
|
for (int err = partite.read(_isgteq);
|
||||||
err == NOERR && partite.curr() == filter;
|
err == NOERR && partite.curr() == filter;
|
||||||
err = partite.read(_isgreat))
|
err = partite.read(_isgreat))
|
||||||
@ -1295,6 +1313,12 @@ int TStampaEC_application::print_ec()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (one_printed)
|
||||||
|
{
|
||||||
|
TPrintrow empty; // Salta una riga vuota
|
||||||
|
printer().print(empty); // (Non farlo alla fine di ogni partita!)
|
||||||
|
}
|
||||||
|
|
||||||
const bool printed = form().print_game(game);
|
const bool printed = form().print_game(game);
|
||||||
if (printed)
|
if (printed)
|
||||||
one_printed = TRUE;
|
one_printed = TRUE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user