From 9c263a4e72818171429a2780c3d963d93c809608 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Thu, 23 May 2019 12:32:06 +0200 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2012.?= =?UTF-8?q?0=20796=20Files=20correlati=20=20=20=20=20:=20tf0200=20Commento?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20:=20-=20Aggiunta=20possibil?= =?UTF-8?q?it=C3=A0=20di=20registrare=20liquidazione=20IVA=20periodica=20u?= =?UTF-8?q?tilizzando=20o=20no=20la=20data=20di=20competenza.=20CON=20SCEL?= =?UTF-8?q?TA=20DIVERSA=20PER=20ATTIVE=20E=20PASSIVE=20[Fix=20#34]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tf/tf0200.cpp | 157 +++++++++++++++++++++++++++------------------ src/tf/tf0200a.h | 3 +- src/tf/tf0200a.uml | 9 ++- 3 files changed, 105 insertions(+), 64 deletions(-) diff --git a/src/tf/tf0200.cpp b/src/tf/tf0200.cpp index 6a7a5b9f7..076d0b4e5 100644 --- a/src/tf/tf0200.cpp +++ b/src/tf/tf0200.cpp @@ -21,8 +21,10 @@ #define CAMPI_CON_BOOLEAN F_TOTOPATT #define CONF_MODULO "tf" -#define LAST_DATACOMP "LASTCOMP" -#define FLAG_MOD "FLDATACOMPMOD" +#define LAST_DATACOMP_ATT "LASTCOMPATT" +#define LAST_DATACOMP_PAS "LASTCOMPPAS" +#define FLAG_ATT_MOD "ATTDATACOMPMOD" +#define FLAG_PAS_MOD "PASDATACOMPMOD" #define STOP "$$" // ComLiqPerIva: Comunicazione Liquidazioni Periodiche IVA @@ -213,7 +215,8 @@ void calcola_credito_prec(real& creprec, real& creaprec, bool mensile, int anno, class TCom_liq_per_iva_msk : public TAutomask { - bool _last_elab; // Flag per controllare se hanno cambiato il tipo di elaborazione (data competenza) + bool _last_elab_att; // Flags per controllare se hanno cambiato il tipo di elaborazione (data competenza) + bool _last_elab_pas; protected: bool _mensile; // Aggiunta questa variabile per specificare se è stato impostato un tipo di liquidazione. @@ -221,32 +224,46 @@ protected: bool _init_liq; TRectype _true_data; - void write_datacomp_mod(bool enabled); + void write_datacomp_mod(bool enabled, bool attive); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); void extractinator(); void check_old_value(int field, const real& val); public: TCom_liq_per_iva_msk() : TAutomask("tf0200a"), _true_data(LF_IVALIQ), _init_liq(false) { - _last_elab = ini_get_bool(CONFIG_DITTA, CONF_MODULO, LAST_DATACOMP, false); + _last_elab_att = ini_get_bool(CONFIG_DITTA, CONF_MODULO, LAST_DATACOMP_ATT, false); + _last_elab_pas = ini_get_bool(CONFIG_DITTA, CONF_MODULO, LAST_DATACOMP_PAS, false); first_focus(F_ANNO); } void save_gen(); }; -void TCom_liq_per_iva_msk::write_datacomp_mod(const bool enabled) +void TCom_liq_per_iva_msk::write_datacomp_mod(const bool enabled, bool attive) { int count = 0; - TString line = ini_get_string(CONFIG_DITTA, CONF_MODULO, FLAG_MOD, STOP, count); - for (; line != STOP; line = ini_get_string(CONFIG_DITTA, CONF_MODULO, FLAG_MOD, STOP, ++count)) { } - + TString line; const TDate today(TODAY); TString mod; mod << user() << (enabled ? "|E|" : "|D|") << today.month() << "." << today.day(); - ini_set_string(CONFIG_DITTA, CONF_MODULO, FLAG_MOD, mod, count); + if (attive) + { + line = ini_get_string(CONFIG_DITTA, CONF_MODULO, FLAG_ATT_MOD, STOP, count); + for (; line != STOP; line = ini_get_string(CONFIG_DITTA, CONF_MODULO, FLAG_ATT_MOD, STOP, ++count)) {} + ini_set_string(CONFIG_DITTA, CONF_MODULO, FLAG_ATT_MOD, mod, count); - ini_set_bool(CONFIG_DITTA, CONF_MODULO, LAST_DATACOMP, enabled); - _last_elab = enabled; + ini_set_bool(CONFIG_DITTA, CONF_MODULO, LAST_DATACOMP_ATT, enabled); + _last_elab_att = enabled; + } + else + { + line = ini_get_string(CONFIG_DITTA, CONF_MODULO, FLAG_PAS_MOD, STOP, count); + for (; line != STOP; line = ini_get_string(CONFIG_DITTA, CONF_MODULO, FLAG_PAS_MOD, STOP, ++count)) {} + ini_set_string(CONFIG_DITTA, CONF_MODULO, FLAG_PAS_MOD, mod, count); + + ini_set_bool(CONFIG_DITTA, CONF_MODULO, LAST_DATACOMP_PAS, enabled); + _last_elab_pas = enabled; + } + } bool TCom_liq_per_iva_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) @@ -319,20 +336,28 @@ bool TCom_liq_per_iva_msk::on_field_event(TOperable_field& o, TField_event e, lo } } break; - case F_DATA_COMP: + case F_ATT_COMP: if(e == fe_init) - set(F_DATA_COMP, _last_elab ? "X" : " "); + set(F_ATT_COMP, _last_elab_att ? "X" : " "); else if(e == fe_modify) - warning_box("Attenzione la modifica di questo valore comporta un diverso calcolo dei righi VP2 VP3. L'utente è pregato di controllarne la correttezza.\nSi consiglia di ricalcolare e rispedire tutti periodi dell'anno"); + warning_box("Attenzione la modifica di questo valore comporta un diverso calcolo dei rigo VP2. L'utente è pregato di controllarne la correttezza.\nSi consiglia di ricalcolare e rispedire tutti periodi dell'anno"); + break; + case F_PAS_COMP: + if (e == fe_init) + set(F_PAS_COMP, _last_elab_pas ? "X" : " "); + else if (e == fe_modify) + warning_box("Attenzione la modifica di questo valore comporta un diverso calcolo dei rigo VP3. L'utente è pregato di controllarne la correttezza.\nSi consiglia di ricalcolare e rispedire tutti periodi dell'anno"); break; case DLG_SAVEREC: if(e == fe_button) { - bool data_comp = get_bool(F_DATA_COMP); - if (data_comp != _last_elab) - { - write_datacomp_mod(data_comp); - } + bool att_dt_comp = get_bool(F_ATT_COMP); + bool pas_dt_comp = get_bool(F_PAS_COMP); + if (att_dt_comp != _last_elab_att) + write_datacomp_mod(att_dt_comp, true); + if (pas_dt_comp != _last_elab_pas) + write_datacomp_mod(pas_dt_comp, false); + } if(e != fe_init && !_true_data.empty()) _true_data.write_rewrite(TLocalisamfile(LF_IVALIQ)); @@ -456,11 +481,12 @@ void TCom_liq_per_iva_msk::extractinator() // Per gli amici GTFO real ivaver = ZERO; real ivaverc = ZERO; - const bool elab_dt_comp = get_bool(F_DATA_COMP); + const bool att_dt_comp = get_bool(F_ATT_COMP); + const bool pas_dt_comp = get_bool(F_PAS_COMP); for(; start <= end; start++) { TDate data_da(1, start, anno); - TDate data_a(1, start + (elab_dt_comp ? 1 : 0), anno); data_a.set_end_month(); + TDate data_a(1, start + 1, anno); data_a.set_end_month(); bool has_ixc = gestione_IVAxCassa(data_da); /**************************************************************************************************************** @@ -488,59 +514,68 @@ void TCom_liq_per_iva_msk::extractinator() // Per gli amici GTFO cur_iva.set_var("#DADATAREG", data_da); cur_iva.set_var("#ADATAREG", data_a); - for(bool ok = cur_iva.move_first(); ok; ok = cur_iva.move_next()) + for (bool ok = cur_iva.move_first(); ok; ok = cur_iva.move_next()) { TString totat, totpas, i; // Controllo che sia un movimento con codice non "non soggetto" TCodiceIVA codiva(cur_iva.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string()); - if(codiva.tipo() == "NS") continue; + if (codiva.tipo() == "NS") continue; // Controllo che la registrazione sia di del mese che mi interessa o con flag "liquidazione periodo precedente" const int month_reg = cur_iva.get("23." MOV_DATAREG).as_date().month(); const int month_liq = cur_iva.get("23." MOV_MESELIQ).as_int(); // month_liq viene valorizzato solo se è del mese precedente o sempre? Nei record vecchi ovviamente sarà a zero ma adesso che ci mette? - if (elab_dt_comp && ((month_reg == start && (month_liq == 0 || month_liq == month_reg)) || start == month_liq) - || !elab_dt_comp) + // Prendo il tipo di registro + TRegistro reg(cur_iva.get(FIELD_NAME(LF_MOV, MOV_REG)).as_string(), anno); + int tiporeg = reg.tipo(); + bool is_corrispettivo = reg.corrispettivi(); + + // Prendiamo l'imponibile + real imp = cur_iva.get("25.IMPONIBILE").as_real(); + real imposta = cur_iva.get("25.IMPOSTA").as_real(); + + if (tiporeg == iva_acquisti) { - // Prendo il tipo di registro - TRegistro reg(cur_iva.get(FIELD_NAME(LF_MOV, MOV_REG)).as_string(), anno); - int tiporeg = reg.tipo(); - bool is_corrispettivo = reg.corrispettivi(); + if ((!att_dt_comp || !((month_reg == start && (month_liq == 0 || month_liq == month_reg)) || start == month_liq)) + && (att_dt_comp || cur_iva.get(LF_MOV, MOV_DATAREG).as_date().month() == data_a.month())) + continue; + } + else + { + if ((!pas_dt_comp || !((month_reg == start && (month_liq == 0 || month_liq == month_reg)) || start == month_liq)) + && (pas_dt_comp || cur_iva.get(LF_MOV, MOV_DATAREG).as_date().month() == data_a.month())) + continue; + } - // Prendiamo l'imponibile - real imp = cur_iva.get("25.IMPONIBILE").as_real(); - real imposta = cur_iva.get("25.IMPOSTA").as_real(); - - // Se è un movimento IvaXCassa o LiqDiff - if (has_ixc && (cur_iva.get("23.IVAXCASSA").as_bool() || cur_iva.get("23.LIQDIFF").as_bool())) + // Se è un movimento IvaXCassa o LiqDiff + if (has_ixc && (cur_iva.get("23.IVAXCASSA").as_bool() || cur_iva.get("23.LIQDIFF").as_bool())) + { + if (tiporeg == iva_vendite) + totopattxc += imp; + else + totoppasxc += imp; + } + else + { + if (tiporeg == iva_vendite) { - if (tiporeg == iva_vendite) - totopattxc += imp; - else - totoppasxc += imp; + // Controllo il reverse charge, non va calcolato nel totale delle operazioni attive! + // Se non ha una riga di movimento non lo sommo + TString key_rc = cur_iva.get("23.NUMREG").as_string(); key_rc << "|1"; + if (!cache().get(LF_RMOV, key_rc).empty()) + { + // Controllo se è un corrispettivo non scorporato (imponibile e iva assieme) + if (is_corrispettivo && codiva.percentuale() > ZERO && imposta == ZERO) + { + // Nell'imponibile è presente il totale fattura, devo calcolare l'imposta e sottrarla + // Es iva 22% => imp : 122 = x : 100 + codiva.scorpora(imp); + } + totopatt += imp; + } } else - { - if (tiporeg == iva_vendite) - { - // Controllo il reverse charge, non va calcolato nel totale delle operazioni attive! - // Se non ha una riga di movimento non lo sommo - TString key_rc = cur_iva.get("23.NUMREG").as_string(); key_rc << "|1"; - if (!cache().get(LF_RMOV, key_rc).empty()) - { - // Controllo se è un corrispettivo non scorporato (imponibile e iva assieme) - if (is_corrispettivo && codiva.percentuale() > ZERO && imposta == ZERO) - { - // Nell'imponibile è presente il totale fattura, devo calcolare l'imposta e sottrarla - // Es iva 22% => imp : 122 = x : 100 - codiva.scorpora(imp); - } - totopatt += imp; - } - } - else - totoppas += imp; - } + totoppas += imp; } } diff --git a/src/tf/tf0200a.h b/src/tf/tf0200a.h index 8e23747e6..75faff186 100644 --- a/src/tf/tf0200a.h +++ b/src/tf/tf0200a.h @@ -33,7 +33,8 @@ #define F_IMPNOVER 133 #define F_VEREFF 134 #define F_GENERATA 135 -#define F_DATA_COMP 136 +#define F_ATT_COMP 136 +#define F_PAS_COMP 137 /* Booleani controllo modifiche (+50 rispetto al campo a cui si riferisce) */ diff --git a/src/tf/tf0200a.uml b/src/tf/tf0200a.uml index 2be59e80e..8e9dafbe0 100644 --- a/src/tf/tf0200a.uml +++ b/src/tf/tf0200a.uml @@ -24,9 +24,14 @@ ENDPAGE PAGE "Impostazioni" 0 2 0 0 -BOOLEAN F_DATA_COMP +BOOLEAN F_ATT_COMP BEGIN - PROMPT 1 0 "@BElaborare per data competenza" + PROMPT 1 0 "@BAttive: Elaborare per data competenza" +END + +BOOLEAN F_PAS_COMP +BEGIN + PROMPT 50 0 "@BPassive: Elaborare per data competenza" END NUMBER F_CODDITTA 5