From 48aeea1dbaebf6d9acc8c611ff78c08e27899e73 Mon Sep 17 00:00:00 2001 From: bonazzi Date: Mon, 23 Apr 2018 12:01:42 +0000 Subject: [PATCH] Patch level : 12.0 564 Files correlati : cg4.exe Modificata la liquidazione delle fatture in ritardo Aggiunta la gestione dell'uscita dal regime di cassa Sistemata la cancellazione di IVADIFF nei mesi e in 13. git-svn-id: svn://10.65.10.50/branches/R_10_00@24468 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/cg/cg4300.h | 3 +- src/cg/cg4301.cpp | 482 ++++++++++++++++++++++++---------------------- src/cg/cg4303.cpp | 53 +++-- src/cg/cg4304.cpp | 14 +- src/cg/cg4400.cpp | 125 ++++++------ src/cg/cg4400.h | 2 +- src/cg/f171.trr | 3 +- 7 files changed, 358 insertions(+), 324 deletions(-) diff --git a/src/cg/cg4300.h b/src/cg/cg4300.h index e97ed76b5..9aa2f0962 100755 --- a/src/cg/cg4300.h +++ b/src/cg/cg4300.h @@ -304,10 +304,11 @@ class TLiquidazione_app : public TPrint_application int _monthinatt; // mese inizio attivita' (serve per differita) bool _lim_cleared; bool _definitiva; + bool _end_cassa; real _diff_ven_ap, _diff_ven_ap_iva, _diff_acq_ap, _diff_acq_ap_iva; real _imposta_inc_diff_ven, _imposta_inc_cassa_ven, _imposta_inc_diff_acq, _imposta_inc_cassa_acq; - + // main cursor TRelation* _rel; TCursor* _cur; diff --git a/src/cg/cg4301.cpp b/src/cg/cg4301.cpp index 199564e1c..98bf9ec05 100755 --- a/src/cg/cg4301.cpp +++ b/src/cg/cg4301.cpp @@ -1134,15 +1134,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & const TRectype & lia = get_lia(); TDate data_end_cassa = lia.get_date("D1"); - bool end_cassa = lia.get_bool("B5") && data_end_cassa.ok() && data_rif_cassa > data_end_cassa; + _end_cassa = lia.get_bool("B5") && data_end_cassa.ok() && (month < 12 && data_rif_cassa.month() == data_end_cassa.month()); - if (!end_cassa && month > 11) + if (!_end_cassa && month > 11) { data_end_cassa = eotime; const TRectype & lia = get_lia(0, false, year_int + 1); - end_cassa = !lia.get_bool("B5"); - if (end_cassa) + _end_cassa = !lia.get_bool("B5"); + if (_end_cassa) data_end_cassa = data_rif_cassa; } @@ -1156,8 +1156,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & #ifdef DBG long nr = _mov->get_long(MOV_NUMREG); - if (nr == 1931434 || nr == 1931437) - int i = 1; + if (nr == 22060 || nr == 27710) + int i = 1; #endif const int liqmonth = _mov->get_int(MOV_MESELIQ); @@ -1236,10 +1236,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & #ifdef DBG nr = _mov->get_long(MOV_NUMREG); - if (nr == 25722 || - nr == 25863 || - nr == 27888 || - nr == 28033) + if (nr == 22060 || nr == 27710) int i = 1; #endif @@ -1256,7 +1253,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & const char sezfat = tipomov == vendita ? 'D' : 'A'; const char sezpag = (sezfat=='D') ? 'A' : 'D'; const long numreg = _mov->get_long(MOV_NUMREG); - TDate datainc; + TDate datainc = fine; real tot_incassato, tot_da_incassare; int flag_pg_nc = 0; // Ci sono pagamenti (0x1) e/o note di credito(0x2) ? bool game_found = false; @@ -1283,7 +1280,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & TImporto pg_per, nc_per; bool regular_month = orizzonte >= date; bool first_month = regular_month && date > inizio + 1L; - flag_pg_nc = rp.calcola_pagato_periodo(first_month ? botime : inizio + 1L, orizzonte, pg_per, nc_per, &pagscatt) && regular_month; +#ifdef DBG + nr = _mov->get_long(MOV_NUMREG); + + if (nr == 22060 || nr == 27710) + int i = 1; +#endif + flag_pg_nc = rp.calcola_pagato_periodo(first_month ? botime : inizio + 1L, orizzonte, pg_per, nc_per, &pagscatt) && regular_month; if (pagscatt.items() >= 2) { // Fondo tra loro le righe generate dallo stesso pagamento @@ -1299,7 +1302,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & } } } - if (iva_diff || sarebbe_maturata(_mov->curr(), inizio+1L, fine) || (iva_cass && end_cassa)) + if (iva_diff || sarebbe_maturata(_mov->curr(), inizio+1L, fine) || (iva_cass && _end_cassa)) { TPointer_array pagscaold; TImporto pg_tot, nc_tot; @@ -1366,7 +1369,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & else { // Fattura pił vecchia di un anno a ente NON pubblico - if (sarebbe_maturata(_mov->curr(), inizio+1L, fine) || (iva_cass && end_cassa)) + if (sarebbe_maturata(_mov->curr(), inizio+1L, fine) || (iva_cass && _end_cassa)) tot_da_incassare = _mov->get_real(MOV_TOTDOC); } } @@ -1376,7 +1379,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & tot_incassato = tot_da_incassare; datainc = data_maturazione_IVA_diff(_mov->curr()); - if (iva_cass && end_cassa) + if (iva_cass && _end_cassa) datainc = data_end_cassa; _mov->put(MOV_DATAINC, datainc); if (datainc < date) @@ -1526,10 +1529,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & #ifdef DBG nr = _mov->get_long(MOV_NUMREG); - if (nr == 25722 || - nr == 25863 || - nr == 27888 || - nr == 28033) + if (nr == 22060 || nr == 27710) int i = 1; #endif @@ -1558,50 +1558,52 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & if (diff_totr == ZERO) continue; - TDate datafat; + TDate datafat= _mov->get_date(MOV_DATAREG); long numreg = _rmoviva->get_long(RMI_NUMREG); - const TDate datareg = _mov->get_date(MOV_DATAREG); - int mesereg = datareg.month(); - bool ok = is_month_ok(mesereg, month) && (atoi(_year) == datareg.year()); + sezfat = tipomov == vendita ? 'D' : 'A'; - if (!ok && (iva_cass && end_cassa && month < 13)) - ok = (datareg.year() < atoi(_year)) || (mesereg <= month); - if (!ok || is_detr_diff == 1 || civa.tipo() == "NS") + if (is_detr_diff == 1 || civa.tipo() == "NS") continue; if (bIsMovDiff && tm == tm_fattura) { - datafat = datareg; - 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); - CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); - id.put("TIPOATT", rmi_tipoatt); - id.put("ANNOLIQ", datareg.year()); - - if (_freqviva[0] == 'T') + const TDate datareg = _mov->get_date(MOV_DATAREG); + int mesereg = datareg.month(); + bool ok = is_month_ok(mesereg, month) && (atoi(_year) == datareg.year()); + + if (ok) { - const int resto = mesereg % 3; - if (resto > 0) - mesereg += 3-resto; + datafat = datareg; + 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); + CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); + id.put("TIPOATT", rmi_tipoatt); + id.put("ANNOLIQ", datareg.year()); + + if (_freqviva[0] == 'T') + { + const int resto = mesereg % 3; + if (resto > 0) + mesereg += 3 - resto; + } + + id.put("MESELIQ", mesereg); + id.put("TIPOIVA", tipomov == 2 ? 2 : 1); + id.put(ID_INDETR, is_detr_diff > 0); + id.put("TIPODIFF", iva_cass ? 2 : 1); + id.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); + id.put(RMI_CODIVA, codiva); + id.put("SEZIONE", sezfat); + + id.put("IMPORTO", diff_totr); + id.put(RMI_IMPONIBILE, diff_impr); + id.put(RMI_IMPOSTA, diff_ivar); + + const int ew = id.write_rewrite(); + if (ew != NOERR) + cantwrite_box(id.description()); } - - id.put("MESELIQ", mesereg); - id.put("TIPOIVA", tipomov == 2 ? 2 : 1); - id.put(ID_INDETR, is_detr_diff > 0); - id.put("TIPODIFF", iva_cass ? 2 : 1); - id.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); - id.put(RMI_CODIVA, codiva); - id.put("SEZIONE", sezfat); - - id.put("IMPORTO", diff_totr); - id.put(RMI_IMPONIBILE, diff_impr); - id.put(RMI_IMPOSTA, diff_ivar); - - const int ew = id.write_rewrite(); - if (ew != NOERR) - cantwrite_box(id.description()); } if (bIsMovDiff && !pagscatt.empty()) @@ -1614,204 +1616,224 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & { const TRectype& pagsca = *(TRectype*)obj; const int nrigp = pagsca.get_int(PAGSCA_NRIGP); - - id.zero(); - id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); - id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); - CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp); - id.put("NUMPRO", min(nrigp, 999)); - if (id.read(_isequal, _lock) != NOERR) - { - id.zero(); - 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()); - } - - TDate datareg = _mov->get(MOV_DATADOC); - - if (datareg < datafat) - datareg = datafat; - id.put(MOV_DATAREG, datareg); - CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); - id.put("TIPOATT", rmi_tipoatt); - id.put("TIPOIVA", tipomov == 2 ? 2 : 1); - id.put(ID_INDETR, is_detr_diff > 0); - 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; - + TDate datapag; if (nrigp > 0 && nrigp < 9999) { 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); - if (d < datafat) - d = datafat; - 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); + datapag = rp.get(PART_DATAPAG); + if (!datapag.ok()) + datapag = rp.get(PART_DATADOC); + if (!datapag.ok()) + datapag = rp.get(PART_DATAREG); + if (datapag < datafat) + datapag = datafat; } else + datapag = _mov->get_date(MOV_DATAINC); + + bool ok = is_month_ok(datapag.month(), month) && (atoi(_year) == datapag.year()); + + if (ok) { - // Falso record generato da datainc - nregpag = _mov->get_long(MOV_NUMREG); - nrigpag = nrigp; + // if (!ok && (iva_cass && end_cassa && month < 13)) + // ok = (datareg.year() < atoi(_year)) || (mesereg <= month); - 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; - } - - int meseliq = id.get_date("DATAREGP").month(); - if (_freqviva[0] == 'T') - { - const int resto = meseliq % 3; - if (resto > 0) - meseliq += 3-resto; - } - if (is_detr_diff > 0 || civa.senza_imposta()) // indetraibile - { - const int annoliq = _mov->get_date(MOV_DATAREG).year(); - const int meseliq = _mov->get_date(MOV_DATAREG).month(); - - id.put("ANNOLIQ", annoliq); - id.put("MESELIQ", meseliq); - } - else - id.put("MESELIQ", meseliq); - id.put("SEZIONE", pagtmp.sezione()); - - const long numregp = id.get_long(ID_NUMREGP); - const int numrigp = nrigp; - real val_imp = pagtmp.valore() * diff_totr / tot; - real val_iva; - - if (ultimo && (is_detr_diff == 0)) - { - TRectype svidrec(id.curr()); - TLocalisamfile rid(LF_IVADIFF); - const long numreg = _rmoviva->get_long(RMI_NUMREG); - const int numrig = _rmoviva->get_int(RMI_NUMRIG); - const int numpro = id.get_int(ID_NUMPRO); - - rid.put(MOV_NUMREG, numreg); - rid.put(RMI_NUMRIG, numrig); - val_iva = diff_ivar; - - bool pag_found = false; - - int err = rid.read(_isgteq); -#ifdef DBG - if (nr == 29283) - int i = 1; -#endif - TDate orizzonte = fine; // caso tradizionale - - if (iva_cass) + id.zero(); + id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); + id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); + CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp); + id.put("NUMPRO", min(nrigp, 999)); + if (id.read(_isequal, _lock) != NOERR) { - const TDate data_rif = data_maturazione_IVA_diff(_mov->curr()); - if (data_rif < fine) - orizzonte = data_rif; + id.zero(); + 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()); } - for (; err == NOERR && rid.get_long(RMI_NUMREG) == numreg && rid.get_int(RMI_NUMRIG) == numrig; err = rid.next()) + TDate datareg = _mov->get(MOV_DATADOC); + + if (datareg < datafat) + datareg = datafat; + id.put(MOV_DATAREG, datareg); + CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); + id.put("TIPOATT", rmi_tipoatt); + id.put("TIPOIVA", tipomov == 2 ? 2 : 1); + id.put(ID_INDETR, is_detr_diff > 0); + 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 int ridnumpro = rid.get_int(ID_NUMPRO); - const tipo_movimento ridtipopag = (tipo_movimento) rid.get_int(PART_TIPOMOV); + const TPartita& p = arrpart.partita(pagsca); + const TRiga_partite& rp = p.riga(nrigp); - if (ridtipopag != tm_fattura && ridtipopag != tm_nessuno && ridnumpro != numpro) + 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); + if (d < datafat) + d = datafat; */ + + id.put("DATAREGP", datapag); + id.put("ANNOLIQ", datapag.year()); + pagtmp = p.importo_pagsca(pagsca); + pagtmp.normalize(sezpag); + ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine); + } + else + { + // Falso record generato da datainc + 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; + } + + int meseliq = id.get_date("DATAREGP").month(); + if (_freqviva[0] == 'T') + { + const int resto = meseliq % 3; + if (resto > 0) + meseliq += 3 - resto; + } + if (is_detr_diff > 0 || civa.senza_imposta()) // indetraibile + { + const int annoliq = _mov->get_date(MOV_DATAREG).year(); + const int meseliq = _mov->get_date(MOV_DATAREG).month(); + + id.put("ANNOLIQ", annoliq); + id.put("MESELIQ", meseliq); + } + else + id.put("MESELIQ", meseliq); + id.put("SEZIONE", pagtmp.sezione()); + + const long numregp = id.get_long(ID_NUMREGP); + const int numrigp = nrigp; + real val_imp = pagtmp.valore() * diff_totr / tot; + real val_iva; + + if (ultimo && (is_detr_diff == 0)) + { + TRectype svidrec(id.curr()); + TLocalisamfile rid(LF_IVADIFF); + const long numreg = _rmoviva->get_long(RMI_NUMREG); + const int numrig = _rmoviva->get_int(RMI_NUMRIG); + const int numpro = id.get_int(ID_NUMPRO); + + rid.put(MOV_NUMREG, numreg); + rid.put(RMI_NUMRIG, numrig); + val_iva = diff_ivar; + + bool pag_found = false; + + int err = rid.read(_isgteq); + TDate orizzonte = fine; // caso tradizionale + + if (iva_cass) { - const TDate datapag = rid.get_date(ID_DATAREGP); + const TDate data_rif = data_maturazione_IVA_diff(_mov->curr()); + if (data_rif < fine) + orizzonte = data_rif; + } - if (datapag <= orizzonte) + for (; err == NOERR && rid.get_long(RMI_NUMREG) == numreg && rid.get_int(RMI_NUMRIG) == numrig; err = rid.next()) + { + const int ridnumpro = rid.get_int(ID_NUMPRO); + const tipo_movimento ridtipopag = (tipo_movimento)rid.get_int(PART_TIPOMOV); + + if (ridtipopag != tm_fattura && ridtipopag != tm_nessuno && ridnumpro != numpro) { - pag_found = true; - if (sezfat != sezpag) - val_iva -= rid.get_real(RMI_IMPOSTA); - else - val_iva += rid.get_real(RMI_IMPOSTA); + const TDate datapag = rid.get_date(ID_DATAREGP); + + if (datapag <= orizzonte) + { + pag_found = true; + if (sezfat != sezpag) + val_iva -= rid.get_real(RMI_IMPOSTA); + else + val_iva += rid.get_real(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; } - if (!pag_found) + else 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()); - - id.put("IMPORTO", val_imp + val_iva); - id.put(RMI_IMPONIBILE, val_imp); - id.put(RMI_IMPOSTA, val_iva); - if (is_detr_diff == 0 && tipomov_pag >= tm_pagamento) // detraibile - { - if (tipomov == vendita) + id.put("IMPORTO", val_imp + val_iva); + + id.put(RMI_IMPONIBILE, val_imp); + id.put(RMI_IMPOSTA, val_iva); + if (is_detr_diff == 0 && tipomov_pag >= tm_pagamento) // detraibile { - if (iva_cass) - _imposta_inc_cassa_ven += val_iva; - else - _imposta_inc_diff_ven += val_iva; - } - else - { - if (iva_cass) - _imposta_inc_cassa_acq += val_iva; - else - _imposta_inc_diff_acq += val_iva; - } - incdiff_imp += val_imp; - incdiff_iva += val_iva; - } - - int err = id.rewrite(); - - if (err != NOERR) - error_box("Errore %d in aggiornamento file IVADIFF", err); - LOG_IVA_DIFF(id.curr()); - - // 18-06-2014 Aggiorna flag di chiusura IVADIFF solo nei mesi normali, ma lascialo stare se _isannual - const long numreg = _rmoviva->get_long(RMI_NUMREG); - if (numreg > 0 && !_isannual) // Chiude o riapre la partita - { - TISAM_recordset recset("USE IVADIFF\nFROM NUMREG=#NR\nTO NUMREG=#NR"); - recset.set_var("#NR", numreg); - TLocalisamfile& id = recset.cursor()->file(); - for (bool ok = recset.move_first(); ok; ok = recset.move_next()) - { - const bool chiusa = id.get_bool("CHIUSA"); - if (chiusa != ultimo) + if (tipomov == vendita) { - id.put("CHIUSA", ultimo); - id.rewrite(); + if (iva_cass) + _imposta_inc_cassa_ven += val_iva; + else + _imposta_inc_diff_ven += val_iva; + } + else + { + if (iva_cass) + _imposta_inc_cassa_acq += val_iva; + else + _imposta_inc_diff_acq += val_iva; + } + incdiff_imp += val_imp; + incdiff_iva += val_iva; + } + + int err = id.rewrite(); + + if (err != NOERR) + error_box("Errore %d in aggiornamento file IVADIFF", err); + LOG_IVA_DIFF(id.curr()); + + // 18-06-2014 Aggiorna flag di chiusura IVADIFF solo nei mesi normali, ma lascialo stare se _isannual + const long numreg = _rmoviva->get_long(RMI_NUMREG); + if (numreg > 0 && !_isannual) // Chiude o riapre la partita + { + TISAM_recordset recset("USE IVADIFF\nFROM NUMREG=#NR\nTO NUMREG=#NR"); + recset.set_var("#NR", numreg); + TLocalisamfile& id = recset.cursor()->file(); + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + const bool chiusa = id.get_bool("CHIUSA"); + if (chiusa != ultimo) + { + id.put("CHIUSA", ultimo); + id.rewrite(); + } } } } diff --git a/src/cg/cg4303.cpp b/src/cg/cg4303.cpp index 10ce2cdd1..d521bc851 100755 --- a/src/cg/cg4303.cpp +++ b/src/cg/cg4303.cpp @@ -630,8 +630,8 @@ 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)) // rischioso non farlo in tredicesima - return; + // if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) // rischioso non farlo in tredicesima +// return; TFast_isamfile fid(LF_IVADIFF); if (fid.status() != NOERR) @@ -641,38 +641,49 @@ 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 < 13) query << " MESELIQ=" << month; query << "\nTO ANNOLIQ=" << _year; // Dal 18-06-2014 lascia stare l'anno prossimo! - query << " MESELIQ=" << month + (_freqviva == "T" ? 2 : 0); + if (month < 13) + query << " MESELIQ=" << month + (_freqviva == "T" ? 2 : 0); TISAM_recordset id(query); TString msg; - msg.format("Azzeramento IVADIFF %s %s attivitą %s", month <= 12 ? itom(month) : "13ma", (const char*)_year, codatt); + msg.format("Azzeramento fatture IVADIFF %s %s attivitą %s", month <= 12 ? itom(month) : "13ma", (const char*)_year, codatt); TProgress_monitor pi(id.items(), msg, false); TLocalisamfile& file = id.cursor()->file(); for (bool ok = id.move_first(); ok; ok = id.move_next()) { pi.add_status(1); -/* file.zero("ANNOLIQ"); - file.zero("MESELIQ"); - file.zero("IMPORTO"); - file.zero("IMPONIBILE"); - file.zero("IMPOSTA"); - file.zero("DATAREG"); - file.zero("NUMREGP"); - file.zero("NUMRIGP"); - file.zero("DATAREGP"); - file.zero("DATAREGP"); - file.zero("TIPOMOV"); - file.zero("TIPOIVA"); - file.zero("TIPOATT"); - file.zero("TIPODIFF"); - file.zero("CHIUSA"); - file.rewrite(); */ file.remove(); } + query = "USE IVADIFF KEY 3"; // Key 3 = DATAREGP+.... + TDate inizio(1, month == 13 ? 1 : month, atoi(_year)); + query << "\nFROM DATAREGP=" << inizio << ""; + + // Se calcolo gennaio (o marzo trimestrale) azzero tutto l'anno, altrimenti solo il mese selezionato + // if (month > (_freqviva == "T" ? 3 : 1)) + + TDate fine(1, month == 13 ? 12 : month + (_freqviva == "T" ? 2 : 0), atoi(_year)); + fine.set_end_month(); + + query << "\nTO DATAREGP=" << fine; // Dal 18-06-2014 lascia stare l'anno prossimo! +// query << "\nANNOLIQ=" << eotime.year(); +// query << "\nMESELIQ=" << eotime.month(); + + id.set(query); + id.requery(); + + msg.format("Azzeramento pagamenti IVADIFF %s %s attivitą %s", month <= 12 ? itom(month) : "13ma", (const char*)_year, codatt); + TProgress_monitor pi2(id.items(), msg, false); + TLocalisamfile& file2 = id.cursor()->file(); + for (bool ok = id.move_first(); ok; ok = id.move_next()) + { + pi2.add_status(1); + file2.remove(); + } + } diff --git a/src/cg/cg4304.cpp b/src/cg/cg4304.cpp index cf9b76a0c..f373c6d94 100755 --- a/src/cg/cg4304.cpp +++ b/src/cg/cg4304.cpp @@ -2545,9 +2545,10 @@ void TLiquidazione_app::set_iva_succ(int& rw) { TString query; - query << "USE IVADIFF KEY 2" - << "\nFROM ANNOLIQ=" << _year - << "\nTO ANNOLIQ=" << _year; + query << "USE IVADIFF KEY 2"; + if (!_end_cassa) + query << "\nFROM ANNOLIQ=" << _year; + query << "\nTO ANNOLIQ=" << _year; TISAM_recordset id(query); const TDate da_datareg(1, 1, atoi(_year)); const TDate a_datareg(31, 12, atoi(_year)); @@ -2594,8 +2595,11 @@ void TLiquidazione_app::set_iva_succ(int& rw) ven_xcas.normalize('D'); acq_xcas.normalize('A'); acq_diff.normalize('A'); - set_row(rw++,FR("@11g@bOPERAZIONI EFFETTUATE NELL'ANNO CON IMPOSTA ESIGIBILE NEGLI ANNI SUCCESSIVI@r")); - const real vd = ven_diff.valore(); + if (_end_cassa) + set_row(rw++, FR("@11g@bOPERAZIONI EFFETTUATE FINO ALL'ANNO CON IMPOSTA ESIGIBILE NEGLI ANNI SUCCESSIVI@r")); + else + set_row(rw++, FR("@11g@bOPERAZIONI EFFETTUATE NELL'ANNO CON IMPOSTA ESIGIBILE NEGLI ANNI SUCCESSIVI@r")); + const real vd = ven_diff.valore(); const real vc = ven_xcas.valore(); const real vt = vc+vd; const real ac = acq_xcas.valore(); diff --git a/src/cg/cg4400.cpp b/src/cg/cg4400.cpp index bcb0f2e31..694023e84 100755 --- a/src/cg/cg4400.cpp +++ b/src/cg/cg4400.cpp @@ -1309,21 +1309,8 @@ int TStampa_registri_app::stampa_prospetto_IVA(int rr, int tipo_prosp) if (tipo_prosp == 0) // Stampa il prospetto iniziale per progressivi attuali (periodo) { reset_print(); -/* nel fondo pagina - TString riga(_stampa_width, '-'); - set_row(rr++, riga); - riga = TR("Legenda Tipo Operazione: 1=intra; 2=AF art.34 comma 3"); - if (_auto_intraf) - riga << TR("; 3=intra e AF art.34 comma 3"); - riga << TR("; 4=liquidazione differita"); - if (has_module(ICAUT)) - riga << TR("; 5=IVA per cassa"); - if (_annoIVA >= 2015) - riga << TR("; 6=Scissione pagamenti art.17 ter"); - set_row(rr++, riga); - */ - + if (_st_tot_fin) { set_row(++rr, FR("Tipo documento@54gTotale documento")); @@ -1555,22 +1542,23 @@ void TStampa_registri_app::set_page_tot_reg() //*****deve azzerare i totali progressivi dei riporti e segnalare all'header di non stampare //la riga di riporto - _totali_stampati = true; //siamo in stampa totali, quindi... - _riporti = false; //inoltre non deve stapare riporti mentre stampa i totali - _totdoc_prog = _totimpn_prog = _totimps_prog = ZERO; reset_print(); if (_esiste_riga_iva && _stampa) { - for (int tipo_prosp = 0; tipo_prosp <= 2/* (_tipo_reg == vendita ? 2 : 1) */; tipo_prosp++) + _totali_finali = true; //siamo in stampa totali, quindi... + for (int tipo_prosp = 0; tipo_prosp <= 2/* (_tipo_reg == vendita ? 2 : 1) */; tipo_prosp++) { TRiga_array& arriva = tipo_prosp == 0 ? _tot_iva_array : (tipo_prosp == 1 ? _tot_prec_iva_array : (_tipo_reg == vendita ? _riga_split : _riga_competenza)); if (arriva.empty()) continue; - if (!printed) + if (!printed) { printer().formfeed(); - rr = stampa_prospetto_IVA(rr, 0); // Intestazione prospetto IVA per aliquota + _totali_stampati = true; //siamo in stampa totali, quindi... + _riporti = false; //inoltre non deve stapare riporti mentre stampa i totali + _totdoc_prog = _totimpn_prog = _totimps_prog = ZERO; + rr = stampa_prospetto_IVA(rr, 0); // Intestazione prospetto IVA per aliquota printed = true; } arriva.sort(compare_rows); //viene ordinato per codice iva @@ -1644,7 +1632,6 @@ void TStampa_registri_app::set_page_tot_reg() } } // for } - if (printed) { flush(); @@ -2335,6 +2322,7 @@ bool TStampa_registri_app::preprocess_page(int file, int counter) _auto_intraf = false; printer().formfeed(); _totali_stampati = false; //siamo al cambio periodo (mese/trimestre),quindi resetto il flag di stampa totali + _totali_finali = false; _riporti = false;//e pure quello dei riporti,visto che "A Riporto" non va nella prima pagina del mese } @@ -2466,12 +2454,12 @@ bool TStampa_registri_app::preprocess_page(int file, int counter) set_row(_r, "@31g%6ld", codcf); if (meseliq > 0) set_row(_r, "@62g%02d", meseliq); - set_row(_r, "@65g%2s", (const char*) _tipodoc); + set_row(_r, "@67g%2s", (const char*) _tipodoc); if (fattrit) - set_row(_r, "@67gCD"); + set_row(_r, "@69gD"); else if (fattritind) - set_row(_r, "@67gCI"); + set_row(_r, "@69gI"); if (_stampa_width == 132) set_row(_r, "@70g%r", &totdoc); else @@ -2618,7 +2606,7 @@ bool TStampa_registri_app::preprocess_page(int file, int counter) tipo_op = "5"; } - set_row(_r, "@66g%s", (const char*)tipo_op); + set_row(_r, "@65g%s", (const char*)tipo_op); if (_tipo_stampa == prova) //stampa di prova { @@ -2960,16 +2948,16 @@ void TStampa_registri_app::preprocess_header() { if (_stampa_width == 132) { - set_header(r,FR("@10gNum.@19gDocumento@61gMese@66gT Tipo@102gCod %c@123gT %c@128gNum"), nd1, tipo); + set_header(r,FR("@10gNum.@19gDocumento@61gMese@65gT Tipo@102gCod %c@123gT %c@128gNum"), nd1, tipo); r++; - set_header(r, FR("Data reg. prot.@17gData@24gNumero Codice Ragione sociale/descr. liq.@66gO Doc.@74gTotale doc.@90gImponibile IVA %c@115gImposta@123g%c %c@128gReg"), nd2, cor, type); + set_header(r, FR("Data reg. prot.@17gData@24gNumero Codice Ragione sociale/descr. liq.@65gO Doc.@74gTotale doc.@90gImponibile IVA %c@115gImposta@123g%c %c@128gReg"), nd2, cor, type); r++; } else //stampa a 198 { - set_header(r,FR("Registrazione Documento@61gMese@66gT Tipo@110gCod %c@132g%c T@139gNum."), nd1, tipo, cor); + set_header(r,FR("Registrazione Documento@61gMese@65gT Tipo@110gCod %c@132g%c T@139gNum."), nd1, tipo, cor); r++; - set_header(r, FR("Data Protocollo Data@24gNumero Codice Ragione sociale/descr. liq.@66gO Documento@80gTot.Documento@98gImponibile IVA %c@124gImposta@132g%c %c@139gReg."), nd2, type, cor); + set_header(r, FR("Data Protocollo Data@24gNumero Codice Ragione sociale/descr. liq.@65gO Documento@80gTot.Documento@98gImponibile IVA %c@124gImposta@132g%c %c@139gReg."), nd2, type, cor); r++; } } @@ -2982,7 +2970,7 @@ void TStampa_registri_app::preprocess_header() { if (_stampa_width == 132) { - set_header(r,FR("@10gNum.@19gDocumento@61gMese@66gT Tipo@102gCod %c@123gT %c"), nd1, tipo); + set_header(r,FR("@10gNum.@19gDocumento@61gMese@67gT Tipo@102gCod %c@123gT %c"), nd1, tipo); if (_tipo_stampa == rif_giornale) //stampa definitiva con rif. al libro giornale set_header(r, FR("@128gNum.")); r++; @@ -2994,7 +2982,7 @@ void TStampa_registri_app::preprocess_header() } else //stampa a 198 { - set_header(r,FR("Registrazione Documento@61gMese@66gT Tipo@110gCod %c@132g%c T"), nd1, tipo); + set_header(r,FR("Registrazione Documento@61gMese@67gT Tipo@110gCod %c@132g%c T"), nd1, tipo); if (_tipo_stampa == rif_giornale) set_header(r, FR("@139gNum.")); r++; @@ -3038,6 +3026,7 @@ void TStampa_registri_app::preprocess_header() // set_header(r++, riga); set_header(r++, ""); _totali_stampati = false; + _totali_finali = false; } } } @@ -3045,40 +3034,45 @@ void TStampa_registri_app::preprocess_header() void TStampa_registri_app::preprocess_footer() { reset_footer(); - - if (!_totali_stampati) - { - int r=1; - TString riga(_stampa_width); - riga.fill('-'); - set_footer(r++, riga); + if (!_totali_stampati) + { + int r = 1; + TString riga(_stampa_width); + riga.fill('-'); + set_footer(r++, riga); + if (!_totali_finali) + { + if (_stampa_width == 132) + set_footer(r++, FR("@0gTotale progressivi@70g%15s@85g%15s@107g%15s"), + _totdoc_prog.string(".2"), _totimpn_prog.string(".2"), _totimps_prog.string(".2")); + else + if (_stampa_width == 198) + set_footer(r++, FR("@0gTotale progressivi@78g%15s@93g%15s@116g%15s"), + _totdoc_prog.string(".2"), _totimpn_prog.string(".2"), _totimps_prog.string(".2")); + } + else + { + if (_stampa_width == 132) + set_footer(r++, FR("@0gTotale @70g%15s@85g%15s@107g%15s"), + _totdoc_prog.string(".2"), _totimpn_prog.string(".2"), _totimps_prog.string(".2")); + else + if (_stampa_width == 198) + set_footer(r++, FR("@0gTotale @78g%15s@93g%15s@116g%15s"), + _totdoc_prog.string(".2"), _totimpn_prog.string(".2"), _totimps_prog.string(".2")); + } + set_footer(r++, riga); - if (_stampa_width == 132) - set_footer(r++, FR("@0gTotale progressivi@70g%15s@85g%15s@107g%15s"), - _totdoc_prog.string(".2"), _totimpn_prog.string(".2"), _totimps_prog.string(".2")); - if (_stampa_width == 198) - set_footer(r++, FR("@0gTotale progressivi@78g%15s@93g%15s@116g%15s"), - _totdoc_prog.string(".2"), _totimpn_prog.string(".2"), _totimps_prog.string(".2")); - - set_footer(r++, riga); - -/* TString riga(_stampa_width, '-'); - - set_footer(r++, riga); */ - riga = TR("Legenda Tipo Operazione: 1=intra; 2=AF art.34 comma 3"); - if (_auto_intraf) - riga << TR("; 3=intra e AF art.34 comma 3"); - riga << TR("; 4=liquidazione differita"); - if (has_module(ICAUT)) - riga << TR("; 5=IVA per cassa"); - if (_annoIVA >= 2015) - riga << TR("; 6=Scissione pagamenti art.17 ter"); - set_footer(r++, riga); - - _riporti = true; - } - else - _riporti = false; + riga = TR("Legenda Tipo Operazione: 1=intra; 2=AF art.34 comma 3"); + if (_auto_intraf) + riga << TR("; 3=intra e AF art.34 comma 3"); + riga << TR("; 4=liquidazione differita"); + if (has_module(ICAUT)) + riga << TR("; 5=IVA per cassa"); + if (_annoIVA >= 2015) + riga << TR("; 6=Scissione pagamenti art.17 ter"); + set_footer(r++, riga); + } + _riporti = !_totali_finali; } void TStampa_registri_app::on_page_printed(int file) @@ -3725,7 +3719,8 @@ bool TStampa_registri_app::set_print(int n) _totimps_prog = 0; _rows_left = 69; _riporti = false; - _totali_stampati = false; + _totali_stampati = false; + _totali_finali = false; _annoIVA = m.get_int(ANNO);//in realta' e' l'anno IVA !!! _tipo_stampa = (tipo_stampa) m.get_int(TIPO_STAMPA); diff --git a/src/cg/cg4400.h b/src/cg/cg4400.h index d5e16d42d..7af7659c2 100755 --- a/src/cg/cg4400.h +++ b/src/cg/cg4400.h @@ -50,7 +50,7 @@ class TStampa_registri_app : public TPrintapp bool _rif_vid, _intesta_vidi, _intesta_liq, _stampa_data_reg, _ok_vidi, _stampa_num_pag; bool _sosp_imposta, _riep_liq; bool _st_tot_fin; - bool _riporti, _totali_stampati; + bool _riporti, _totali_stampati, _totali_finali; char _frequiva, _tipo_riepilogativo, _freq_riepilogo; TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg; TDate _u_data; diff --git a/src/cg/f171.trr b/src/cg/f171.trr index 9fe1582d7..c6bbf7455 100644 --- a/src/cg/f171.trr +++ b/src/cg/f171.trr @@ -20,6 +20,7 @@ IMPORTO|4|18|3|Importo IMPONIBILE|4|18|3|Imponibile IMPOSTA|4|18|3|Imposta CHIUSA|8|1|0|Partita chiusa -2 +3 NUMREG+NUMRIG+NUMPRO| ANNOLIQ+MESELIQ+DATAREGP|X +DATAREGP+ANNOLIQ+MESELIQ|X