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;
|
||||
|
||||
static TPartita* _sort_game;
|
||||
static int ordina_pag(const void* pag1, const void* pag2);
|
||||
|
||||
public:
|
||||
TEC_row& row(int r) const { return (TEC_row&)operator[](r); }
|
||||
|
||||
@ -356,6 +359,8 @@ public:
|
||||
virtual ~TEC_array() {}
|
||||
};
|
||||
|
||||
TPartita* TEC_array::_sort_game = NULL;
|
||||
|
||||
// Calcola l'importo su di una riga di pagamento
|
||||
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;
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
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;
|
||||
|
||||
const int lastp = rata.last(); // Ultimo pagamento sulla rata corrente
|
||||
for (int p = rata.first(); p <= lastp; p = rata.succ(p)) // Qui bisogna andare in avanti!
|
||||
const int numpag = rata.rows(); // Numero totale di pagamenti sulla rata
|
||||
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 TRiga_partite& sum = game.riga(nrigp);
|
||||
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)
|
||||
riga_corrente_scaduto = nrigp;
|
||||
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;
|
||||
}
|
||||
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);
|
||||
return scaduto_rata.valore();
|
||||
}
|
||||
@ -478,7 +508,7 @@ void TEC_array::add_row(const TRiga_partite& row)
|
||||
const char sezione = row.get_char(PART_TIPOCF) == 'C' ? 'D' : 'A';
|
||||
|
||||
if (row.is_fattura())
|
||||
{
|
||||
{
|
||||
for (int r = 1; r <= row.rate(); r++)
|
||||
{
|
||||
const TRiga_scadenze& rata = row.rata(r);
|
||||
@ -821,11 +851,12 @@ void TEC_form::print_total(int riga, const THash_object& o)
|
||||
}
|
||||
|
||||
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();
|
||||
TForm_item& dare = foot.find_field(PEC_DARE);
|
||||
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)
|
||||
{
|
||||
@ -840,25 +871,15 @@ void TEC_form::print_total(int riga, const THash_object& o)
|
||||
modify_picture(dare,old_pictures,in_valuta);
|
||||
modify_picture(avere,old_pictures,in_valuta);
|
||||
|
||||
char sez = imp.sezione();
|
||||
real num = imp.valore();
|
||||
if (sez=='D' && num<0)
|
||||
if (imp.sezione() == 'D')
|
||||
{
|
||||
num = abs(num); sez = 'A';
|
||||
}
|
||||
if (sez=='A' && num<0)
|
||||
{
|
||||
num = abs(num); sez = 'D';
|
||||
}
|
||||
if (sez == 'D')
|
||||
{
|
||||
dare.set(num.string());
|
||||
dare.set(imp.valore().string());
|
||||
avere.set("");
|
||||
}
|
||||
else
|
||||
{
|
||||
dare.set("");
|
||||
avere.set(num.string());
|
||||
avere.set(imp.valore().string());
|
||||
}
|
||||
|
||||
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.print_on(body);
|
||||
pr.print(body.row(0));
|
||||
|
||||
// Salta una riga vuota
|
||||
TPrintrow vuota;
|
||||
pr.print(vuota);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
@ -1262,7 +1279,8 @@ int TStampaEC_application::print_ec()
|
||||
const bool stampa_chiuse = mask().get_bool(F_STAMPCHIU);
|
||||
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);
|
||||
err == NOERR && partite.curr() == filter;
|
||||
err = partite.read(_isgreat))
|
||||
@ -1294,7 +1312,13 @@ int TStampaEC_application::print_ec()
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
if (printed)
|
||||
one_printed = TRUE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user