From d750fa72d539bfc538fe369d8c8ac91b2e723d99 Mon Sep 17 00:00:00 2001 From: bonazzi Date: Sun, 7 May 2017 01:48:56 +0000 Subject: [PATCH] Patch level : 12.0 384 Files correlati : cg4.exe Corretto in funzionamento per fatture per cassa pagate in anticipo e calcolo pro-rata per le fatture per cassa. git-svn-id: svn://10.65.10.50/branches/R_10_00@23783 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/cg/cg4300.h | 2 ++ src/cg/cg4301.cpp | 53 +++++++++++++++++++++++++++++++++++++---------- src/cg/cg4304.cpp | 35 +++++++++++++++++-------------- 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/src/cg/cg4300.h b/src/cg/cg4300.h index c313b1f8d..36ee611a1 100755 --- a/src/cg/cg4300.h +++ b/src/cg/cg4300.h @@ -169,6 +169,7 @@ public: _r10, _r11, _r12, _r13, _r14, _r15, _r16, _r17, _r18, _r19, _r20, _r21, _r22, _r23, _r24, _r25, _r26, _r27, _r28, _r29, _r30, _r31, _r32, _r33; + real _ra0, _ra1, _ra2, _ra3, _ra4 ,_ra5, _ra6, _ra7, _ra8; TArray _arr; TDate _d0, _d1; real _diff_ven_ap, _diff_ven_ap_iva, _diff_acq_ap, _diff_acq_ap_iva; @@ -305,6 +306,7 @@ class TLiquidazione_app : public TPrint_application bool _definitiva; 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; diff --git a/src/cg/cg4301.cpp b/src/cg/cg4301.cpp index 792baa848..9297de89b 100755 --- a/src/cg/cg4301.cpp +++ b/src/cg/cg4301.cpp @@ -233,6 +233,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) // stato effettuato per scelta dello stronzo commercialista. // Gestione IVA differita, da non confondere con _isdifferita + _isdiff = ini_get_bool(CONFIG_DITTA, "cg", "GesLiqDiff"); TAssoc_array caus_reg; @@ -249,6 +250,11 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) } } + _imposta_inc_diff_ven = ZERO; + _imposta_inc_cassa_ven = ZERO; + _imposta_inc_diff_acq = ZERO; + _imposta_inc_cassa_acq = ZERO; + _isdiffacc = is_acconto_differito(); // Gestione differimento acconto IVA _isdifferita = _isdiffacc; @@ -467,7 +473,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) // Se siamo in annuale e se non e' stato indicato di ricalcolare (stampa liquidazione chiamata // dalla stampa registri) non riscrivere i risultati delle liquidazioni, - if ((is_month_ok_strict(month) && _month != 13 && _recalc != never) || _is_interactive /*month == 13*/ ) + if ((is_month_ok_strict(month) && _month != 13 && _recalc != never) || (_is_interactive && _recalc != never)) write_liq(month, atts); // occorre poterla chiamare altre volte con mesi diversi @@ -1178,7 +1184,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & #ifdef DBG const long nr = _mov->get_long(MOV_NUMREG); - if (nr == 25144 || nr == 25145) + if (nr == 92218) int i = 1 ; #endif @@ -1194,7 +1200,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & const long numreg = _mov->get_long(MOV_NUMREG); TDate datainc; real tot_incassato, tot_da_incassare; - int flag_pg_nc = 0; // Ci sono pagamenti (0x1) e/o note di credito(0x2) ? + int flag_pg_nc = 0; // Ci sono pagamenti (0x1) e/o note di credito(0x2) ? bool game_found = false; if (has_sc) @@ -1216,8 +1222,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & orizzonte = data_rif; } - TImporto pg_per, nc_per; - flag_pg_nc = rp.calcola_pagato_periodo(inizio+1L, orizzonte, pg_per, nc_per, &pagscatt); + 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; if (pagscatt.items() >= 2) { // Fondo tra loro le righe generate dallo stesso pagamento @@ -1311,6 +1319,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & datainc = data_maturazione_IVA_diff(_mov->curr()); _mov->put(MOV_DATAINC, datainc); + if (datainc < date) + datainc = date; } if (tot_incassato > ZERO && is_date_ok(datainc, month, liqmonth, year_int)) { @@ -1592,10 +1602,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & if (resto > 0) meseliq += 3-resto; } - if (is_detr_diff > 0) // indetraibile + if (is_detr_diff > 0 || civa.senza_imposta()) // indetraibile { - const int annoliq = id.get_date(MOV_DATAREG).year(); - const int meseliq = id.get_date(MOV_DATAREG).month(); + 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); @@ -1649,9 +1659,26 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & 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) // detraibile + { + if (tipomov == vendita) + { + 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; + } + } if (tipomov_pag >= tm_pagamento && is_detr_diff == 0) { incdiff_imp += val_imp; @@ -4205,7 +4232,11 @@ void TLiquidazione_app::write_liq(int month, const char* codatts) _lam->put("R1", iva_acq); _lam->put("R2", cred_prec); _lam->put("R3", debt_precd); - + _lam->put("R5", _imposta_inc_diff_ven); + _lam->put("R6", _imposta_inc_cassa_ven); + _lam->put("R7", _imposta_inc_diff_acq); + _lam->put("R8", _imposta_inc_cassa_acq); + lim.put("B0",""); // AWFUL! se siamo in annuale, occorre arrotondare alle 1000 lire @@ -4315,7 +4346,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts) lim.put("R30", fdiff_imp_acq); lim.put("R31", fdiff_iva_acq); lim.put("R32", fdiffinc_imp_acq); - lim.put("R33", fdiffinc_iva_acq); + lim.put("R21", fdiffinc_iva_acq); // ciapa } put_lim(lim); diff --git a/src/cg/cg4304.cpp b/src/cg/cg4304.cpp index 4ec6d2b75..f4cb9f39f 100755 --- a/src/cg/cg4304.cpp +++ b/src/cg/cg4304.cpp @@ -1249,8 +1249,11 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem* tt.add(_lam->get("R2")); // Credito precedente tt.add(_lam->get("R3")); // Debito precedente tt.add(_lam->get("R4")); - d->_s0 = tt; + d->_ra5 = _lam->get_real("R5"); + d->_ra6 = _lam->get_real("R6"); + d->_ra7 = _lam->get_real("R7"); + d->_ra8 = _lam->get_real("R8"); d->_s1 = lim.get("R11"); // Acc. dec. d->_s2 = lim.get("R12"); d->_s3 = lim.get("R13"); @@ -1682,7 +1685,7 @@ int TLiquidazione_app::calc_inc_diff(int tipoiva, real& imponibile_diff, real& i { int m = atoi(ip.get("CODTAB").as_string().mid(10)); real p = ip.get("R12").as_real(); - if (m == _month && p != ZERO) + if (m == _month && (p > ZERO && p <= CENTO)) perc_prorata = p; } @@ -2506,25 +2509,25 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw) const real& versamenti = d._r8; const real& vers_int = d._r9; - real diffinc_iva = d._r29; - real diffinc_iva_acq = d._r33; - real xcasinc_iva = ZERO; - real xcasinc_iva_acq = ZERO; + real diffinc_iva = d._ra5; + real diffinc_iva_acq = d._ra7; + real xcasinc_iva = d._ra6; + real xcasinc_iva_acq = d._ra8; if (has_module(ICAUT) && (!diffinc_iva.is_zero() || !diffinc_iva_acq.is_zero())) { real dimp, diva, ximp, xiva; - if (!diffinc_iva.is_zero() && calc_inc_diff(1, dimp, diva, ximp, xiva)) - { - diffinc_iva = diva; - xcasinc_iva = xiva; - } - if (!diffinc_iva_acq.is_zero() && calc_inc_diff(2, dimp, diva, ximp, xiva)) - { - diffinc_iva_acq = diva; - xcasinc_iva_acq = xiva; - } +// if (!diffinc_iva.is_zero() && calc_inc_diff(1, dimp, diva, ximp, xiva)) +// { +// diffinc_iva = _imposta_inc_diff_ven; +// xcasinc_iva = _imposta_inc_cassa_ven; +// } +// if (!diffinc_iva_acq.is_zero() && calc_inc_diff(2, dimp, diva, ximp, xiva)) +// { +// diffinc_iva_acq = _imposta_inc_diff_acq; +// xcasinc_iva_acq = _imposta_inc_cassa_acq; +// } } TToken_string tt(d._s0);