diff --git a/src/cg/cgsaldac.cpp b/src/cg/cgsaldac.cpp index c1c6e2639..149e8007c 100755 --- a/src/cg/cgsaldac.cpp +++ b/src/cg/cgsaldac.cpp @@ -363,7 +363,7 @@ TImporto TPartita::importo_pagsca(const TRectype& pag, bool val, int mode) const } // Calcola il totale dei pagamenti alla data (eventualmente in valuta) -TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate& al, int mode) const +TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate& al, int mode, bool datareg) const { CHECKD(mode > 0x0 && mode <= 0xFF, "Bad importo_pagato mode ", mode); TPartita& game = partita(); @@ -380,7 +380,7 @@ TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate& al, int mode) { const TRiga_partite & sum = game.riga(rigap); // Riga partite - datapag = sum.get_date(PART_DATAPAG); + datapag = datareg ? sum.get_date(PART_DATAREG) : sum.get_date(PART_DATAPAG); if (datapag <= al) totale += game.importo_pagsca(pag, val, mode); } @@ -556,6 +556,14 @@ TImporto TRiga_scadenze::importo_pagato(bool val, int mode) const return totale.normalize(); } +TImporto TRiga_scadenze::residuo_al(bool val, const TDate& al, int mode, bool datareg) const +{ + TImporto res = importo(val); + + res -= importo_pagato_al(val, al, mode, datareg); + return res; +} + // Calcola l'importo da pagare (eventualmente in valuta) TImporto TRiga_scadenze::importo(bool val) const { @@ -2475,7 +2483,6 @@ real TPartita::calcola_scaduto_al(bool valuta, const TDate& al) const } return ZERO; } - // Calcola il totale dei pagamenti non assegnati (eventualmente in valuta) TImporto TPartita::importo_pagato_unassigned(bool val, int mode) const { @@ -2522,6 +2529,55 @@ TImporto TPartita::importo_pagato_unassigned(bool val, int mode) const return totale.normalize(); } +TImporto TPartita::importo_pagato_unassigned_al(bool val, const TDate& al, int mode, bool datareg) 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(); + TDate datapag = datareg ? sum.get_date(PART_DATAREG) : sum.get_date(PART_DATAPAG); + + if (datapag <= al) + { + 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)); + totale += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC)); + } + + 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 + const TExchange cmb(sum); + TCurrency cur(abb, cmb); + cur.change_to_firm_val(); + abb = cur.get_num(); + } + 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/src/cg/cgsaldac.h b/src/cg/cgsaldac.h index 4f2bf9372..15a7888e2 100755 --- a/src/cg/cgsaldac.h +++ b/src/cg/cgsaldac.h @@ -146,7 +146,8 @@ public: TRiga_partite& riga() const { return *_riga; } // Riga partite TImporto importo_pagato(bool val, int mode = 0xF) const; - TImporto importo_pagato_al(bool val, const TDate& al, int mode = 0xF) const; + TImporto importo_pagato_al(bool val, const TDate& al, int mode = 0xF, bool datareg = false) const; + TImporto residuo_al(bool val, const TDate& al, int mode = 0xF, bool datareg = false) const; TImporto importo(bool val) const; TImporto residuo(bool val, int mode = 0xF) const; // Differenza delle due funzioni precedenti TImporto esposto_al(bool valuta, const TDate & al, const TDate & data_scad, const TDate & data_rischio, bool & sbf) const; @@ -316,6 +317,7 @@ public: TImporto calcola_saldo_al(bool valuta, const TDate& al, const TDate& data_scaduto, const TDate& data_rischio) const; real calcola_scaduto_al(bool valuta, const TDate& al = botime) const; TImporto importo_pagato_unassigned(bool val, int mode = 0xF) const; + TImporto importo_pagato_unassigned_al (bool val, const TDate& al, int mode = 0xF, bool datareg = false) const; TImporto importo_pagsca(const TRectype& pag, bool val = false, int mode = 0xF) const; // low level bool modifica_pagamento(const TRectype& new_pag, const TValuta& valuta,