diff --git a/m770/770100.cpp b/m770/770100.cpp index 498793ea7..ef8f80a41 100755 --- a/m770/770100.cpp +++ b/m770/770100.cpp @@ -361,25 +361,6 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) const real h_PercCommitInps = cau.get_real("R3"); - const int rows = sc.pag_items(); - int rowpag = -1; - - for (int i = 0; rowpag < 0 && i < rows; i++) - { - const TRectype & pagrec = sc.pag(i); - if (numreg == pagrec.get_long(PAG_NUMREG)) - rowpag = i; - } - if (rowpag >= 0) - { - TRectype & pagrec = sc.pag(rowpag); - - pagrec.zero(PAG_COMPENSO); - pagrec.zero(PAG_SPESA); - } - - - for (TPartita * p = partarr.first(); p != NULL; p =partarr.next()) { const int row = p->prima_fattura(numreg); @@ -393,8 +374,11 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) for (int r = 1; r <= nrate; r++) { TRiga_scadenze & ratapart = rigapart.rata(r); - TImporto tot; - long numregp = 0L; + TImporto tot[10]; + long numregp[10] = {0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L}; + int lastsch = 0; + + const int rows = sc.pag_items(); for (int rowp = ratapart.last(); rowp > 0; rowp = ratapart.pred(rowp)) { @@ -402,16 +386,38 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) const TRiga_partite& sum = p->riga(rowp); // Riga partite const char sez = sum.sezione(); TImporto imppag(sez, pag.get_real(PAGSCA_IMPORTO)); + const long num = sum.get_long(PART_NREG); + if(lastsch == 0 && numregp[0] == 0L) + { + numregp[lastsch] = num; + tot[lastsch].reset(); + } + if(num != numregp[lastsch]) + { + numregp[++lastsch] = num; + tot[lastsch].reset(); + } + if (lastsch > 9) + { + message_box("Attenzione! Troppi pagamenti diversi per la registrazione %ld.", numreg); + break; + } - if (numregp == 0L) - numregp = sum.get_long(PART_NREG); + 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); - tot += imppag; + tot[lastsch] += imppag; if (!datapag.ok()) datapag = sum.get_date(PART_DATADOC); if (!datapag.ok()) @@ -419,26 +425,23 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) if (!datapag.ok()) datapag = sum.get_date(PART_DATAPAG); } - - tot.normalize('D'); - if (rowpag < 0) + } + for (int j = 0; j < 10 && numregp[j] > 0L; j++) { - if (tot.valore() == ZERO) + tot[j].normalize('D'); + if (tot[j].valore() == ZERO) break; - rowpag = rows; - TRectype & pagrec = sc.pag(rowpag); + TRectype & pagrec = sc.pag(rows); pagrec.put(PAG_CODDITTA, sc.lfile().get(SCH_CODDITTA)); pagrec.put(PAG_TIPOA, sc.lfile().get(SCH_TIPOA)); pagrec.put(PAG_CODANAGR, sc.lfile().get(SCH_CODANAGR)); pagrec.put(PAG_NPROG, sc.lfile().get(SCH_NPROG)); - pagrec.put(PAG_NRIGA, rowpag + 1); + pagrec.put(PAG_NRIGA, rows + 1); pagrec.put(PAG_NUMVERS, -1); - } - TRectype & pagrec = sc.pag(rowpag); - real spesepag = tot.valore() * spperc; - real ivapag = tot.valore() * ivaperc; + real spesepag = tot[j].valore() * spperc; + real ivapag = tot[j].valore() * ivaperc; spesepag.round(TCurrency::get_firm_dec()); if (abs(spesepag) > abs(spese)) @@ -447,7 +450,7 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) if (abs(ivapag) > abs(iva)) ivapag = iva; - real compensopag = tot.valore() - spesepag - ivapag; + real compensopag = tot[j].valore() - spesepag - ivapag; compensopag += compensopag * h_PercRitenuta; compensopag.round(TCurrency::get_firm_dec()); @@ -458,14 +461,17 @@ void TSchedaPercipienti::agg_pagamenti(const TRectype & sch) pagrec.put(PAG_COMPENSO, compensopag); pagrec.put(PAG_SPESA, spesepag); pagrec.put(PAG_DATAPAG, datapag); + sc.lfile().put(SCH_ANNOC, datapag.year()); + sc.lfile().put(SCH_MESEC, datapag.month()); pagrec.put(PAG_PERC, h_PercRitenuta); // percentuale ritenuta acconto pagrec.put(PAG_ALQIMP10, h_PercAssImpInps);// percentuale 10% INPS - pagrec.put(PAG_NUMREG, numregp); + pagrec.put(PAG_NUMREG, numregp[j]); pagrec.put(PAG_COD10, "C"); calcola_riga_pag(pagrec, h_PercAssImp, h_PercCassaPrev, h_PercRitenuta, h_PercInps, h_PercAssImpInps, h_PercCommitInps); } } } + } sc.rewrite(); } }