Aggiunto calcolo scaduto al e altri metodi
git-svn-id: svn://10.65.10.50/trunk@2667 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
badcb05a70
commit
8206bb98e0
103
cg/saldacon.cpp
103
cg/saldacon.cpp
@ -1198,6 +1198,13 @@ bool TPartita::esistono_abbuoni_diffcam(long nreg) const
|
||||
return nrata > 0;
|
||||
}
|
||||
|
||||
bool TPartita::in_valuta() const
|
||||
{
|
||||
const int ultima = last();
|
||||
|
||||
return ultima > 0 ? riga(ultima).in_valuta() : FALSE;
|
||||
}
|
||||
|
||||
TRectype& TPartita::pagamento(int nriga, int nrata, int nrigp)
|
||||
{
|
||||
if (nriga == UNASSIGNED)
|
||||
@ -1428,6 +1435,102 @@ TImporto TPartita::calcola_saldo_al(bool valuta,const TDate& al, const TDate& da
|
||||
}
|
||||
|
||||
|
||||
real TPartita::calcola_scaduto_al(bool valuta,const TDate& al) const
|
||||
{
|
||||
const int ultima = last();
|
||||
if (ultima > 0)
|
||||
{
|
||||
TImporto scaduto;
|
||||
const TBill & c = conto();
|
||||
char sezione = ' ';
|
||||
|
||||
if (c.tipo() == 'C') sezione = 'D';
|
||||
else
|
||||
if (c.tipo() == 'F') sezione = 'A';
|
||||
else
|
||||
{
|
||||
const TRiga_partite& row = riga(ultima);
|
||||
const tipo_movimento t = row.tipo();
|
||||
if (t == tm_fattura || t == tm_insoluto)
|
||||
sezione = row.sezione();
|
||||
else
|
||||
sezione = row.sezione() == 'D' ? 'A' : 'D';
|
||||
}
|
||||
|
||||
for (int r = ultima; r > 0; r = pred(r))
|
||||
{
|
||||
const TRiga_partite& row = riga(r);
|
||||
if (row.is_fattura())
|
||||
{
|
||||
for (int s = row.rate(); s > 0 ;s--)
|
||||
{
|
||||
const TRiga_scadenze & rata = row.rata(s);
|
||||
const TDate data(rata.get(SCAD_DATASCAD));
|
||||
|
||||
if (data <= al)
|
||||
{
|
||||
scaduto += rata.importo(valuta);
|
||||
scaduto += rata.importo_pagato(valuta);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scaduto.normalize(sezione);
|
||||
if (scaduto.valore() > 0)
|
||||
scaduto += importo_pagato_unassigned(valuta);
|
||||
scaduto.normalize(sezione);
|
||||
if (scaduto.valore() > 0)
|
||||
return scaduto.valore();
|
||||
else
|
||||
return ZERO;
|
||||
}
|
||||
else
|
||||
return ZERO;
|
||||
}
|
||||
|
||||
// Calcola il totale dei pagamenti non assegnati (eventualmente in valuta)
|
||||
TImporto TPartita::importo_pagato_unassigned(bool val, int mode) const
|
||||
{
|
||||
CHECKD(mode > 0x0 && mode <= 0xF, "Bad importo_pagato mode ", mode);
|
||||
const bool in_val = in_valuta();
|
||||
const char* imp_field = (val && in_val) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
|
||||
|
||||
TImporto totale;
|
||||
const int last_row = _unassigned.last_row();
|
||||
for (int p = _unassigned.first_row(); p <= last_row; p = _unassigned.succ_row(p))
|
||||
{
|
||||
const TRectype& pag = _unassigned.row(p); // Riga pagamento
|
||||
const TRiga_partite& sum = riga(pag.get_int(PAGSCA_NRIGP)); // Riga partite
|
||||
const char sez = sum.sezione();
|
||||
const int tipo = sum.get_int(PART_TIPOPAG);
|
||||
|
||||
if (mode & 0x1)
|
||||
totale += TImporto(sez, pag.get_real(imp_field));
|
||||
if (!in_val && (mode & 0x8)) // Le ritenute non esistono nei pagamenti in valuta
|
||||
totale += TImporto(sez, pag.get_real(PAGSCA_RITENUTE));
|
||||
|
||||
if (mode & 0x2) // Voglio anche gli abbuoni
|
||||
{
|
||||
real abb(pag.get_real(PAGSCA_ABBUONI));
|
||||
if (in_val && !val) // Gli abbuoni sono sempre in valuta e quindi
|
||||
{ // devono essere convertiti opportunamente
|
||||
abb *= sum.get_real(PART_CAMBIO);
|
||||
abb.round();
|
||||
}
|
||||
totale += TImporto(sez, abb);
|
||||
}
|
||||
|
||||
if (in_val && !val && (mode & 0x4)) // Voglio anche le differenze cambio
|
||||
{ // Esse esistono solo nei pagamenti in valuta
|
||||
const TImporto diffcam(sez, pag.get_real(PAGSCA_DIFFCAM));
|
||||
totale += diffcam;
|
||||
}
|
||||
}
|
||||
|
||||
return totale.normalize();
|
||||
}
|
||||
|
||||
|
||||
// Controlla se esistono pagamenti riferiti alla riga nrigp
|
||||
bool TPartita::utilizzata(int nrigp) const
|
||||
{
|
||||
|
@ -254,7 +254,8 @@ public:
|
||||
TRectype& pagamento(int nriga, int nrata, int nrigp);
|
||||
bool rata_chiusa(int nriga, int nrata) const;
|
||||
bool esiste(int nriga, int nrata = 0, int nrigp = 0) const;
|
||||
bool esistono_abbuoni_diffcam(long nreg = 0) const;
|
||||
bool esistono_abbuoni_diffcam(long nreg = 0) const;
|
||||
bool in_valuta() const ;
|
||||
|
||||
// assegna riga e figli ad altra partita
|
||||
void sposta_riga(int from_row, TPartita& part, int to_row);
|
||||
@ -296,7 +297,9 @@ public:
|
||||
void calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) const;
|
||||
TImporto calcola_saldo(bool valuta) const;
|
||||
TImporto calcola_saldo_al(bool valuta, const TDate& al, const TDate& data_rischio = botime) const;
|
||||
|
||||
real calcola_scaduto_al(bool valuta, const TDate& al = botime) const;
|
||||
TImporto importo_pagato_unassigned(bool val, int mode = 0xF) const;
|
||||
|
||||
bool modifica_pagamento(const TRectype& new_pag, const TValuta& valuta,
|
||||
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
||||
char& new_ap, TImporto& new_abb, TImporto& new_diffcam,
|
||||
|
Loading…
x
Reference in New Issue
Block a user