diff --git a/src/tf/tf0200.cpp b/src/tf/tf0200.cpp index 79b6fd3bf..b5f8c83f7 100644 --- a/src/tf/tf0200.cpp +++ b/src/tf/tf0200.cpp @@ -182,25 +182,31 @@ void calcolaCreditoPrec(real& creprec, real& creaprec, bool mensile, int anno, i { TRectype rowLiq = curLiq.curr(); if(rowLiq.get_int("MESE") >= mese) break; // Perchè li prende lo stesso? - - if(rowLiq.get_real("IVAVER") == ZERO) + + trovato = trovato || rowLiq.get_real("CREAPREC") > ZERO; + + // Non ho iva da versare, quindi ho dei crediti + if(rowLiq.get_real("IVAVER") == ZERO) { - creprec = rowLiq.get_real("IVAVERC"); - // Possono esserci valori negativi, nel caso vanno sommati altrimenti sostituisco - if(rowLiq.get_real("CREAPREC") < ZERO) - creaprec += rowLiq.get_real("CREAPREC"); - else - creaprec = rowLiq.get_real("CREAPREC"); + // Innanzitutto controllo il consumo del credito dell'anno precedente + real debito = rowLiq.get_real("IVADOV") + rowLiq.get_real("DEBPREC") + rowLiq.get_real("INTLIQTRI"); + + if(rowLiq.get_real("CREAPREC") >= ZERO) + creaprec = rowLiq.get_real("CREAPREC") - debito; + else // Sto utilizzando del credito dell'anno precedente! + creaprec += rowLiq.get_real("CREAPREC") - debito; + + // Se ho esaurito il credito dell'anno precedente consumo anche il credito precedente + if(creaprec < ZERO) + creaprec = ZERO; + // Sottraggo dal credito totale quello dell'anno precedente per calcolare il rimanente + creprec = rowLiq.get_real("IVAVERC") - creaprec; } else { creprec = ZERO; creaprec = ZERO; } - - // Se il credito precedente è almeno una volta positivo flaggo trovato - if(rowLiq.get_real("CREAPREC") > ZERO) - trovato = true; } /* Se non ho trovato nessun valore positivo (i negativi senza nessun positivo prima non sono validi) * vado a leggere la liquidazione di quest'anno */ @@ -493,17 +499,18 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO */ // Verifico che sia Non soggetto bool nonSogg = rowPrm.get("S5") == "NS"; - if(nonSogg && tiporeg == reg_pas) + if(nonSogg && tiporeg == reg_pas && totoppas > ZERO) { totoppas = totoppas - rowPrm.get_real("R0"); } - else if (nonSogg && tiporeg == reg_att) + else if (nonSogg && tiporeg == reg_att && totopatt > ZERO) { totopatt = totopatt - rowPrm.get_real("R0"); } + } - // Aggiungo gli indeducibili per articolo 19 + // Aggiungo gli indeducibili per articolo 19, e indeducibili su ricavi esenti static TRelation rpom(LF_TAB); TRectype pomFrom(rpom.curr()); pomFrom.put("COD", "POM");pomFrom.put("CODTAB", anno); TRectype pomTo(rpom.curr()); pomTo.put("COD" , "POM");pomTo.put("CODTAB", anno); @@ -512,7 +519,8 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO { TRectype rowPom = curPom.curr(); if(atoi(rowPom.get("CODTAB").right(2)) != start) continue; - totoppas = totoppas + rowPom.get_real("R1"); + totoppas = totoppas + rowPom.get_real("R1"); // Art. 19 + totoppas = totoppas + rowPom.get_real("R9"); // Ricavi esenti } // Se ha attiva l'IVA x cassa