From 8206bb98e05bb469152e1c7c9423191d9ff8ba95 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 5 Mar 1996 17:35:35 +0000 Subject: [PATCH] Aggiunto calcolo scaduto al e altri metodi git-svn-id: svn://10.65.10.50/trunk@2667 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/saldacon.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++++++++ cg/saldacon.h | 7 +++- 2 files changed, 108 insertions(+), 2 deletions(-) diff --git a/cg/saldacon.cpp b/cg/saldacon.cpp index 0112edd1b..82a0b6d57 100755 --- a/cg/saldacon.cpp +++ b/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 { diff --git a/cg/saldacon.h b/cg/saldacon.h index 5eb3c4d35..0085296dc 100755 --- a/cg/saldacon.h +++ b/cg/saldacon.h @@ -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,