diff --git a/m770/770100.cpp b/m770/770100.cpp index ef8f80a41..88cd4a2b2 100755 --- a/m770/770100.cpp +++ b/m770/770100.cpp @@ -404,19 +404,60 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) } bool found = false; - for (int i = 0; !found &&i < rows; i++) - { - const TRectype & pagrec = sc.pag(i); - found = num == pagrec.get_long(PAG_NUMREG); - } - if (!found) - { imppag += TImporto(sez, pag.get_real(PAGSCA_RITENUTE)); imppag += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC)); real abbuoni = pag.get_real(PAGSCA_ABBUONI); real abb = pag.get_real(PAGSCA_ABBUONI); if (!abb.is_zero()) imppag += TImporto(sez, abb); + for (int i = 0; !found &&i < rows; i++) + { + TRectype & pagrec = sc.pag(i); + const long numsch = pagrec.get_long(PAG_NUMREG); + found = num == numsch; + if (numsch == 0L && !found) + { + TDate data(sum.get_date(PART_DATADOC)); + if (!data.ok()) + data = sum.get_date(PART_DATAREG); + if (!data.ok()) + data = sum.get_date(PART_DATAPAG); + const TDate datasch(pagrec.get(PAG_DATAPAG)); + if (data == datasch) + { + pagrec.put(PAG_NUMREG, num); + found = true; + } + else + { + imppag.normalize('D'); + + real spesep = imppag.valore() * spperc; + real ivap = imppag.valore() * ivaperc; + + spesep.round(TCurrency::get_firm_dec()); + if (abs(spesep) > abs(spese)) + spesep = spese; + ivap.round(TCurrency::get_firm_dec()); + if (abs(ivap) > abs(iva)) + ivap = iva; + + real compensop = imppag.valore() - spesep - ivap; + + compensop += compensop * h_PercRitenuta; + compensop.round(TCurrency::get_firm_dec()); + if (abs(compensop) > abs(compenso)) + compensop = compenso; + if (compensop == pagrec.get_real(PAG_COMPENSO)) + { + pagrec.put(PAG_NUMREG, num); + found = true; + } + } + } + } + if (!found) + { tot[lastsch] += imppag; if (!datapag.ok()) datapag = sum.get_date(PART_DATADOC); @@ -456,8 +497,6 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) compensopag.round(TCurrency::get_firm_dec()); if (abs(compensopag) > abs(compenso)) compensopag = compenso; - compensopag += pagrec.get_real(PAG_COMPENSO); - spesepag += pagrec.get_real(PAG_SPESA); pagrec.put(PAG_COMPENSO, compensopag); pagrec.put(PAG_SPESA, spesepag); pagrec.put(PAG_DATAPAG, datapag);