diff --git a/cd/test/cg0996.txt b/cd/test/cg0996.txt new file mode 100644 index 000000000..64461d73b --- /dev/null +++ b/cd/test/cg0996.txt @@ -0,0 +1,15 @@ +cg0.exe +cg2.exe +cg4.exe + +- Sistemato enum tipo sospensione (lista progressivi liquidazione stampa registri apertura esercizio iva apertura conti ricostruzione saldi) +- Sistemanto enum tiporeg +- Sistemato enum tiposal ( conferma movimeni provvisori +- Aggiuta cache di registri + +- Sistemato enum tipo sospensione (lista progressivi liquidazione stampa registri apertura esercizio iva apertura conti ricostruzione saldi) +- Sistemanto enum tiporeg +- Sistemato enum tiposal ( conferma movimeni provvisori +- Aggiuta cache di registri +- Una fattura con pgamenti antecedenti alla fattura stessa e flag di liquidazione nel periodo precedente non veniva liquidato ne nel mese + corrente ne nel mese precedente \ No newline at end of file diff --git a/cd/test/cg0996a.ini b/cd/test/cg0996a.ini new file mode 100644 index 000000000..28506ecfc --- /dev/null +++ b/cd/test/cg0996a.ini @@ -0,0 +1,108 @@ +[Main] +Demo=0 + +[cg0] +File(0) = cg0.exe|X +Patch = 0996 +Versione = 21511200 + +[cg2] +File(51) = cg2.exe|X +Patch = 0996 +Versione = 21511200 + +[cg4] +File(84) = cg4.exe|X +Patch = 0996 +Versione = 21511200 + +[cg99] +Kill(0) = bastreg.rep|x +Kill(1) = bastesc.rep|x +Kill(2) = bastzon.rep|x +Kill(3) = bastarb.msk|x +Kill(4) = batbtit.msk|x +Kill(5) = bastcfi.rep|x +Kill(6) = bastivd.msk|x +Kill(7) = bastcve.rep|x +Kill(8) = batbdpn.msk|x +Kill(9) = cg2fppro.msk|x +Kill(10) = bastnot.rep|x +Kill(11) = bastreg.msk|x +Kill(12) = batbnot.msk|x +Kill(13) = bastcco.msk|x +Kill(14) = batbver.msk|x +Kill(15) = batbcve.msk|x +Kill(16) = batbleg.msk|x +Kill(17) = bastcam.rep|x +Kill(18) = batbinl.msk|x +Kill(19) = batbzon.msk|x +Kill(20) = batbind.msk|x +Kill(21) = bastvet.rep|x +Kill(22) = bastpdb.msk|x +Kill(23) = bastvet.msk|x +Kill(24) = bastcco.rep|x +Kill(25) = bastdpn.rep|x +Kill(26) = batbpor.msk|x +Kill(27) = batblbu.msk|x +Kill(28) = bastmsp.msk|x +Kill(29) = bastarb.rep|x +Kill(30) = bastntb.rep|x +Kill(31) = bastzon.msk|x +Kill(32) = bastesc.msk|x +Kill(33) = batbscc.msk|x +Kill(34) = bastscc.rep|x +Kill(35) = batbins.msk|x +Kill(36) = batbpdb.msk|x +Kill(37) = batbivd.msk|x +Kill(38) = batblia.msk|x +Kill(39) = bastver.rep|x +Kill(40) = batbreg.msk|x +Kill(41) = bastntb.msk|x +Kill(42) = batbcco.msk|x +Kill(43) = bastpor.rep|x +Kill(44) = bastver.msk|x +Kill(45) = batbcfi.msk|x +Kill(46) = batbarb.msk|x +Kill(47) = batbndo.msk|x +Kill(48) = bastmsp.rep|x +Kill(49) = bastndo.msk|x +Kill(50) = bastndo.rep|x +Kill(51) = batbmsp.msk|x +Kill(52) = batbtra.msk|x +Kill(53) = bastcve.msk|x +Kill(54) = bastivd.rep|x +Kill(55) = batbcam.msk|x +Kill(56) = bastscc.msk|x +Kill(57) = bastcam.msk|x +Kill(58) = bastnot.msk|x +Kill(59) = batblia.msk|x +Kill(60) = bastpdb.rep|x +Kill(61) = bastleg.msk|x +Kill(62) = batbntb.msk|x +Kill(63) = bastdpn.msk|x +Kill(64) = batbdel.msk|x +Kill(65) = batbesc.msk|x +Kill(66) = bastpor.msk|x +Kill(67) = bastcfi.msk|x +Kill(68) = cgtbcon.msk|x +Kill(69) = bastleg.rep|x +Kill(70) = batbvet.msk|x + +[cg] +Data = 15-09-2020 +Descrizione = Contabilita' Generale +Dischi = 1 +Edit_19 = cg0 -0 +Edit_20 = cg0 -1 +Edit_26 = cg0 -4 +Edit_5 = cg0 -5 +Moduli = ba +OEM = +Patch = 0996 +PostProcess = bainst -0 CG +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/cg0996a1.zip b/cd/test/cg0996a1.zip new file mode 100644 index 000000000..d633bbae3 Binary files /dev/null and b/cd/test/cg0996a1.zip differ diff --git a/cd/test/f90996.txt b/cd/test/f90996.txt new file mode 100644 index 000000000..944b3e2f2 --- /dev/null +++ b/cd/test/f90996.txt @@ -0,0 +1,6 @@ +f90.exe +f90200a.msk + +- Aggiornamento codici per nuovo tracciato in vigore dall'1 Ottobre: TipoDocSDI TipoRitenute Pagamenti. +- Aggiunta possib. di eliminare pacchetti se in errore web o sost anche in definit. +- Ricarimento cat. doc. a ogni giro. \ No newline at end of file diff --git a/cd/test/f90996a.ini b/cd/test/f90996a.ini new file mode 100644 index 000000000..084f33c8d --- /dev/null +++ b/cd/test/f90996a.ini @@ -0,0 +1,20 @@ +[Main] +Demo=0 + +[f90] +File(0) = f90.exe|X +File(5) = f90200a.msk|X +Patch = 0996 +Versione = 21511200 + +[f9] +Data = 16-09-2020 +Descrizione = Archiviazione Sostitutiva +Dischi = 1 +Moduli = f9 +OEM = +Patch = 996 +PostProcess = +PreProcess = +Versione = 21511200 + diff --git a/cd/test/f90996a1.zip b/cd/test/f90996a1.zip new file mode 100644 index 000000000..56b61e02d Binary files /dev/null and b/cd/test/f90996a1.zip differ diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index f5daa718e..b8f10d6aa 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -410,15 +410,15 @@ void TMonitor_mask::delete_pack(const bool all) const TString query; const TString& codsoc(F9CONF.get_ambiente()); query << "BEGIN\n" - " DECLARE @stato CHAR(2);\n\n" - " SELECT @stato = " DRD_STATO "\n" + " DECLARE @flag_prov CHAR(1), @stato CHAR(2);\n\n" + " SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n" " FROM " F9_DRD "\n" " WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n" - " IF(@stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "') BEGIN\n" + " IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "' OR @stato = '" D_WA_ERR "' OR @stato = '" D_ERR_SOS "') BEGIN\n" " DELETE FROM " F9_ERR " WHERE " ERR_CODSOC " = '" << codsoc << "' AND " ERR_IDESTR " = '" << id_estr << "';\n" " END\n" " ELSE BEGIN\n" - " SELECT @stato AS STATO;\n" + " SELECT @flag_prov AS FLAG, @stato AS STATO;\n" " END\n" "END"; fp_db().sq_set_exec(query); @@ -428,7 +428,7 @@ void TMonitor_mask::delete_pack(const bool all) const " SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n" " FROM " F9_DRD "\n" " WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n" - " IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "') BEGIN\n" + " IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "' OR @stato = '" D_WA_ERR "' OR @stato = '" D_ERR_SOS "') BEGIN\n" " DELETE FROM " F9_DRD " WHERE " DRD_CODSOC " = '" << codsoc << "' AND " DRD_ID_EST " = '" << id_estr << "';\n" " DELETE FROM " F9_IVA " WHERE " IVA_CODSOC " = '" << codsoc << "' AND " IVA_IDLAN " = '" << id_estr << "';\n" " DELETE FROM " F9_MOVESTR " WHERE " MES_CODSOC " = '" << codsoc << "' AND " MES_IDESTR " = '" << id_estr << "';\n" @@ -436,9 +436,10 @@ void TMonitor_mask::delete_pack(const bool all) const " SELECT @flag_prov AS FLAG, @stato AS STATO;\n" "END"; fp_db().sq_set_exec(query); - if (fp_db().sq_get("FLAG") != "P" && fp_db().sq_get("STATO") != "02" && !all) + TString stato = fp_db().sq_get("STATO"); + if (fp_db().sq_get("FLAG") != "P" && stato != D_GEST_ERR && stato != IN_DIAGN && stato != D_WA_ERR && stato != D_ERR_SOS && !all) { - warning_box("E' possibile eliminare solo un'estrazione provvisoria o in stato di errore diagnostica gestionale."); + warning_box("E' possibile eliminare solo un'estrazione provvisoria\no in uno degli stati di errore se definitiva (02 - 05 - 08)."); return; } fp_db().sq_commit(); diff --git a/src/f9/f90200.cpp b/src/f9/f90200.cpp index 17ddbba8c..95a35dc3e 100644 --- a/src/f9/f90200.cpp +++ b/src/f9/f90200.cpp @@ -37,7 +37,7 @@ public: class TF9_categorie_doc_msk : public TAutomask { std::shared_ptr _annessi_sheet; - TRecord_categorie _categorie_doc; + TCategorie_doc _categorie_doc; bool _mod_precaricate; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; diff --git a/src/f9/f90300.cpp b/src/f9/f90300.cpp index d50f4ec7d..740db4c0c 100644 --- a/src/f9/f90300.cpp +++ b/src/f9/f90300.cpp @@ -27,7 +27,6 @@ class TImport_msk : public TAutomask { friend class TGestione_doc_cartacei_f9_msk; - std::shared_ptr _catdocs; map> _annessi; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; @@ -36,7 +35,7 @@ class TImport_msk : public TAutomask static bool catannpadre_handler(TMask_field& field, KEY key); static bool ok_handler(TMask_field& field, KEY key); - const char* select_catdoc(); + static const char* select_catdoc(); public: void set_fields(const TString& impaddress, const TString& impnumreg, bool isannesso = false, const TString& catannpadre = "", @@ -59,7 +58,7 @@ bool TImport_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) case F_IMPNUMREG: if(e == fe_modify) { - const std::shared_ptr c = categorie_doc().mov2cat(o.get_int()); + const std::shared_ptr c = TCategorie_doc().mov2cat(o.get_int()); if (c != nullptr) { set(F_CATANNPADRE, c->catdoc); @@ -82,12 +81,13 @@ bool TImport_msk::catdocann_handler(TMask_field& field, KEY key) static const char* msg_notexist = "Non esistono tipologie di annessi per questa categoria documentale."; static const char* msg_inspadre = "Questa registrazione non e' riconosciuta in nessuna categoria documentale.\nImpossible inserire un annesso.\n" "Si prega di inserire prima una cat. documentale che comprenda questo tipo di registrazione\naggiungendo anche eventuali tipologie di annessi."; + TCategorie_doc cd; TImport_msk& msk = (TImport_msk&)field.mask(); if (key == K_TAB && field.dirty() && field.full()) { if (msk.get(F_CATANNPADRE).full()) { - const TString_array names_ann = categorie_doc().get_array_ann(msk.get(F_CATANNPADRE)); + const TString_array names_ann = cd.get_array_ann(msk.get(F_CATANNPADRE)); if (names_ann.items() > 0) { bool ok = false; @@ -115,7 +115,7 @@ bool TImport_msk::catdocann_handler(TMask_field& field, KEY key) { if (msk.get(F_CATANNPADRE).full()) { - TArray_sheet* annessi = categorie_doc().get_sheet_ann(msk.get(F_CATANNPADRE)).get(); + TArray_sheet* annessi = cd.get_sheet_ann(msk.get(F_CATANNPADRE)).get(); if (annessi && annessi->items() > 0) { @@ -123,7 +123,7 @@ bool TImport_msk::catdocann_handler(TMask_field& field, KEY key) { const char* s = annessi->row(annessi->selected()).get(0); TCategorie_doc::annesso annesso; - if (categorie_doc().get_ann(s, annesso)) + if (cd.get_ann(s, annesso)) { if (annesso.opcee != "RC") msk.set(F_CATDOCANN, annesso.catdoc); @@ -145,10 +145,11 @@ bool TImport_msk::catdocann_handler(TMask_field& field, KEY key) bool TImport_msk::catannpadre_handler(TMask_field& field, KEY key) { + TCategorie_doc cd; TImport_msk& msk = (TImport_msk&)field.mask(); if (key == K_TAB && field.dirty() && field.full()) { - std::set& name_cats = categorie_doc().get_name_catdocs(); + std::set& name_cats = cd.get_name_catdocs(); const bool ok = name_cats.find(field.get()) != name_cats.end(); if (!ok) @@ -159,10 +160,9 @@ bool TImport_msk::catannpadre_handler(TMask_field& field, KEY key) } if (key == K_F9) { - field.set(msk.select_catdoc()); + field.set(select_catdoc()); msk.set(F_CATDOCANN, ""); } - return true; } @@ -174,10 +174,9 @@ bool TImport_msk::ok_handler(TMask_field& field, KEY key) const char* TImport_msk::select_catdoc() { - if(_catdocs == nullptr) - _catdocs = categorie_doc().get_sheet_catdocs(); - if (_catdocs->run() == K_ENTER) - return _catdocs->row().get(0); + auto catdocs = TCategorie_doc().get_sheet_catdocs(); + if (catdocs->run() == K_ENTER) + return catdocs->row().get(0); return ""; } diff --git a/src/f9/f90400.cpp b/src/f9/f90400.cpp index 110175654..5293722fd 100644 --- a/src/f9/f90400.cpp +++ b/src/f9/f90400.cpp @@ -200,7 +200,8 @@ void TF9_test_app::main_loop() //TEstrazione::fill_id(clifo, statopaiv, idfisc, paiv, codfisc); TCategorie_doc::annesso annesso; - if(categorie_doc().get_ann("INTREVC", annesso)) + TCategorie_doc categorie_doc; + if(categorie_doc.get_ann("INTREVC", annesso)) TEstrazione::make_prosp_int_revc(153480, annesso); TString s = TEstrai_mask::get_numdoc_exp_fp(105396); diff --git a/src/f9/f9lib.h b/src/f9/f9lib.h index 5926994fb..c72ee653b 100644 --- a/src/f9/f9lib.h +++ b/src/f9/f9lib.h @@ -220,14 +220,6 @@ public: TRecord_categorie(type table = catdocs); }; -inline TCategorie_doc& categorie_doc() -{ - static unique_ptr cd = nullptr; - if (cd == nullptr) - cd = make_unique(); - return *cd; -} - struct movimento_t { enum err_mov @@ -330,13 +322,13 @@ struct movimento_t class TEstrazione : public TObject { - drd _head; - vector _movs; - ofstream* _error_sql; - bool _escluso; - const TString _descr; - bool _has_cartacei; - TFilename _spotlite_path; + drd _head; + vector _movs; + unique_ptr _error_sql; + bool _escluso; + const TString _descr; + bool _has_cartacei; + TFilename _spotlite_path; /** Aggiorna stato estrazione. Utilizzato ad esempio dopo la diagnostica per riportare * il nuovo stato sul db. @@ -388,6 +380,8 @@ private: static bool pura_iva(const TLocalisamfile& mov); void write_errorsql_log(const TString& query) const; + static TCategorie_doc& categorie_doc(bool reload = false); + public: void add_mov(const movimento_t& movimento); diff --git a/src/f9/f9lib01.cpp b/src/f9/f9lib01.cpp index 56967230f..030dffb5b 100644 --- a/src/f9/f9lib01.cpp +++ b/src/f9/f9lib01.cpp @@ -10,7 +10,6 @@ #include "mov.h" #include "../fp/fplib.h" #include "annessif9.h" -#include "modaut.h" #include "dongle.h" #include "execp.h" @@ -61,8 +60,7 @@ void TEstrazione::check_annessi(movimento_t& mov_i, const int numreg) bool TEstrazione::check_annessi_oblig(const TString& catdoc, const int numreg, _Out_ TToken_string& ann_nexist) { ann_nexist.destroy(-1); - TCategorie_doc categorie; - const TString_array lista_cat_annessi = categorie.get_array_ann(catdoc); // Lista cat annessi + const TString_array lista_cat_annessi = categorie_doc().get_array_ann(catdoc); // Lista cat annessi TF9_doccart file_cart; std::vector list_file_ann; // Lista file annessi file_cart.mov2listann_vect(TString() << numreg, list_file_ann); @@ -70,7 +68,7 @@ bool TEstrazione::check_annessi_oblig(const TString& catdoc, const int numreg, _ FOR_EACH_ARRAY_ITEM(lista_cat_annessi, nr, ann) { TCategorie_doc::annesso annesso; - const bool ok_cat = categorie.get_ann(*(TToken_string*)ann, annesso); + const bool ok_cat = categorie_doc().get_ann(*(TToken_string*)ann, annesso); // Ignoro il flag obbligatorio per il prospetto di reverse charge if (ok_cat && annesso.obblig && annesso.opcee != "RC") { @@ -586,6 +584,15 @@ void TEstrazione::write_errorsql_log(const TString& query) const #endif } +TCategorie_doc& TEstrazione::categorie_doc(const bool reload) +{ + static TCategorie_doc* _doc_cats = nullptr; + if (_doc_cats == nullptr) + _doc_cats = new TCategorie_doc(); + else if (reload) + _doc_cats->reload(); + return *_doc_cats; +} // Public methods ///////////////////////////////////////////////////////////////////////////////////////////// @@ -615,6 +622,7 @@ bool TEstrazione::update_drd_stato_estr() const const char* TEstrazione::diagnostica_mov() { + categorie_doc(true); bool ok = true; const TipoIVA tipo = get_tipoiva(); _stats.total = _movs.size(); @@ -995,12 +1003,11 @@ bool TEstrazione::estrazione_iva(bool escluso) if(!it->annessi.empty()) { vector& ann = it->annessi; - TCategorie_doc cd; - size_t i = 0; - size_t size = ann.size(); + size_t i = 0; + const size_t size = ann.size(); iva_query.add(IVA_CLASAN1, ann[i].catdocann, 10); iva_query.add(IVA_NOMF1, ann[i++].filename, 100); - // HOW DID MY LIFE COME TO THIS?.... + // HOW DID MY LIFE COME TO THIS?... if (size > i) { iva_query.add(IVA_CLASAN2, ann[i].catdocann, 10); @@ -1115,7 +1122,7 @@ TEstrazione::TEstrazione(const TString& ambiente, const bool flag_prov, const ch _head.addr_cart = addrcart; _escluso = escluso; - _error_sql = new ofstream; + _error_sql = make_unique(); _error_sql->open("f9_TEstrazione_error_sql.txt"); // Svuoto log. diff --git a/src/include/annessif9.h b/src/include/annessif9.h index 76eb4744b..955704adb 100644 --- a/src/include/annessif9.h +++ b/src/include/annessif9.h @@ -1,11 +1,11 @@ #ifndef __ANNESSIF9_H_ #define __ANNESSIF9_H_ -#define F9A_NUMREG "NUMREG" -#define F9A_FILENAME "FILENAME" -#define F9A_CATDOCPAD "CATDOCPAD" -#define F9A_CATDOCANN "CATDOCANN" -#define F9A_LOADDATE "LOADDATE" -#define F9A_USER "USER" +#define F9A_NUMREG "NUMREG" +#define F9A_FILENAME "FILENAME" +#define F9A_CATDOCPAD "CATDOCPAD" +#define F9A_CATDOCANN "CATDOCANN" +#define F9A_LOADDATE "LOADDATE" +#define F9A_USER "USER" #endif // __ANNESSIF9_H_