From 18659b828722e7ec036f3b35663084f86e1daa9f Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Thu, 17 Sep 2020 17:09:13 +0200 Subject: [PATCH] Patch level : 12.0 996 Files correlati : tf0.exe fp0.exe fp0100a.msk fp0300a.msk tf0100a.msk tf0400a.msk Commento : Adeguamento nuovi codici fatturazione elettronica. --- src/fp/fp0100.cpp | 6 ++- src/fp/fp0100a.h | 1 + src/fp/fp0100a.uml | 10 +++++ src/fp/fp0300a.uml | 13 ++++++- src/fp/fplib.h | 2 + src/fp/fplib02.cpp | 11 ++++++ src/tf/tf0100.cpp | 95 ++++++++++++++++++++++++++++++---------------- src/tf/tf0100a.uml | 52 +++++++++++++++++++------ src/tf/tf0100b.h | 7 +++- src/tf/tf0200.cpp | 3 +- src/tf/tf0400.cpp | 1 + src/tf/tf0400a.uml | 52 +++++++++++++++++++------ 12 files changed, 190 insertions(+), 63 deletions(-) diff --git a/src/fp/fp0100.cpp b/src/fp/fp0100.cpp index 478d60745..74a62837b 100644 --- a/src/fp/fp0100.cpp +++ b/src/fp/fp0100.cpp @@ -49,6 +49,7 @@ void TParametri_mask::save_all() const fp_settings().set_no_sconti_fatt(get_bool(F_CHECK_NO_SCONTI)); fp_settings().set_no_export_pronto(get_bool(F_CHECK_NO_EXPORT_PRONTO)); fp_settings().set_data_start_fatt(get_date(F_STARTFATTEL)); + fp_settings().set_data_start_new_fatt(get_date(F_STARTNEWFATT)); TFP_righe_custom().save_sheet(sfield(F_FORMPERS)); TFP_nota_piede_f().save_sheet(sfield(F_NPFSHEET)); } @@ -229,8 +230,11 @@ bool TParametri_mask::on_field_event(TOperable_field& o, TField_event e, long jo break; case F_STARTFATTEL: if (e == fe_init) - field(F_STARTFATTEL).set(fp_settings().get_data_start_fatt()); + o.set(fp_settings().get_data_start_fatt()); break; + case F_STARTNEWFATT: + if (e == fe_init) + o.set(TFP_settings::get_date_start_new_fatt()); default: break; } diff --git a/src/fp/fp0100a.h b/src/fp/fp0100a.h index cfec5c6dc..de9b78115 100644 --- a/src/fp/fp0100a.h +++ b/src/fp/fp0100a.h @@ -12,6 +12,7 @@ #define F_CHECK_NO_SCONTI 212 #define F_CHECK_NO_EXPORT_PRONTO 213 #define F_STARTFATTEL 214 +#define F_STARTNEWFATT 215 #define F_SETPATCH 301 #define F_ENPTYTABLE 302 diff --git a/src/fp/fp0100a.uml b/src/fp/fp0100a.uml index bd4ab4367..e2b2671ee 100644 --- a/src/fp/fp0100a.uml +++ b/src/fp/fp0100a.uml @@ -97,6 +97,16 @@ BEGIN PROMPT 2 17 "Data inizio (default 01-01-2019)" END +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 19 "@BInizio nuovo tracciato Fatturazione Elettronica" +END + +DATE F_STARTNEWFATT +BEGIN + PROMPT 2 20 "Data inizio (default 01-01-2021)" +END + ENDPAGE PAGE "Configurazione (2) " 0 2 0 0 diff --git a/src/fp/fp0300a.uml b/src/fp/fp0300a.uml index 0de0c2824..6fa9025cb 100644 --- a/src/fp/fp0300a.uml +++ b/src/fp/fp0300a.uml @@ -245,7 +245,7 @@ BEGIN FLAGS "D" END -LIST S_CODSDI 35 +LIST S_CODSDI 40 BEGIN PROMPT 41 2 "Tipo Doc SDI" ITEM "TD01|TD01 Fattura" @@ -254,7 +254,18 @@ BEGIN ITEM "TD04|TD04 Nota di credito" ITEM "TD05|TD05 Nota di debito" ITEM "TD06|TD06 Parcella" + ITEM "TD16|TD16 Integraz. fatt. rev.ch. interno" + ITEM "TD17|TD17 Integ./autof. acq. servizi estero" + ITEM "TD18|TD18 Integ. acq. beni intracomunitari" + ITEM "TD19|TD19 Integ./autof. acq. beni ex art. 17" ITEM "TD20|TD20 Autofattura" + ITEM "TD21|TD21 Autofattura per splafonamento" + ITEM "TD22|TD22 Estrazione beni da Deposito IVA" + ITEM "TD23|TD23 Estr. beni Deposito IVA vers. IVA" + ITEM "TD24|TD24 Fatt. differita art.21 c.4 lett. a" + ITEM "TD25|TD25 Fatt. differita art. 21 c.4 per.3 b" + ITEM "TD26|TD26 Cess. beni ammort./passaggi interni" + ITEM "TD27|TD27 Fatt. autoconsumo/cessioni gratuite" END NUMBER S_NDOC 7 diff --git a/src/fp/fplib.h b/src/fp/fplib.h index a6cebcfa7..5f9b6085b 100644 --- a/src/fp/fplib.h +++ b/src/fp/fplib.h @@ -156,6 +156,7 @@ public: bool get_no_export_pronto() const; // Get tipidoc per NotaPiedeFattura const TString get_npf_tipodoc(int indx) const; + static TDate get_date_start_new_fatt(); // Setters void set_db_indirizzo(const TString& ind) const; @@ -176,6 +177,7 @@ public: void set_no_sconti_fatt(const bool no_sconti_fatt) const; void set_no_export_pronto(const bool no_export_pronto) const; void set_data_start_fatt(const char* date) const; + void set_data_start_new_fatt(const char* date) const; void set_npf(const char * tipodoc, const char* msg, int idx) const; void set_npf_tipodoc(const TString& tipodoc, int indx) const; diff --git a/src/fp/fplib02.cpp b/src/fp/fplib02.cpp index a55251b71..e51d15df0 100644 --- a/src/fp/fplib02.cpp +++ b/src/fp/fplib02.cpp @@ -25,6 +25,7 @@ #define FP_CHECK_NO_SCONTI_FATT "noscontifatt" #define FP_CHECK_NO_EXPORT_PRONTO "noexportpronto" #define FP_DATASTARTFATT "datastartfatt" +#define FP_DATASTARTNEWFATT "startnewtracciato" // Sheet fp0300 #define FP_SLD_COD "SLD" @@ -145,6 +146,11 @@ const TString TFP_settings::get_npf_tipodoc(int indx) const return ini_get_string(FILE_CONFIG, FILE_SECTION, name, "FERMATIostrega", indx); } +TDate TFP_settings::get_date_start_new_fatt() +{ + return ini_get_date(CONFIG_DITTA, FILE_SECTION, FP_DATASTARTNEWFATT, "01-01-2021"); +} + const bool TFP_settings::get_no_sconti_fatt() const { return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, false); @@ -252,6 +258,11 @@ void TFP_settings::set_data_start_fatt(const char* date) const ini_set_string(FILE_CONFIG, FILE_SECTION, FP_DATASTARTFATT, date); } +void TFP_settings::set_data_start_new_fatt(const char* date) const +{ + ini_set_string(CONFIG_DITTA, FILE_SECTION, FP_DATASTARTNEWFATT, date); +} + void TFP_settings::remove_para_ini(int idx) { ini_remove(FILE_CONFIG, FILE_SECTION, FP_MAIL, idx); diff --git a/src/tf/tf0100.cpp b/src/tf/tf0100.cpp index 0bd7185ce..72e138dce 100644 --- a/src/tf/tf0100.cpp +++ b/src/tf/tf0100.cpp @@ -1,7 +1,6 @@ #include "tf0.h" -#include "tf0100b.h" - -#include "cglib03.h" // is_split_payment() +#include "tf0100b.h" +#include "../fp/fplib.h" /* Utilities & Main App */ @@ -92,37 +91,37 @@ int get_tipo_doc(const TString id) } // Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) -static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str) -{ - SLIST_ELT e = NULL; - for (e = xvt_slist_get_first(list); e; e = xvt_slist_get_next(list, e)) - { - const char* val = xvt_slist_get(list, e, NULL); - if (xvt_str_compare_ignoring_case(str, val) == 0) - break; - } - return e; -} +//static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str) +//{ +// SLIST_ELT e = NULL; +// for (e = xvt_slist_get_first(list); e; e = xvt_slist_get_next(list, e)) +// { +// const char* val = xvt_slist_get(list, e, NULL); +// if (xvt_str_compare_ignoring_case(str, val) == 0) +// break; +// } +// return e; +//} // Aggiorna il file dst se pił vecchio di src (Potrebbe diventare una funzione di XVT.h) -bool xvt_fsys_fupdate(const char* src, const char* dst) -{ - bool ok = false; - if (xvt_fsys_file_exists(src)) - { - const long tsrc = xvt_fsys_file_attr(src, XVT_FILE_ATTR_MTIME); - if (tsrc > 0) - { - long tdst = 0; - if (xvt_fsys_file_exists(dst)) - tdst = xvt_fsys_file_attr(dst, XVT_FILE_ATTR_MTIME); - if (tsrc > tdst) - ok = xvt_fsys_fcopy(src, dst) != 0; - } - } - - return ok; -} +//bool xvt_fsys_fupdate(const char* src, const char* dst) +//{ +// bool ok = false; +// if (xvt_fsys_file_exists(src)) +// { +// const long tsrc = xvt_fsys_file_attr(src, XVT_FILE_ATTR_MTIME); +// if (tsrc > 0) +// { +// long tdst = 0; +// if (xvt_fsys_file_exists(dst)) +// tdst = xvt_fsys_file_attr(dst, XVT_FILE_ATTR_MTIME); +// if (tsrc > tdst) +// ok = xvt_fsys_fcopy(src, dst) != 0; +// } +// } +// +// return ok; +//} /* Ritorno il tipo di documento * TD01: Fattura @@ -784,7 +783,13 @@ bool TTrFa_app::send(TTrFa_mask* msk) // Mi carico i miei dati TSheet_field& sheet = msk->sfield(F_RIGHE); // Booleano per appendere i record nel db - + + if(!check_new_codici_fp(sheet)) + { + warning_box("Attenzione sono stati selezionati dei codici tipo documento\no natura iva non validi per questo periodo."); + return false; + } + /*********************************************************************************************** * Esporto ***********************************************************************************************/ @@ -1546,6 +1551,30 @@ void TTrFa_app::main_loop() } } +bool TTrFa_app::is_new_tipodoc(const TString& tipodoc) +{ + return tipodoc != "TD01" && tipodoc != "TD04" && tipodoc != "TD05" && tipodoc != "TD07" && tipodoc != "TD08" && tipodoc != "TD10" && tipodoc != "TD11"; +} + +bool TTrFa_app::is_new_natura(const TString& natura) +{ + return natura.full() && natura != "N1" && natura != "N2" && natura != "N3" && natura != "N4" && natura != "N5" && natura != "N6" && natura != "N7"; +} + +bool TTrFa_app::check_new_codici_fp(const TSheet_field& sheet) +{ + const TDate start = fp_settings().get_date_start_new_fatt(); + FOR_EACH_SHEET_ROW(sheet, nr, row) + { + const TString tipodoc = row->get(cid2index(A_TIPODOCAE)); + const TDate datadoc = row->get(cid2index(A_DATADOC)); + const TString natura = row->get(cid2index(A_NATURA)); + if ((is_new_tipodoc(tipodoc) || is_new_natura(natura)) && datadoc < start) + return false; + } + return true; +} + bool TTrFa_app::destroy() { xvt_sql_close(_db); _db = NULL; diff --git a/src/tf/tf0100a.uml b/src/tf/tf0100a.uml index 973f38748..c5a5517e9 100644 --- a/src/tf/tf0100a.uml +++ b/src/tf/tf0100a.uml @@ -412,12 +412,23 @@ LIST A_TIPODOCAE 6 BEGIN PROMPT 23 6 "Tipo doc. " ITEM "TD01|TD01" + ITEM "TD02|TD02" + ITEM "TD03|TD03" ITEM "TD04|TD04" ITEM "TD05|TD05" - ITEM "TD07|TD07" - ITEM "TD08|TD08" - ITEM "TD10|TD10" - ITEM "TD11|TD11" + ITEM "TD06|TD06" + ITEM "TD16|TD16" + ITEM "TD17|TD17" + ITEM "TD18|TD18" + ITEM "TD19|TD19" + ITEM "TD20|TD20" + ITEM "TD21|TD21" + ITEM "TD22|TD22" + ITEM "TD23|TD23" + ITEM "TD24|TD24" + ITEM "TD25|TD25" + ITEM "TD26|TD26" + ITEM "TD27|TD27" ITEM "ERR0|Errore" END @@ -436,17 +447,34 @@ BEGIN CHEKTYPE REQUIRED END -LIST A_NATURA 1 35 +LIST A_NATURA 4 81 BEGIN PROMPT 20 7 "Natura IVA" ITEM "|IVA ordinaria" - ITEM "N1|N1 - IVA esclusa ex art 15" - ITEM "N2|N2 - IVA non soggetta" - ITEM "N3|N3 - IVA non imponibile" - ITEM "N4|N4 - IVA esente" - ITEM "N5|N5 - IVA in regime del margine" - ITEM "N6|N6 - IVA in reverse charge" - ITEM "N7|N7 - IVA assolta in altro stato U3" + ITEM "N1|N1 IVA esclusa ex art 15" + ITEM "N2|N2 IVA non soggetta (DEPRECATA)" + ITEM "N2.1|N2.1 Non soggette ad IVA ai sensi degli artt. da 7 a 7-septies del DPR 633/72" + ITEM "N2.2|N2.2 Non soggette - altri casi" + ITEM "N3|N3 IVA non imponibile (DEPRECATA)" + ITEM "N3.1|N3.1 Non impon. - esportazioni" + ITEM "N3.2|N3.2 Non impon. - cessioni intracomunitarie" + ITEM "N3.3|N3.3 Non impon. - cessioni verso San Marino" + ITEM "N3.4|N3.4 Non impon. - operazioni assimilate alle cessioni all'esportazione" + ITEM "N3.5|N3.5 Non impon. - a seguito di dichiarazioni d'intento" + ITEM "N3.6|N3.6 Non impon. - altre operazioni che non concorrono alla formazioni del plafond" + ITEM "N4|N4 IVA esente" + ITEM "N5|N5 IVA in regime del margine" + ITEM "N6|N6 IVA in reverse charge (DEPRECATA)" + ITEM "N6.1|N6.1 Invers. cont. - cessione di rottami e altri materiali di recupero" + ITEM "N6.2|N6.2 Invers. cont. - cessione di oro e argento puro" + ITEM "N6.3|N6.3 Invers. cont. - subappalto nel settore edile" + ITEM "N6.4|N6.4 Invers. cont. - cessione di fabbricati" + ITEM "N6.5|N6.5 Invers. cont. - cessione di telefoni cellulari" + ITEM "N6.6|N6.6 Invers. cont. - cessione di prodotti elettronici" + ITEM "N6.7|N6.7 Invers. cont. - prestazioni comparto edile e settori connessi" + ITEM "N6.8|N6.8 Invers. cont. - operazioni settore energetico" + ITEM "N6.9|N6.9 Invers. cont. - altri casi" + ITEM "N7|N7 IVA assolta in altro stato U3" END STRING A_ALIQUOTA 4 diff --git a/src/tf/tf0100b.h b/src/tf/tf0100b.h index 31a338bc8..fce4a46c5 100644 --- a/src/tf/tf0100b.h +++ b/src/tf/tf0100b.h @@ -105,9 +105,9 @@ TString get_tipo_doc(int id); int get_tipo_doc(TString id); // Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) -static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str); +//static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str); // Aggiorna il file dst se pił vecchio di src (Potrebbe diventare una funzione di XVT.h) -bool xvt_fsys_fupdate(const char* src, const char* dst); +//bool xvt_fsys_fupdate(const char* src, const char* dst); // Decodifica il tipo di documento per il trasferimento fatture const char * decod_tipo(TToken_string* strarr); // Salvo un singolo record @@ -313,6 +313,9 @@ public: bool create() override; bool destroy() override; void main_loop() override; + static bool is_new_tipodoc(const TString& tipodoc); + static bool is_new_natura(const TString& natura); + static bool check_new_codici_fp(const TSheet_field& sheet); bool send(TTrFa_mask* msk); TTrFa_app() : _log(nullptr) {} diff --git a/src/tf/tf0200.cpp b/src/tf/tf0200.cpp index 2a8f5609e..69ef738ce 100644 --- a/src/tf/tf0200.cpp +++ b/src/tf/tf0200.cpp @@ -10,8 +10,7 @@ #include // TExternal_app #include // dongle() -#include "..\cg\cglib01.h" -#include "..\cg\cglib03.h" +#include "..\cg\cglib.h" #include #include diff --git a/src/tf/tf0400.cpp b/src/tf/tf0400.cpp index bfaf85156..dbe5dd080 100644 --- a/src/tf/tf0400.cpp +++ b/src/tf/tf0400.cpp @@ -8,6 +8,7 @@ #include // cache() #include "../fe/felib.h" // TAnagrafica #include "modaut.h" +#include typedef enum{ def_sfield = F_RIGHE, // Sheetfield di default (tutte le colonne) diff --git a/src/tf/tf0400a.uml b/src/tf/tf0400a.uml index b0ae91c6d..c62f76e39 100644 --- a/src/tf/tf0400a.uml +++ b/src/tf/tf0400a.uml @@ -274,12 +274,23 @@ LIST A_TIPODOCAE 6 BEGIN PROMPT 23 6 "Tipo doc. " ITEM "TD01|TD01" + ITEM "TD02|TD02" + ITEM "TD03|TD03" ITEM "TD04|TD04" ITEM "TD05|TD05" - ITEM "TD07|TD07" - ITEM "TD08|TD08" - ITEM "TD10|TD10" - ITEM "TD11|TD11" + ITEM "TD06|TD06" + ITEM "TD16|TD16" + ITEM "TD17|TD17" + ITEM "TD18|TD18" + ITEM "TD19|TD19" + ITEM "TD20|TD20" + ITEM "TD21|TD21" + ITEM "TD22|TD22" + ITEM "TD23|TD23" + ITEM "TD24|TD24" + ITEM "TD25|TD25" + ITEM "TD26|TD26" + ITEM "TD27|TD27" ITEM "ERR0|Errore" END @@ -298,17 +309,34 @@ BEGIN CHEKTYPE REQUIRED END -LIST A_NATURA 1 35 +LIST A_NATURA 4 81 BEGIN PROMPT 20 7 "Natura IVA" ITEM "|IVA ordinaria" - ITEM "N1|N1 - IVA esclusa ex art 15" - ITEM "N2|N2 - IVA non soggetta" - ITEM "N3|N3 - IVA non imponibile" - ITEM "N4|N4 - IVA esente" - ITEM "N5|N5 - IVA in regime del margine" - ITEM "N6|N6 - IVA in reverse charge" - ITEM "N7|N7 - IVA assolta in altro stato U3" + ITEM "N1|N1 IVA esclusa ex art 15" + ITEM "N2|N2 IVA non soggetta (DEPRECATA)" + ITEM "N2.1|N2.1 Non soggette ad IVA ai sensi degli artt. da 7 a 7-septies del DPR 633/72" + ITEM "N2.2|N2.2 Non soggette - altri casi" + ITEM "N3|N3 IVA non imponibile (DEPRECATA)" + ITEM "N3.1|N3.1 Non impon. - esportazioni" + ITEM "N3.2|N3.2 Non impon. - cessioni intracomunitarie" + ITEM "N3.3|N3.3 Non impon. - cessioni verso San Marino" + ITEM "N3.4|N3.4 Non impon. - operazioni assimilate alle cessioni all'esportazione" + ITEM "N3.5|N3.5 Non impon. - a seguito di dichiarazioni d'intento" + ITEM "N3.6|N3.6 Non impon. - altre operazioni che non concorrono alla formazioni del plafond" + ITEM "N4|N4 IVA esente" + ITEM "N5|N5 IVA in regime del margine" + ITEM "N6|N6 IVA in reverse charge (DEPRECATA)" + ITEM "N6.1|N6.1 Invers. cont. - cessione di rottami e altri materiali di recupero" + ITEM "N6.2|N6.2 Invers. cont. - cessione di oro e argento puro" + ITEM "N6.3|N6.3 Invers. cont. - subappalto nel settore edile" + ITEM "N6.4|N6.4 Invers. cont. - cessione di fabbricati" + ITEM "N6.5|N6.5 Invers. cont. - cessione di telefoni cellulari" + ITEM "N6.6|N6.6 Invers. cont. - cessione di prodotti elettronici" + ITEM "N6.7|N6.7 Invers. cont. - prestazioni comparto edile e settori connessi" + ITEM "N6.8|N6.8 Invers. cont. - operazioni settore energetico" + ITEM "N6.9|N6.9 Invers. cont. - altri casi" + ITEM "N7|N7 IVA assolta in altro stato U3" END STRING A_ALIQUOTA 4