From 01d42432192af17c113fbb4b07ea8e9a38c819fa Mon Sep 17 00:00:00 2001 From: mtollari Date: Fri, 26 May 2017 13:37:59 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2012.?= =?UTF-8?q?0=20402=20Files=20correlati=20=20=20=20=20:=20tf=20Commento=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20:=20tf0500=20-=20Sistemata=20s?= =?UTF-8?q?crittura=20trimestre=20nel=20file=20(Adesso=20prende=20direttam?= =?UTF-8?q?ente=20dal=20record,=20non=20so=20perch=C3=A8=20non=20lo=20face?= =?UTF-8?q?vo=20anche=20prima)=20tf0200=20-=20Rivisto=20completamente=20il?= =?UTF-8?q?=20calcolo=20degli=20imponibili,=20adesso=20creo=20un=20cursore?= =?UTF-8?q?=20da=20RMOVIVA=20JOIN=20MOV=20e=20sommo=20i=20valori=20corrett?= =?UTF-8?q?i.=20Inoltre=20adesso=20calcolo=20insieme=20gli=20imponibili=20?= =?UTF-8?q?x=20cassa=20e=20differiti=20(tolti=20dalla=20funzione=20calc=5F?= =?UTF-8?q?inc=5Fdiff)=20-=20Messe=20le=20somme=20dei=20valori=20nei=20cam?= =?UTF-8?q?pi=20(ivaes=20=3D=20ivaes=20+=20ivaesxc=20+=20ivaesdiff)=20-=20?= =?UTF-8?q?Spostate=20constanti=20reg=5Fatt=20e=20reg=5Fpas=20e=20definite?= =?UTF-8?q?=20con=20dei=20#define=20-=20Aggiunto=20booleano=20ivaxcassa=20?= =?UTF-8?q?cos=C3=AC=20evito=20di=20calcolarlo=202=20volte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/branches/R_10_00@23842 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/tf/tf0200.cpp | 135 +++++++++++++++++++++------------------------- src/tf/tf0500.cpp | 57 +++++++++----------- 2 files changed, 87 insertions(+), 105 deletions(-) diff --git a/src/tf/tf0200.cpp b/src/tf/tf0200.cpp index 606101dc0..dc026a67d 100644 --- a/src/tf/tf0200.cpp +++ b/src/tf/tf0200.cpp @@ -15,6 +15,8 @@ #include "tf0200a.h" #define CAMPI_CON_BOOLEAN F_TOTOPATT +#define REG_ATT 1 +#define REG_PAS 2 // ComLiqPerIva: Comunicazione Liquidazioni Periodiche IVA @@ -89,13 +91,17 @@ const TRectype getVER(int anno, int mese) return rowRet; } -// Scopiazzata brutalmente da cg4304.cpp, aggiunto controllo indetraibilità per le imposte, non devono essere prese in considerazione se indetraibili -int calc_inc_diff(int anno, int mese, int tipoiva, real& imponibile_diff, real& imposta_diff, real& imponibile_xcas, real& imposta_xcas) +/* Scopiazzata e divisa in due da cg4304.cpp + * Calcola solo le imposte, aggiunto controllo indetraibilità, non devono essere presi in considerazione + * i movimenti se indetraibili + */ + +int calc_inc_diff(int anno, int mese, int tipoiva, real& imposta_diff, real& imposta_xcas) { CHECKD(tipoiva == 1 || tipoiva == 2, "Bad tipo iva:", tipoiva); int flag = 0; - imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO; + imposta_diff = imposta_xcas = ZERO; TString limit; limit << "ANNOLIQ=" << anno; if (mese < 13) limit << " MESELIQ=" << mese; @@ -108,21 +114,16 @@ int calc_inc_diff(int anno, int mese, int tipoiva, real& imponibile_diff, real& for (bool ok = id.move_first(); ok; ok = id.move_next()) { const real iva = rec.get_real(RMI_IMPOSTA); - const real imp = rec.get_real(RMI_IMPONIBILE); - if (!iva.is_zero() || !imp.is_zero()) + if (!iva.is_zero() && !rec.get_bool("INDETR")) { const int tipodiff = rec.get_int("TIPODIFF"); switch (tipodiff) { case 1: - imponibile_diff += imp; - if(!rec.get_bool("INDETR")) - imposta_diff += iva; + imposta_diff += iva; break; case 2: - imponibile_xcas += imp; - if(!rec.get_bool("INDETR")) - imposta_xcas += iva; + imposta_xcas += iva; break; default: break; } @@ -327,8 +328,8 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long case F_IVADETXC : case F_IVADETDIFF : { - real ivaes = get_real(F_IVAES) + get_real(F_IVAESXC) + get_real(F_IVAESDIFF); - real ivadet = get_real(F_IVADET) + get_real(F_IVADETXC) + get_real(F_IVADETDIFF); + real ivaes = get_real(F_IVAES); + real ivadet = get_real(F_IVADET); if((ivaes - ivadet) >= ZERO) { set(F_IVADOV, ivaes - ivadet); @@ -433,14 +434,11 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO real ivaver = ZERO; real ivaverc = ZERO; - // Costanti - static const int reg_att = 1; - static const int reg_pas = 2; - for(; start <= end; start++) { TDate data_da(1, start, anno); TDate data_a(31, start, anno); + bool hasIXC = gestione_IVAxCassa(data_da); /**************************************************************************************************************** * TOTOPATT, TOTOPATTXC, TOTOPPAS, TOTOPPASXC, IVAES, IVAESXC, IVAESDIFF, @@ -460,20 +458,6 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO // Riga LIA const TRectype rowLia = getLIA(anno); - /* Sembra che in PAM ci sia già tutto quello che mi serve! - * Chiave PAM: ANNO + COD_ATTIVITA' + MESE */ - static TRelation rpam(LF_TAB); - TRectype pamFrom(rpam.curr()); pamFrom.put("COD", "PAM");pamFrom.put("CODTAB", anno); - TRectype pamTo(rpam.curr()); pamTo.put("COD" , "PAM");pamTo.put("CODTAB", anno); - TCursor curPam(&rpam, "", 1, &pamFrom, &pamTo); - for(curPam = 0; curPam.pos() < curPam.items(); ++curPam) - { - TRectype rowPam = curPam.curr(); - if(atoi(rowPam.get("CODTAB").right(2)) != start) continue; - totopatt = totopatt + rowPam.get_real("R1"); - totoppas = totoppas + rowPam.get_real("R0"); - } - // Devo sottrarre gli indetraibili, quindi prendo prm e sottraggo static TRelation rprm(LF_TAB); TRectype prmFrom(rprm.curr()); prmFrom.put("COD", "PRM");prmFrom.put("CODTAB", anno); @@ -489,56 +473,61 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO // Verifico su che registro mi trovo int tiporeg = rowPrm.get_int("I1"); - /* - bool detraibile = atoi(rowPrm.get("CODTAB").mid(20,1)) == 0; // Se > è indetraibile - // Tutti i non detraibili sono passivi ma un controllo in più non fa mai male - if(!detraibile && tiporeg == reg_pas) - { - totoppas = totoppas + rowPrm.get_real("R0"); - } - */ + // Verifico che sia Non soggetto bool nonSogg = rowPrm.get("S5") == "NS"; - if(nonSogg && tiporeg == reg_pas && totoppas > ZERO) + if(nonSogg && tiporeg == REG_PAS && totoppas > ZERO) { totoppas = totoppas - rowPrm.get_real("R0"); } - else if (nonSogg && tiporeg == reg_att && totopatt > ZERO) + else if (nonSogg && tiporeg == REG_ATT && totopatt > ZERO) { totopatt = totopatt - rowPrm.get_real("R0"); } } + TString queryIva = "USE RMOVIVA\n"; + queryIva << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)"; + queryIva << "\nJOIN MOV INTO NUMREG==NUMREG\n"; - /* Il reverse charge va sottratto dal totale delle operazioni attive! - * Creo un cursore su MOV e RMOVIVA e sottraggo - */ - TString queryMov = "USE RMOVIVA\n"; - queryMov << "SELECT BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)\n"; - queryMov << "JOIN MOV INTO NUMREG==NUMREG\n"; + TISAM_recordset curIva(queryIva); + curIva.set_var("#DADATAREG", data_da); + curIva.set_var("#ADATAREG", data_a); - TISAM_recordset cmov(queryMov); - - cmov.set_var("#DADATAREG", TDate(01,start, anno)); - cmov.set_var("#ADATAREG", TDate(31, start, anno)); - - for (bool ok = cmov.move_first(); ok; ok = cmov.move_next()) + for(bool ok = curIva.move_first(); ok; ok = curIva.move_next()) { - // Vado a prendere la prima riga in RMOV - TString key = cmov.get("23.NUMREG").as_string(); - key << "|1"; - TRectype rmov = cache().get(LF_RMOV, key); + // Controllo che sia un movimento con codice non "non soggetto" + TCodiceIVA codiva(curIva.get("25.CODIVA").as_string()); + if(codiva.tipo() == "NS" || curIva.get("23.TIPOMOV").as_int() == tm_nessuno) continue; + + // Prendo il tipo di registro + int tiporeg = TRegistro(curIva.get("23.REG").as_string()).tipo(); + // Prendiamo l'imponibile + real imp = curIva.get("25.IMPONIBILE").as_real(); - // Controllo di essere sul registro vendite - bool regVen = TRegistro(cmov.get("23.REG").as_string()).tipo() == reg_att; - - // Salto se il registro non è di tipo vendite o ci sono delle righe in RMOV - if(!regVen || !rmov.empty()) continue; - - totopatt -= cmov.get("25.IMPONIBILE").as_real(); + // Se è un movimento IvaXCassa o LiqDiff + if(hasIXC && (curIva.get("23.IVAXCASSA").as_bool() || curIva.get("23.LIQDIFF").as_bool())) + { + if(tiporeg == REG_ATT) + totopattxc += imp; + else + totoppasxc += imp; + } + else + { + if(tiporeg == REG_ATT) + { + // Controllo il reverse charge, non va calcolato nel totale delle operazioni attive! + // Se non ha una riga di movimento non lo sommo + TString keyRC = curIva.get("23.NUMREG").as_string(); keyRC << "|1"; + if(!cache().get(LF_RMOV, keyRC).empty()) + totopatt += imp; + } + else + totoppas += imp; + } } - // 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); @@ -552,23 +541,21 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO totoppas = totoppas + rowPom.get_real("R9"); // Ricavi esenti } - // Se ha attiva l'IVA x cassa - if(gestione_IVAxCassa(data_da)) + // Se ha attiva l'IVA x cassa calcolo le imposte (imponibili per comodità già calcolati sopra) + if(hasIXC) { // IVA esigibile real imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas; imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO; // 1 = Vendite - calc_inc_diff(anno, start, reg_att, imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas); - totopattxc = totopattxc + imponibile_xcas; + calc_inc_diff(anno, start, REG_ATT, imposta_diff, imposta_xcas); ivaesxc = ivaesxc + imposta_xcas; ivaesdiff = ivaesdiff + imposta_diff; // IVA detraibile imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO; // 2 = Acquisti - calc_inc_diff(anno, start, reg_pas, imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas); - totoppasxc = totoppasxc + imponibile_xcas; + calc_inc_diff(anno, start, REG_PAS, imposta_diff, imposta_xcas); ivadetxc = ivadetxc + imposta_xcas; ivadetdiff = ivadetdiff + imposta_diff; } @@ -586,7 +573,6 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO ivaes += rowLam.get_real("R0"); ivadet += rowLam.get_real("R1"); } - // Non sappiamo che fa per queste, quindi speriamo sia giusta sta roba ivaes += ivaesxc + ivaesdiff; ivadet += ivadetxc + ivadetdiff; @@ -650,6 +636,9 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO ivaver = ZERO; } + // Sommo i totali con i totali xc + totopatt += totopattxc; + totoppas += totoppasxc; // Imposto tutti i campi set(F_TOTOPATT, totopatt); @@ -765,7 +754,7 @@ void ComLiqPerIva_mask::checkOldValue(int field, real val) trueVal = trueData.get_real("IVADETXC"); break; case F_IVADETDIFF: - trueVal = trueData.get_real("IVADETDIF"); + trueVal = trueData.get_real("IVADETDIFF"); break; case F_IVADOV: trueVal = trueData.get_real("IVADOV"); diff --git a/src/tf/tf0500.cpp b/src/tf/tf0500.cpp index bb51cb310..dad826bb1 100644 --- a/src/tf/tf0500.cpp +++ b/src/tf/tf0500.cpp @@ -213,49 +213,42 @@ bool TIvaSend_app::generate(TIvaSend_msk& msk) int end = msk.isMese() ? msk.get_int(F_AMESE) : (((msk.get_int(F_ATRIMESTRE)) * 3)); for(; start <= end; start++) { - TRectype rowLim = getLim(msk.get_int(F_ANNO), start); // rowLim viene già usata sopra + TRectype rowLim = getLim(msk.get_int(F_ANNO), start); // rowLim viene già usata sopra TRectype rowLiq = getLiq(msk.get_int(F_ANNO), start); TToken_string riga(testata); if(msk.isMese()) { - riga.add(start); // Mese - riga.add(""); // Trimestre + riga.add(start); // Mese + riga.add(""); // Trimestre } else { - riga.add(""); // Mese - riga.add(start/3); // Trimestre + riga.add(""); // Mese + riga.add(rowLiq.get("TRIMESTRE")); // Trimestre } char subfor = rowLiq.get_bool("SUBFOR") ? 'X' : '\0'; - riga.add(subfor); // Flag Subfornitura - riga.add(""); // Eventi eccezionali - real totopatt = rowLiq.get_real("TOTOPATT") + rowLiq.get_real("TOTOPATTXC"); - real totoppas = rowLiq.get_real("TOTOPPAS") + rowLiq.get_real("TOTOPPAS"); - riga.add(formatCurrency(totopatt.string())); // Totale operazioni attive (al netto dell'IVA) - riga.add(formatCurrency(totoppas.string())); // Totale operazioni passive (al netto dell'IVA) - - real ivaes = rowLiq.get_real("IVAES") + rowLiq.get_real("IVAESXC") + rowLiq.get_real("IVAESDIFF"); - riga.add(formatCurrency(ivaes.string())); // IVA esigibile - - real ivadet = rowLiq.get_real("IVADET") + rowLiq.get_real("IVADETXC") + rowLiq.get_real("IVADETDIFF"); - riga.add(formatCurrency(ivadet.string())); // IVA detratta - - riga.add(formatCurrency(rowLiq.get("IVADOV"))); // IVA dovuta - riga.add(formatCurrency(rowLiq.get("IVADOVC"))); // IVA a credito VP6 col 2 - riga.add(formatCurrency(rowLiq.get("DEBPREC"))); // Debito periodo precedente - riga.add(formatCurrency(rowLiq.get("CREPREC"))); // Credito periodo precedente - riga.add(formatCurrency(rowLiq.get("CREAPREC"))); // Credito anno precedente - riga.add(formatCurrency(rowLiq.get("VEAUE"))); // Versamenti auto UE - riga.add(formatCurrency(rowLiq.get("CREIMP"))); // Crediti di imposta - riga.add(formatCurrency(rowLiq.get("INTLIQTRI"))); // Interessi dovuti per liquidazioni trimestrali - riga.add(formatCurrency(rowLiq.get("ACCDOV"))); // Acconto dovuto - riga.add(formatCurrency(rowLiq.get("IVAVER"))); // IVA da versare - riga.add(formatCurrency(rowLiq.get("IVAVERC"))); // IVA a credito VP14 col 2 - riga.add(prog); // Numero interno trasmissione - riga.add(""); // Flag trasmesso - riga.add(""); // Flag accettato + riga.add(subfor); // Flag Subfornitura + riga.add(""); // Eventi eccezionali + riga.add(formatCurrency(rowLiq.get("TOTOPATT"))); // Totale operazioni attive (al netto dell'IVA) + riga.add(formatCurrency(rowLiq.get("TOTOPPAS"))); // Totale operazioni passive (al netto dell'IVA) + riga.add(formatCurrency(rowLiq.get("IVAES"))); // IVA esigibile + riga.add(formatCurrency(rowLiq.get("IVADET"))); // IVA detratta + riga.add(formatCurrency(rowLiq.get("IVADOV"))); // IVA dovuta + riga.add(formatCurrency(rowLiq.get("IVADOVC"))); // IVA a credito VP6 col 2 + riga.add(formatCurrency(rowLiq.get("DEBPREC"))); // Debito periodo precedente + riga.add(formatCurrency(rowLiq.get("CREPREC"))); // Credito periodo precedente + riga.add(formatCurrency(rowLiq.get("CREAPREC"))); // Credito anno precedente + riga.add(formatCurrency(rowLiq.get("VEAUE"))); // Versamenti auto UE + riga.add(formatCurrency(rowLiq.get("CREIMP"))); // Crediti di imposta + riga.add(formatCurrency(rowLiq.get("INTLIQTRI"))); // Interessi dovuti per liquidazioni trimestrali + riga.add(formatCurrency(rowLiq.get("ACCDOV"))); // Acconto dovuto + riga.add(formatCurrency(rowLiq.get("IVAVER"))); // IVA da versare + riga.add(formatCurrency(rowLiq.get("IVAVERC"))); // IVA a credito VP14 col 2 + riga.add(prog); // Numero interno trasmissione + riga.add(""); // Flag trasmesso + riga.add(""); // Flag accettato // Appendo al file file << riga << "\n";