From 3cdb00e15f5d26505c2d05299cb26bc809d90355 Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Wed, 14 Jul 2021 11:52:08 +0200 Subject: [PATCH] Patch level : 12.0 1066 Files correlati : cg4.exe Commento : Le note di credito per cassa non legate a fattura non venivao liquidate dopo un anno. Interno : Diana Le note di credito 40177 40178 40179 sono state sganciate per liquidarle nma non venivano liquidate ugualmente dopo un anno. --- src/cg/cg4300.h | 2 +- src/cg/cg4301.cpp | 492 ++++++++++++++++++++++++---------------------- src/cg/cg4304.cpp | 32 ++- 3 files changed, 289 insertions(+), 237 deletions(-) diff --git a/src/cg/cg4300.h b/src/cg/cg4300.h index b222b556a..a9b1f7207 100755 --- a/src/cg/cg4300.h +++ b/src/cg/cg4300.h @@ -449,7 +449,7 @@ protected: bool print_inc_diff_log(int& rw, int tipoatt, int tipoiva); bool print_dainc_diff_log(int& rw, int tipoatt, int tipoiva); bool ivadiff_chiusa(const TRectype& mov, const TDate& fine) const; - bool sarebbe_maturata(const TRectype& mov, const TDate& inizio, const TDate& fine) const; + bool sarebbe_maturata(const TRectype& mov, const TDate& inizio, const TDate& fine, tipo_movimento tm2check = tm_fattura) const; public: diff --git a/src/cg/cg4301.cpp b/src/cg/cg4301.cpp index 45c54814c..64121421e 100755 --- a/src/cg/cg4301.cpp +++ b/src/cg/cg4301.cpp @@ -33,16 +33,36 @@ // ----------------------------------------------------- ****************** #ifdef DBG -bool check_nreg(long nreg) -{ - long __nreg[] = { 41221L, 0L }; - int i = 0; - while (__nreg[i] > 0L) - if (__nreg[i++] == nreg) +#define _BREAK(func, par, values) func(par, values); +#define BREAK_DBG _BREAK(check_nreg, __nreg, __values) +#define LOAD_VAL load_values() + +const char * load_values() +{ + TFilename dbgname; + TFilename filename("dbg"); + + filename << main_app().name(); + dbgname.currdir(); + dbgname.add(filename); + dbgname.ext("ini"); + return ini_get_string(dbgname, "Main", "Values"); +} + +bool check_nreg(TToken_string &nreg, TToken_string &values) +{ + long reg = atol(nreg); + + FOR_EACH_TOKEN(values, val) + { + if (atol(val) == reg) return true; + } return false; } +#else +#define BREAK_DBG; #endif bool TLiquidazione_app::recalc_all() @@ -639,6 +659,9 @@ bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) c TRectype& rid = id.curr(); rid.put(MOV_NUMREG, numreg); int err = id.read(_isgteq); + TDate data_maturazione = mov.get_date(MOV_DATADOC); + + data_maturazione.addyear(); if (err == NOERR && rid.get_long(MOV_NUMREG) == numreg) { bool some_pag = false; // Ci sono pagamenti? @@ -646,7 +669,7 @@ bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) c for (; err == NOERR && rid.get_long(MOV_NUMREG) == numreg; err = id.next()) { const TDate data = rid.get("DATAREGP"); - if (data > fine && !_end_cassa) + if ((data > fine || data > data_maturazione) && !_end_cassa) continue; if (data == fine && rid.get_long("NUMREGP") == numreg && !_end_cassa) continue; // Ignora pagamento automatico dopo un anno @@ -660,7 +683,7 @@ bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) c some_pag = true; } } - chiusa = some_pag && tot.valore() < 0.01; + chiusa = some_pag && tot.valore() < 0.01; } return chiusa; } @@ -675,9 +698,11 @@ static TDate data_maturazione_IVA_diff(const TRectype& mov) } // Fattura pił vecchia di un anno a ente NON pubblico -bool TLiquidazione_app::sarebbe_maturata(const TRectype& mov, const TDate& inizio, const TDate& fine) const +bool TLiquidazione_app::sarebbe_maturata(const TRectype& mov, const TDate& inizio, const TDate& fine, tipo_movimento tm2check) const { - if (mov.get_int(MOV_TIPOMOV) != tm_fattura) + const tipo_movimento tm = (tipo_movimento) mov.get_int(MOV_TIPOMOV); + + if (tm != tm2check) return false; const TDate data_lim = data_maturazione_IVA_diff(mov); // Data limite (un anno dopo quella di riferimento) @@ -686,8 +711,9 @@ bool TLiquidazione_app::sarebbe_maturata(const TRectype& mov, const TDate& inizi // La data di riferimento sarebbe quella di consegna della merce, ma non avendola usiamo la data documento. // In assenza della data documento siamo costretti ad usare la data di registrazione - const TDate data_reg = mov.get(MOV_DATAREG); - const TDate data_doc = mov.get(MOV_DATADOC); + TDate data_reg = mov.get(MOV_DATAREG); + TDate data_doc = mov.get(MOV_DATADOC); + const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg; const long giorni = fine - data_rif; @@ -1115,243 +1141,255 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & TProgress_monitor pi(items, pimsg, false); for (; _cur->pos() < items; ++(*_cur)) - { + { if (!pi.set_status(_cur->pos())) break; - + TDate date = _mov->get(MOV_DATAREG); #ifdef DBG - long nr = _mov->get_long(MOV_NUMREG); - - check_nreg(nr); + TToken_string __nreg = _mov->get(MOV_NUMREG); + TToken_string __values = LOAD_VAL; #endif - const int liqmonth = _mov->get_int(MOV_MESELIQ); - const TString4 reg = _mov->get("REG"); - const bool isreg = look_reg(reg); + BREAK_DBG; + const int liqmonth = _mov->get_int(MOV_MESELIQ); + const TString4 reg = _mov->get("REG"); + const bool isreg = look_reg(reg); const TString4 tipodoc = _mov->get(MOV_TIPODOC); const TRegistro & r = cached_registro(_reg->curr()); const bool corrisp = r.corrispettivi(); const tiporeg tipomov = r.tipo_registro(); -// const bool corrisp = _reg->get_bool("B0"); -// const tiporeg tipomov = (tiporeg)_reg->get_int("I0"); // 1=Vendite; 2=Acquisti - tipo_movimento tm = (tipo_movimento) _mov->get_int(MOV_TIPOMOV); - real imp_split_payment; + // const bool corrisp = _reg->get_bool("B0"); + // const tiporeg tipomov = (tiporeg)_reg->get_int("I0"); // 1=Vendite; 2=Acquisti + tipo_movimento tm = (tipo_movimento)_mov->get_int(MOV_TIPOMOV); + real imp_split_payment; if (tm == tm_nessuno) { if (tipodoc == "FV" || tipodoc == "FA") tm = tm_fattura; else - if (tipodoc == "NC") - tm = tm_nota_credito; + if (tipodoc == "NC") + tm = tm_nota_credito; } - if (_isviaggio) + if (_isviaggio) { - if (tipomov == vendita && _mov->get_date(MOV_DATA74TER).ok()) + if (tipomov == vendita && _mov->get_date(MOV_DATA74TER).ok()) date = _mov->get_date(MOV_DATA74TER); if (date.year() != year_int) // Controlla anno di appartenenza, altrimenti is_date_ok potrebbe non funzionare continue; - } - const TRectype& rcs = _cur->curr(LF_CAUSALI); - const TDate datareg = _mov->get_date(MOV_DATAREG); - const TDate datadoc = _mov->get_date(MOV_DATADOC); - const bool fatt_rit_2018 = _mov->get_bool(MOV_RITFATT) && (datareg.year() >= 2018); - const int year_diff = datareg.year() - datadoc.year(); - const bool dataritind = ((tipomov == acquisto) && fatt_rit_2018) && - ((year_diff > 2) || ((year_diff >= 1) && datareg.month() >= 5)); - const bool fattrit = ((tipomov == acquisto) && !dataritind && fatt_rit_2018) && (year_diff >= 1); - const bool fattritind = (atoi(_year) < 2018 && rcs.get_bool(CAU_RITFATT)) || dataritind; - const bool cau_intra = rcs.get_bool(CAU_INTRACOM); + } + const TRectype& rcs = _cur->curr(LF_CAUSALI); + const TDate datareg = _mov->get_date(MOV_DATAREG); + const TDate datadoc = _mov->get_date(MOV_DATADOC); + const bool fatt_rit_2018 = _mov->get_bool(MOV_RITFATT) && (datareg.year() >= 2018); + const int year_diff = datareg.year() - datadoc.year(); + const bool dataritind = ((tipomov == acquisto) && fatt_rit_2018) && + ((year_diff > 2) || ((year_diff >= 1) && datareg.month() >= 5)); + const bool fattrit = ((tipomov == acquisto) && !dataritind && fatt_rit_2018) && (year_diff >= 1); + const bool fattritind = (atoi(_year) < 2018 && rcs.get_bool(CAU_RITFATT)) || dataritind; + const bool cau_intra = rcs.get_bool(CAU_INTRACOM); const bool cau_valintra = rcs.get_bool(CAU_VALINTRA); // Inizio gestione IVA differita - const bool iva_diff = _mov->get_bool(MOV_LIQDIFF) && is_IVA_diff(_mov->curr()); + const bool iva_diff = _mov->get_bool(MOV_LIQDIFF) && is_IVA_diff(_mov->curr()); const bool iva_cass = !iva_diff && !_isviaggio && tm > tm_nessuno && is_IVAxCassa(_mov->curr()); - const bool bIsMovDiff = (iva_diff || iva_cass) && !_recalc_regis; // Aggiunto test su ricalcolo da registri 13-12-2012 - bool dok = is_date_ok(date, month, liqmonth, year_int); - const bool ic = _mov->get_bool(MOV_IVAXCASSA); + const bool bIsMovDiff = (iva_diff || iva_cass) && !_recalc_regis; // Aggiunto test su ricalcolo da registri 13-12-2012 + bool dok = is_date_ok(date, month, liqmonth, year_int); + const bool ic = _mov->get_bool(MOV_IVAXCASSA); TPartite_array arrpart; // Partite interessate TPointer_array pagscatt; // Righe di pagsca interessate -#ifdef DBG - check_nreg(nr); + BREAK_DBG; + if (fattrit) + dok = (atoi(_year) == datadoc.year()) && _month == 13; -#endif - - if (fattrit) - dok = (atoi(_year) == datadoc.year()) && _month == 13; - - if (bIsMovDiff && tm == tm_fattura) - { - 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 - - // Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D' - const char sezfat = tipomov == vendita ? 'D' : 'A'; - const char sezpag = (sezfat=='D') ? 'A' : 'D'; - const long numreg = _mov->get_long(MOV_NUMREG); - 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; - - if (has_sc) + if (bIsMovDiff) + { + if ((tm == tm_fattura) || (tm == tm_nota_credito && !dok)) { - arrpart.add_numreg(numreg); - const TPartita* p = arrpart.first(); - const int row = p ? p->mov2rig(numreg, 0) : 0; + 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 - game_found = row > 0; - if (game_found && !id_chiusa) - { - const TRiga_partite& rp = p->riga(row); + // Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D' + const char sezfat = tipomov == vendita ? 'D' : 'A'; + const char sezpag = (sezfat == 'D') ? 'A' : 'D'; + const long numreg = _mov->get_long(MOV_NUMREG); + 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; + TImporto residuo; - TDate orizzonte = fine; // caso tradizionale - - if (iva_cass) - { - TDate data_rif = data_maturazione_IVA_diff(_mov->curr()); - if (data_rif < fine) - orizzonte = data_rif; - } - - TImporto pg_per, nc_per; - bool regular_month = orizzonte >= date; - bool first_month = regular_month && date > inizio + 1L; -#ifdef DBG - check_nreg(nr); - if (rp.get_long(PART_NREG) == 100616) - 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 - for (int p = pagscatt.last(); p > 0; p--) - { - const TRectype& p0 = (const TRectype&)pagscatt[p]; - const TRectype& p1 = (const TRectype&)pagscatt[p - 1]; - - if (p0.get_int(PAGSCA_NRIGP) == p1.get_int(PAGSCA_NRIGP)) - { - const real imp = p0.get_real(PAGSCA_IMPORTO); - ((TRectype&)p1).add(PAGSCA_IMPORTO, imp); - pagscatt.destroy(p, true); - } - } - } - if (iva_diff || sarebbe_maturata(_mov->curr(), inizio + 1L, fine) || (iva_cass && _end_cassa)) - { - TPointer_array pagscaold; - TImporto pg_tot, nc_tot; - - rp.calcola_pagato_periodo(TDate(0L), orizzonte, pg_tot, nc_tot, &pagscaold); - // Controllo se ci siam persi delle note di credito negli anni scorsi - if (!nc_tot.is_zero() && pagscaold.items() > pagscatt.items()) - { - FOR_EACH_ARRAY_ITEM(pagscaold, i, obj) - { - const TRectype& pagsca = *(const TRectype*)obj; - const int anno = pagsca.get_int(PAGSCA_ANNO); - const int nrigp = pagsca.get_int(PAGSCA_NRIGP); - // Appartiene all'anno scorso? - if (anno < year_int && nrigp < 999) // 9999 on pagsca -> 999 on ivadiff - { - const TPartita& p = arrpart.partita(pagsca); - const TRiga_partite& rp = p.riga(nrigp); - // E' veramente una nota di credito? - if (rp.tipo() == tm_nota_credito) - { - bool found = false; - FOR_EACH_ARRAY_ITEM(pagscatt, j, ps) - { - if (ps == obj) - { - found = true; - break; - } - } - if (!found) - { - TLocalisamfile id(LF_IVADIFF); - id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); - id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); - id.put("NUMPRO", nrigp); - if (id.read(_isequal) != NOERR || id.get_int("ANNOLIQ") == 0) - pagscatt.add(obj); - } - } - } - } - } - - TImporto incasso = pg_tot; - TImporto saldo = rp.importo(false); - - incasso += nc_tot; - saldo += incasso; - saldo.normalize(sezfat); - incasso.normalize(sezpag); - if (saldo.valore() > ZERO) - tot_da_incassare = saldo.valore(); - if (incasso.valore() > ZERO) - tot_incassato = incasso.valore(); - } - else - { - TImporto incasso = pg_per; - - incasso += nc_per; - incasso.normalize(sezpag); - if (incasso.valore() > ZERO) - tot_incassato = incasso.valore(); - } - } - } - if (!game_found) // No saldaconto o partita assente - { - datainc = iva_diff ? _mov->get_date(MOV_DATAINC) : TDate(); - if (datainc.ok() && datainc <= fine) - tot_incassato = _mov->get_real(MOV_TOTDOC); - else + BREAK_DBG; + if (has_sc) { - // Fattura pił vecchia di un anno a ente NON pubblico - if (sarebbe_maturata(_mov->curr(), inizio+1L, fine) || (iva_cass && _end_cassa)) - tot_da_incassare = _mov->get_real(MOV_TOTDOC); - } - } - // Simulo incasso se necessario - if (iva_cass && tot_da_incassare > ZERO) // gią controllato se sarebbe_maturata(_mov->curr(), fine) - { - tot_incassato = tot_da_incassare; + arrpart.add_numreg(numreg); + + const TPartita* p = arrpart.first(); - datainc = data_maturazione_IVA_diff(_mov->curr()); - if (iva_cass && _end_cassa && datainc.year() != atoi(_year)) - datainc = data_end_cassa; + if ((tm == tm_fattura) || (tm == tm_nota_credito && p->prima_fattura() < 0)) // fattura o nota di credito senza fattura + { + const int row = p ? p->mov2rig(numreg, 0) : 0; + + if (p != nullptr) + residuo = p->calcola_saldo_al(false, inizio); + + game_found = row > 0; + if (game_found && !id_chiusa) + { + const TRiga_partite& rp = p->riga(row); + + TDate orizzonte = fine; // caso tradizionale + + if (iva_cass) + { + TDate data_rif = data_maturazione_IVA_diff(_mov->curr()); + if (data_rif < fine) + orizzonte = data_rif; + } + + TImporto pg_per, nc_per; + bool regular_month = orizzonte >= date; + bool first_month = regular_month && date > inizio + 1L; + + BREAK_DBG; #ifdef DBG - else - int i = 1; + if (rp.get_long(PART_NREG) == 100616) + int i = 1; #endif - _mov->put(MOV_DATAINC, datainc); - if (datainc < date) - datainc = date; - } - if (tot_incassato > ZERO && is_date_ok(datainc, month, liqmonth, year_int)) - { - flag_pg_nc = 0x1; - TRectype* pagsca = new TRectype(LF_PAGSCA); - pagsca->put(PAGSCA_TIPOC, _mov->get(MOV_TIPO)); - pagsca->put(PAGSCA_SOTTOCONTO, _mov->get(MOV_CODCF)); - pagsca->put(PAGSCA_ANNO, year_int); - pagsca->put(PAGSCA_NRIGA, 1); - pagsca->put(PAGSCA_NRATA, 1); - pagsca->put(PAGSCA_NRIGP, 9999); - pagsca->put(PAGSCA_IMPORTO, tot_incassato); - pagscatt.add(pagsca); + flag_pg_nc = rp.calcola_pagato_periodo(first_month ? botime : inizio + 1L, orizzonte, pg_per, nc_per, &pagscatt) && regular_month; + residuo += pg_per; + if (pagscatt.items() >= 2) + { + // Fondo tra loro le righe generate dallo stesso pagamento + for (int p = pagscatt.last(); p > 0; p--) + { + const TRectype& p0 = (const TRectype&)pagscatt[p]; + const TRectype& p1 = (const TRectype&)pagscatt[p - 1]; + + if (p0.get_int(PAGSCA_NRIGP) == p1.get_int(PAGSCA_NRIGP)) + { + const real imp = p0.get_real(PAGSCA_IMPORTO); + ((TRectype&)p1).add(PAGSCA_IMPORTO, imp); + pagscatt.destroy(p, true); + } + } + } + if (iva_diff || ((abs(residuo.valore()) > UN_CENTESIMO) && sarebbe_maturata(_mov->curr(), inizio + 1L, fine, tm)) || (iva_cass && _end_cassa)) + { + TPointer_array pagscaold; + TImporto pg_tot, nc_tot; + + rp.calcola_pagato_periodo(TDate(0L), orizzonte, pg_tot, nc_tot, &pagscaold); + // Controllo se ci siam persi delle note di credito negli anni scorsi + if (!nc_tot.is_zero() && pagscaold.items() > pagscatt.items()) + { + FOR_EACH_ARRAY_ITEM(pagscaold, i, obj) + { + const TRectype& pagsca = *(const TRectype*)obj; + const int anno = pagsca.get_int(PAGSCA_ANNO); + const int nrigp = pagsca.get_int(PAGSCA_NRIGP); + // Appartiene all'anno scorso? + if (anno < year_int && nrigp < 999) // 9999 on pagsca -> 999 on ivadiff + { + const TPartita& p = arrpart.partita(pagsca); + const TRiga_partite& rp = p.riga(nrigp); + // E' veramente una nota di credito? + if (rp.tipo() == tm_nota_credito) + { + bool found = false; + FOR_EACH_ARRAY_ITEM(pagscatt, j, ps) + { + if (ps == obj) + { + found = true; + BREAK_DBG; + } + } + if (!found) + { + TLocalisamfile id(LF_IVADIFF); + id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); + id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); + id.put("NUMPRO", nrigp); + if (id.read(_isequal) != NOERR || id.get_int("ANNOLIQ") == 0) + pagscatt.add(obj); + } + } + } + } + } + + TImporto incasso = pg_tot; + TImporto saldo = rp.importo(false); + + incasso += nc_tot; + saldo += incasso; + saldo.normalize(sezfat); + incasso.normalize(sezpag); + if (saldo.valore() > ZERO || (tm == tm_nota_credito && saldo.valore() < ZERO)) + tot_da_incassare = saldo.valore(); + if (incasso.valore() > ZERO || (tm == tm_nota_credito && incasso.valore() < ZERO)) + tot_incassato = incasso.valore(); + } + else + { + TImporto incasso = pg_per; + + incasso += nc_per; + incasso.normalize(sezpag); + if (incasso.valore() > ZERO) + tot_incassato = incasso.valore(); + } + } + } + } + if (!game_found) // No saldaconto o partita assente + { + datainc = iva_diff ? _mov->get_date(MOV_DATAINC) : TDate(); + if (datainc.ok() && datainc <= fine) + tot_incassato = _mov->get_real(MOV_TOTDOC); + else + { + // Fattura pił vecchia di un anno a ente NON pubblico + if ((abs(residuo.valore()) > UN_CENTESIMO || !has_sc) && sarebbe_maturata(_mov->curr(), inizio + 1L, fine, tm) || (iva_cass && _end_cassa)) + tot_da_incassare = _mov->get_real(MOV_TOTDOC); + } + } + // Simulo incasso se necessario + if (iva_cass && ((tot_da_incassare > ZERO) || (tm == tm_nota_credito && tot_da_incassare < ZERO))) // gią controllato se sarebbe_maturata(_mov->curr(), fine) + { + tot_incassato = tot_da_incassare; + + datainc = data_maturazione_IVA_diff(_mov->curr()); + if (iva_cass && _end_cassa && datainc.year() != atoi(_year)) + datainc = data_end_cassa; +#ifdef DBG + else + BREAK_DBG; +#endif + _mov->put(MOV_DATAINC, datainc); + if (datainc < date) + datainc = date; + } + if ((tot_incassato > ZERO || (tm == tm_nota_credito && tot_incassato < ZERO)) && (!has_sc || abs(residuo.valore()) > UN_CENTESIMO) && is_date_ok(datainc, month, liqmonth, year_int)) + { + flag_pg_nc = 0x1; + TRectype* pagsca = new TRectype(LF_PAGSCA); + + pagsca->put(PAGSCA_TIPOC, _mov->get(MOV_TIPO)); + pagsca->put(PAGSCA_SOTTOCONTO, _mov->get(MOV_CODCF)); + pagsca->put(PAGSCA_ANNO, year_int); + pagsca->put(PAGSCA_NRIGA, 1); + pagsca->put(PAGSCA_NRATA, 1); + pagsca->put(PAGSCA_NRIGP, 9999); + pagsca->put(PAGSCA_IMPORTO, tot_incassato); + pagscatt.add(pagsca); + } + if (flag_pg_nc) + dok = true; } - if (flag_pg_nc) - dok = true; } /* * check register present, rmoviva present and date OK @@ -1415,7 +1453,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & TCodiceIVA civa(codiva); #ifdef DBG - check_nreg(nr); + BREAK_DBG; if (tipomov == vendite) int i = 1; if (!bIsMovDiff && (civa.percentuale() == 20)) @@ -1489,13 +1527,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & const bool soloiva = cached_causale(codcaus, atoi(_year)).reg().iva() != nessuna_iva && rmoviva.empty(); const TCli_for & clifo = cached_clifor(LF_MOV, _mov->curr()); const int tp = clifo.alleg(); - // const TRectype& clifo = cache().get_rec(LF_CLIFO, _mov->get(MOV_TIPO), _mov->get(MOV_CODCF)); -// const int tp = clifo.get_int(CLI_ALLEG); - -#ifdef DBG - check_nreg(nr); -#endif + BREAK_DBG; if ((soloiva && (caus_reg.objptr(codcaus) != NULL || tp < 1)) && sosp_imp != vol_affari) @@ -1533,9 +1566,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & const TDate datareg = _mov->get_date(MOV_DATAREG); int mesereg = liqmonth == 0 ? datareg.month() : liqmonth; bool ok = is_month_ok(mesereg, month) && (atoi(_year) == datareg.year()); -#ifdef DBG - check_nreg(nr); -#endif + + BREAK_DBG; if (ok) { datafat = datareg; @@ -1745,10 +1777,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & } } } - if (!pag_found) - val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec()); - else - civa.scorpora(val_imp, TCurrency::get_firm_dec()); + 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 @@ -1886,7 +1918,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & bool bMovDiffToAdd = true; #ifdef DBG - check_nreg(nr); + BREAK_DBG; if (!bIsMovDiff && (civa.percentuale() == 20)) real p = imposta_orig / imponibile_orig * CENTO; #endif @@ -2622,13 +2654,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & if (tipomov == vendita) { #ifndef NDEBUG - if (codiva=="10" && !incdiff_iva.is_zero()) + if (codiva == "10" && !incdiff_iva.is_zero()) { const real oldv = tab->get("R29"); const real newv = oldv + incdiff_iva; const long numreg = _mov->get_long(MOV_NUMREG); __trace("%s %s\t%s\t%s\t%7ld\t%s\t+\t%s\t=\t%s", tab->name(), (const char*)tab->curr().get("CODTAB"), (const char*)reg, (const char*)tipocr_s, - numreg, oldv.stringa(12, 2), incdiff_iva.stringa(12, 2), newv.stringa(12, 2)); + numreg, oldv.stringa(12, 2), incdiff_iva.stringa(12, 2), newv.stringa(12, 2)); } #endif // fatture vendita a liquidazione differita diff --git a/src/cg/cg4304.cpp b/src/cg/cg4304.cpp index 8eb652656..802b36f0a 100755 --- a/src/cg/cg4304.cpp +++ b/src/cg/cg4304.cpp @@ -1570,9 +1570,19 @@ int TLiquidazione_app::print_acc_diff_xcassa(const _DescrItem& d) int i = 9; const real& totiva = d._r0; - const real ivadiff_inc = d._r29; - const real ivadiff_pag = d._r33; + real ivadiff_inc = d._r29; + real ivadiff_pag = d._r33; + if (ivadiff_inc < ZERO) + { + ivadiff_pag -= ivadiff_inc; + ivadiff_inc = ZERO; + } + if (ivadiff_pag < ZERO) + { + ivadiff_inc -= ivadiff_pag; + ivadiff_pag = ZERO; + } real ivaxcas_inc, ivaxcas_pag; if (has_module(ICAUT)) @@ -2310,6 +2320,16 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw) xcasinc_iva_acq -= ind; } } + if (xcasinc_iva < ZERO) + { + xcasinc_iva_acq -= xcasinc_iva; + xcasinc_iva = ZERO; + } + if (xcasinc_iva_acq < ZERO) + { + xcasinc_iva -= xcasinc_iva_acq; + xcasinc_iva_acq = ZERO; + } TToken_string tt(d._s0); real iva_vend(tt.get(0)); @@ -2355,9 +2375,9 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw) if (!_is_visliq) iva_vend += rett_debt; set_row(rw++, FR("@11g@bIVA esigibile@r per il periodo@75g%r"), &iva_vend); - if (!diffinc_iva.is_zero()) + if (diffinc_iva != ZERO) set_row(rw++,FR("@11g a liquidazione differita@75g%r"), &diffinc_iva); - if (!xcasinc_iva.is_zero()) + if (xcasinc_iva != ZERO) set_row(rw++,FR("@11g per cassa@75g%r"), &xcasinc_iva); if (_is_visliq) set_row(rw++,FR("@11g$[r]Rettifiche IVA a debito$[n]@75g%r"), &rett_debt); // Rettifiche modificabili @@ -2367,9 +2387,9 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw) iva_acq += rett_cred; iva_acq -= cred_fattrit; set_row(rw++, FR("@11g@bIVA detraibile@r per il periodo@58g%r"), &iva_acq); - if (!diffinc_iva_acq.is_zero()) + if (diffinc_iva_acq != ZERO) set_row(rw++,FR("@11g a liquidazione differita@58g%r"), &diffinc_iva_acq); - if (!xcasinc_iva_acq.is_zero()) + if (xcasinc_iva_acq != ZERO) set_row(rw++,FR("@11g per cassa@58g%r"), &xcasinc_iva_acq); if (_is_visliq) set_row(rw++,FR("@11g$[r]Rettifiche IVA a credito$[n]@58g%r"), &rett_cred);