From f565c3976881b851d653781c8a4892bfcedc8aa0 Mon Sep 17 00:00:00 2001 From: bonazzi Date: Fri, 9 Dec 2016 23:54:43 +0000 Subject: [PATCH] Patch level : 12.0 310 Files correlati : cg4.exe Commento : Correzioni alla liquidazione per l'IVA differita e per cassa git-svn-id: svn://10.65.10.50/branches/R_10_00@23432 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/cg/cg4300.h | 2 +- src/cg/cg4301.cpp | 142 ++++++++++++++++++++++++++++++---------------- src/cg/cg4303.cpp | 13 +++-- 3 files changed, 101 insertions(+), 56 deletions(-) diff --git a/src/cg/cg4300.h b/src/cg/cg4300.h index 90a8ec120..aef96f3f1 100755 --- a/src/cg/cg4300.h +++ b/src/cg/cg4300.h @@ -537,7 +537,7 @@ public: const real& howmuch, bool intra); // IVA differita e per cassa - void zero_diff(int month, const char* codatt); // Azzera tabella IVA x Cassa + void zero_diff(int month, const char* codatt); // Azzera tabella IVA x Cassa // Ritorna il parametro della liquidazione differita per la ditta corrente, cosi come // e' scritto sui parametri liquidazione (LIA) diff --git a/src/cg/cg4301.cpp b/src/cg/cg4301.cpp index 6c8d26bb9..a1f6869de 100755 --- a/src/cg/cg4301.cpp +++ b/src/cg/cg4301.cpp @@ -1127,13 +1127,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) #ifdef DBG const long nr = _mov->get_long(MOV_NUMREG); - if (nr == 24894) + if (nr == 24734 || nr == 24735) int i = 1 ; #endif if (bIsMovDiff && tm == tm_fattura) { - // const bool id_chiusa = ivadiff_chiusa(_mov->curr(), inizio); const bool id_chiusa = ivadiff_chiusa(_mov->curr(), TDate(31,12,inizio.year()-1)); if (!dok && id_chiusa) continue; // Salta vecchi movimenti differiti già chiusi @@ -1386,14 +1385,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real impos_ind; // Imposta indetraibile real impon_det; // Imponibile detraibile real impos_det; // Imposta detraibile + char sezfat; + TLocalisamfile id(LF_IVADIFF); if (bIsMovDiff && tm == tm_fattura) { - const char sezfat = tipomov == vendita ? 'D' : 'A'; const TDate datareg = _mov->get(MOV_DATAREG); - TLocalisamfile id(LF_IVADIFF); - id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); + sezfat = tipomov == vendita ? 'D' : 'A'; + id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); id.put("NUMPRO", 0); id.put(PART_TIPOMOV, tm); @@ -1418,18 +1418,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) id.put("IMPORTO", imponibile_orig+imposta_orig); id.put(RMI_IMPONIBILE, imponibile_orig); - - /* cazzata? - if (percind > ZERO) // Nel caso di IVA indetraibile memorizza solo la parte detraibile! - { - real imp_det, iva_det, imp_ind, iva_ind; - analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva, - imp_det, iva_det, imp_ind, iva_ind); - id.put(RMI_IMPOSTA, iva_det); - } - else - */ - id.put(RMI_IMPOSTA, imposta_orig); + id.put(RMI_IMPOSTA, imposta_orig); const int ew = id.write_rewrite(); if (ew != NOERR) @@ -1442,53 +1431,57 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real totfat = _mov->get(MOV_TOTDOC); real tot = totfat; - TLocalisamfile id(LF_IVADIFF); - TRectype& idcurr = id.curr(); - FOR_EACH_ARRAY_ITEM(pagscatt, r, obj) + FOR_EACH_ARRAY_ITEM(pagscatt, r, obj) { const TRectype& pagsca = *(TRectype*)obj; const int nrigp = pagsca.get_int(PAGSCA_NRIGP); id.zero(); - idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); - idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); + id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); + id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp); - idcurr.put("NUMPRO", min(nrigp, 999)); + id.put("NUMPRO", min(nrigp, 999)); if (id.read(_isequal, _lock) != NOERR) { id.zero(); - idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); - idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); - idcurr.put("NUMPRO", min(nrigp, 999)); + id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); + id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); + id.put("NUMPRO", min(nrigp, 999)); if (id.write() != NOERR) error_box("Errore %d in creazione record IVADIFF", id.status()); } - idcurr.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); + id.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); - idcurr.put("TIPOATT", rmi_tipoatt); - idcurr.put("TIPOIVA", tipomov == 2 ? 2 : 1); - idcurr.put("TIPODIFF", iva_cass ? 2 : 1); - idcurr.put(RMI_CODIVA, codiva); + id.put("TIPOATT", rmi_tipoatt); + id.put("TIPOIVA", tipomov == 2 ? 2 : 1); + id.put("TIPODIFF", iva_cass ? 2 : 1); + id.put(RMI_CODIVA, codiva); TImporto pagtmp; bool ultimo = false; + long nregpag; + int nrigpag; + tipo_movimento tipomov_pag = tm_pagamento; if (nrigp > 0 && nrigp < 9999) { - const TPartita& p = arrpart.partita(pagsca); - const TRiga_partite& rp = p.riga(nrigp); - tipomov_pag = rp.tipo(); - idcurr.put(PART_TIPOMOV, tipomov_pag); - idcurr.put("NUMREGP", rp.get(PART_NREG)); - idcurr.put("NUMRIGP", rp.get(PART_NUMRIG)); + const TPartita& p = arrpart.partita(pagsca); + const TRiga_partite& rp = p.riga(nrigp); + + nregpag = rp.get_long(PART_NREG); + nrigpag = rp.get_int(PART_NUMRIG); + tipomov_pag = rp.tipo(); + id.put(PART_TIPOMOV, tipomov_pag); + id.put("NUMREGP", nregpag); + id.put("NUMRIGP", nrigpag); TDate d = rp.get(PART_DATAPAG); if (!d.ok()) d = rp.get(PART_DATADOC); if (!d.ok()) d = rp.get(PART_DATAREG); - idcurr.put("DATAREGP", d); - idcurr.put("ANNOLIQ", d.year()); + id.put("DATAREGP", d); + id.put("ANNOLIQ", d.year()); pagtmp = p.importo_pagsca(pagsca); pagtmp.normalize(sezpag); ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine); @@ -1496,11 +1489,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) else { // Falso record generato da datainc - idcurr.put(PART_TIPOMOV, tipomov_pag); - idcurr.put("NUMREGP", _mov->get(MOV_NUMREG)); - idcurr.put("NUMRIGP", nrigp); - idcurr.put("DATAREGP", _mov->get(MOV_DATAINC)); - idcurr.put("ANNOLIQ", year_int); + nregpag = _mov->get_long(MOV_NUMREG); + nrigpag = nrigp; + + id.put(PART_TIPOMOV, tipomov_pag); + id.put("NUMREGP", nregpag); + id.put("NUMRIGP", nrigp); + id.put("DATAREGP", _mov->get(MOV_DATAINC)); + id.put("ANNOLIQ", year_int); pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO)); ultimo = true; } @@ -1512,15 +1508,61 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) if (resto > 0) meseliq += 3-resto; } - idcurr.put("MESELIQ", meseliq); - idcurr.put("SEZIONE", pagtmp.sezione()); + id.put("MESELIQ", meseliq); + id.put("SEZIONE", pagtmp.sezione()); real val_imp = pagtmp.valore() * lordo_orig / tot; - real val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec()); + real val_iva; + + if (ultimo) + { + TRectype svidrec(id.curr()); + TLocalisamfile rid(LF_IVADIFF); + const long numreg = _rmoviva->get_long(RMI_NUMREG); + const int numrig = _rmoviva->get_int(RMI_NUMRIG); + + rid.put(MOV_NUMREG, numreg); + rid.put(RMI_NUMRIG, numrig); + val_iva = imposta_orig; + + bool pag_found = false; + + int err = rid.read(_isgteq); + + for (; err == NOERR && rid.get_long(RMI_NUMREG) == numreg && rid.get_int(RMI_NUMRIG) == numrig; err = rid.next()) + { + const long ridnumreg =rid.get_long(RMI_NUMREG); + const int ridnumrig = rid.get_int(RMI_NUMRIG); + const tipo_movimento ridtipopag = (tipo_movimento) rid.get_int(PART_TIPOMOV); + + if (ridnumreg == numreg && ridnumrig == numrig) + { + const long ridnregpag = rid.get_long("NUMREGP"); + const int ridnrigpag = rid.get_int("NUMRIGP"); + + if ((ridtipopag != tm_fattura) && ((ridnregpag != nregpag) && + (ridnrigpag != nrigpag))) + { + pag_found = true; + if (sezfat != sezpag) + val_iva -= rid.get_long(RMI_IMPOSTA); + else + val_iva += rid.get_long(RMI_IMPOSTA); + } + } + } + if (!pag_found) + val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec()); + else + civa.scorpora(val_imp, TCurrency::get_firm_dec()); + id.curr() = svidrec; + } + else + val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec()); - idcurr.put("IMPORTO", val_imp + val_iva); - idcurr.put(RMI_IMPONIBILE, val_imp); - idcurr.put(RMI_IMPOSTA, val_iva); + id.put("IMPORTO", val_imp + val_iva); + id.put(RMI_IMPONIBILE, val_imp); + id.put(RMI_IMPOSTA, val_iva); if (tipomov_pag >= tm_pagamento) { diff --git a/src/cg/cg4303.cpp b/src/cg/cg4303.cpp index 976e280e2..bdbc11bb0 100755 --- a/src/cg/cg4303.cpp +++ b/src/cg/cg4303.cpp @@ -626,7 +626,7 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt) if (!_nditte->is_first_match(LF_ATTIV)) return; - if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) + if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) // rischioso non farlo in tredicesima return; TFast_isamfile fid(LF_IVADIFF); @@ -637,10 +637,11 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt) query << "USE IVADIFF KEY 2"; // Key 2 = ANNOLIQ+MESELIQ+... query << "\nFROM ANNOLIQ=" << _year; // Se calcolo gennaio (o marzo trimestrale) azzero tutto l'anno, altrimenti solo il mese selezionato - if (month > (_freqviva == "T" ? 3 : 1)) +// if (month > (_freqviva == "T" ? 3 : 1)) query << " MESELIQ=" << month; query << "\nTO ANNOLIQ=" << _year; // Dal 18-06-2014 lascia stare l'anno prossimo! + query << " MESELIQ=" << month + (_freqviva == "T" ? 2 : 0); TISAM_recordset id(query); @@ -651,7 +652,7 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt) for (bool ok = id.move_first(); ok; ok = id.move_next()) { pi.add_status(1); - file.zero("ANNOLIQ"); +/* file.zero("ANNOLIQ"); file.zero("MESELIQ"); file.zero("IMPORTO"); file.zero("IMPONIBILE"); @@ -666,6 +667,8 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt) file.zero("TIPOATT"); file.zero("TIPODIFF"); file.zero("CHIUSA"); - file.rewrite(); - } + file.rewrite(); */ + file.remove(); + } } +