diff --git a/src/f1/f1lib.cpp b/src/f1/f1lib.cpp index 0525543a0..ea595f7bf 100644 --- a/src/f1/f1lib.cpp +++ b/src/f1/f1lib.cpp @@ -5,10 +5,10 @@ #include "cg2102.h" #include "execp.h" #include "cfven.h" -#include "../fp/fp0400a.h" #include "reputils.h" -#include "../fp/fplib.h" #include "causali.h" +#include "clifo.h" +#include "../fp/fplib.h" ////////////////////////////////////////////////////////// // TFppro @@ -18,9 +18,7 @@ TFppro& fppro_db() { static TFppro* fppro = nullptr; if (fppro == nullptr) - { fppro = new TFppro(); - } return *fppro; } @@ -37,14 +35,14 @@ bool TFppro::guess_the_doc(const TLocalisamfile& mov) "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n"; - fp_db().sq_set_exec(query); + _db->sq_set_exec(query); - const keys_s keys = { fp_db().sq_get("KEYPRGINVIO"), fp_db().sq_get("KEYHEADERFATT"), fp_db().sq_get("KEYBODYFATT") }; - const TDate data = fp_db().sq_get_date("DATA"); - const TString numdoc = fp_db().sq_get("NUMDOC"); - const real imptotdoc(fp_db().sq_get("IMPTOTDOC")); - const TString4 statopiva = fp_db().sq_get("STATOPIVA"); - const TString piva = fp_db().sq_get("PIVA"); + const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") }; + const TDate data = _db->sq_get_date("DATA"); + const TString numdoc = _db->sq_get("NUMDOC"); + const real imptotdoc(_db->sq_get("IMPTOTDOC")); + const TString4 statopiva = _db->sq_get("STATOPIVA"); + const TString piva = _db->sq_get("PIVA"); // Prendo il fornitore del mov per controllare la p.iva TLocalisamfile clifo(LF_CLIFO); @@ -78,10 +76,10 @@ int TFppro::get_numreg() if (!_is_set) { if (set_query()) - return fp_db().sq_get_int("PZ_NUMREGCONT"); + return _db->sq_get_int("PZ_NUMREGCONT"); return -1; } - return fp_db().sq_get_int("PZ_NUMREGCONT"); + return _db->sq_get_int("PZ_NUMREGCONT"); } int TFppro::get_numreg(TToken_string& keys) @@ -95,31 +93,33 @@ TDate TFppro::get_datareg() if (!_is_set) { if (set_query()) - return fp_db().sq_get_date("PZ_DATAREGCONT"); + return _db->sq_get_date("PZ_DATAREGCONT"); return TDate(); } - return fp_db().sq_get_date("PZ_DATAREGCONT"); + return _db->sq_get_date("PZ_DATAREGCONT"); } TDate TFppro::get_datareg(TToken_string& keys) { - if (set_keys(keys)) + set_keys(keys); + if (_is_set) return get_datareg(); return TDate(); } real TFppro::get_ritenute() const { + real imp = ZERO; TString query; query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << "WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; - fp_db().sq_set_exec(query); - if(fp_db().sq_items() >= 1) - return fp_db().sq_get_real("IMPORTO"); - return ZERO; + _db->sq_set_exec(query, false); + for(bool ok = _db->sq_next(); ok; ok = _db->sq_next()) + imp += _db->sq_get_real("IMPORTO"); + return imp; } -bool TFppro::set_keys(TToken_string& keys) +TFppro& TFppro::set_keys(TToken_string& keys) { if(keys.items() == 3) { @@ -127,30 +127,32 @@ bool TFppro::set_keys(TToken_string& keys) _keys.headerfatt = keys.get(1); _keys.bodyfatt = keys.get(2); _is_set = false; - return _keys_setted = true; + _keys_setted = true; } - return _keys_setted = false; + _keys_setted = false; + return *this; } -bool TFppro::set_keys(keys_s keys) +TFppro& TFppro::set_keys(keys_s keys) { if(*keys.prginvio != 0 && *keys.headerfatt != 0 && *keys.bodyfatt != 0) { _keys = keys; _is_set = false; - return _keys_setted = true; + _keys_setted = true; } _is_set = false; - return _keys_setted = false; + _keys_setted = false; + return *this; } -TDate TFppro::get_data_first_doc() +TDate TFppro::get_data_first_doc() const { TString query; query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" << "\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a"; - fp_db().sq_set_exec(query); - return fp_db().sq_get_date("DATA"); + _db->sq_set_exec(query); + return _db->sq_get_date("DATA"); } bool TFppro::set_query() @@ -158,7 +160,7 @@ bool TFppro::set_query() if (_keys_setted) { _fppro_query.cut(0) << "SELECT * FROM FPPRO00F " << where_str(); - return _is_set = fp_db().sq_set_exec(_fppro_query); + return _is_set = _db->sq_set_exec(_fppro_query); } return _is_set = false; } @@ -170,6 +172,14 @@ const char* TFppro::where_str() const return str; } +TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) +{ + _db = new SSimple_query(); + const bool ok = set_connection(*_db); + // Non utilizzo l'autocommit, viene gestito manualmente + if (ok) _db->sq_set_autocommit(false); +} + ////////////////////////////////////////////////////////// // TProtocollo ////////////////////////////////////////////////////////// @@ -366,4 +376,38 @@ bool TF1_log::show_log() _log = NULL; } return true; +} + +bool TFppro::set_connection(SSimple_query& s) +{ + bool ok = true; +#ifdef DBG + TString ip = fp_settings().get_db_indirizzo(); + if (ip.upper() != "TESTCAMPO2012") + { + if (s.sq_connect("TESTCAMPO2012@campo_fp", + "fp", + "fp", + TSDB_MSSQL) != NOERR) + { + warning_box("Impossibile connettersi al DB esterno"); + ok = false; + } + } + else + { +#endif + if (s.sq_connect( + fp_settings().get_db_str_con(), + fp_settings().get_db_user(), + fp_settings().get_db_password(), + TSDB_MSSQL) != NOERR) + { + warning_box("Impossibile connettersi al DB esterno"); + ok = false; + } +#ifdef DBG + } +#endif + return ok; } \ No newline at end of file diff --git a/src/f1/f1lib.h b/src/f1/f1lib.h index b34ce3a9c..d217fcd0e 100644 --- a/src/f1/f1lib.h +++ b/src/f1/f1lib.h @@ -2,9 +2,8 @@ #define _F1LIBH_ #include "strings.h" -#include "config.h" -#include "report.h" #include "reputils.h" +#include "tsdb.h" #define FILE_CONFIG CONFIG_DITTA #define FILE_SECTION "f1" @@ -34,6 +33,7 @@ class TFppro : public TObject const char* bodyfatt; }; private: + SSimple_query* _db; keys_s _keys; bool _guess; bool _keys_setted; @@ -45,21 +45,24 @@ public: bool check_reg(TToken_string& keys, int numreg); // Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e` - bool guess_the_doc(const TLocalisamfile& mov); - void get_keys_fppro(); - int get_numreg(); - int get_numreg(TToken_string& keys); - TDate get_datareg(); - TDate get_datareg(TToken_string& keys); - real get_ritenute() const; - bool set_query(); - bool set_keys(TToken_string& keys); - bool set_keys(keys_s keys); + bool guess_the_doc(const TLocalisamfile& mov); + // Getters + void get_keys_fppro(); + int get_numreg(); + int get_numreg(TToken_string& keys); + TDate get_datareg(); + TDate get_datareg(TToken_string& keys); + real get_ritenute() const; + TDate get_data_first_doc() const; + // Setters + bool set_query(); + TFppro& set_keys(TToken_string& keys); + TFppro& set_keys(keys_s keys); - static TDate get_data_first_doc(); + static bool set_connection(SSimple_query& s); - TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) { } - TFppro::TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } + TFppro(); + TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } }; class TProtocollo : TObject diff --git a/src/fp/fp0400.cpp b/src/fp/fp0400.cpp index 397842d8f..7153390bc 100644 --- a/src/fp/fp0400.cpp +++ b/src/fp/fp0400.cpp @@ -247,6 +247,8 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee const TDate& dataregcont = fp_db().sq_get_date("DATAREGCONT"); const TString& filter_elab = get_fattsel(); const bool is_contab = dataregcont != TDate("20010101"); + TToken_string keys("", ';'); + keys.add(fp_db().sq_get("KEYPROG")); keys.add(fp_db().sq_get("KEYHEAD")); keys.add(fp_db().sq_get("KEYFATT")); clifo.zero(); clifo.put(CLI_TIPOCF, 'F'); @@ -271,6 +273,7 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee row.add(fp_db().sq_get_date("DATA_RIC")); row.add(fp_db().sq_get_date("DATA_DOC")); row.add(fp_db().sq_get("TOT_DOC")); + row.add(fppro_db().set_keys(keys).get_ritenute()); // Decido se mettere o meno il flag if (forn_code == 0) @@ -301,12 +304,10 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee row.add(paa_codpaese, sf.cid2index(S_STATOPAIV)); row.add(paa_piva); row.add(paa_codfisc); - row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X"); row.add(denom); row.add(TProtocollo(fp_db().sq_get_int("ANNO_PROT"), fp_db().sq_get("TIPO_PROT"), fp_db().sq_get("NUM_PROT"))); - TString key_prot; key_prot << fp_db().sq_get("KEYPROG") << ";" << fp_db().sq_get("KEYHEAD") << ";" << fp_db().sq_get("KEYFATT"); - row.add(key_prot); + row.add(keys); } } @@ -599,7 +600,7 @@ int TPassive_mask::prepara_contab() const real imp = calcola_importo(riva); totdoc.cut(0) << imp; } - real rit = TFppro(keys).get_ritenute(); + real rit = fppro_db().set_keys(keys).get_ritenute(); if(rit != ZERO) { contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string()); diff --git a/src/fp/fp0400a.h b/src/fp/fp0400a.h index c7f1bfb45..c786acb81 100644 --- a/src/fp/fp0400a.h +++ b/src/fp/fp0400a.h @@ -30,18 +30,19 @@ #define S_DATARIC 105 #define S_DATADOC 106 #define S_TOTDOC 107 -#define S_FPPRO 108 -#define S_NUMREGCONT 109 -#define S_DATAREGCONT 110 -#define S_FORNITORE 111 -#define S_RAGSOC 112 -#define S_STATOPAIV 113 -#define S_PARIVA 114 -#define S_CODFISC 115 -#define S_ATTACH 116 -#define S_RAGXML 117 -#define S_NPROT 118 -#define S_PROKEY 119 +#define S_TOTRIT 108 +#define S_FPPRO 109 +#define S_NUMREGCONT 110 +#define S_DATAREGCONT 111 +#define S_FORNITORE 112 +#define S_RAGSOC 113 +#define S_STATOPAIV 114 +#define S_PARIVA 115 +#define S_CODFISC 116 +#define S_ATTACH 117 +#define S_RAGXML 118 +#define S_NPROT 119 +#define S_PROKEY 120 #define F_ERR 301 diff --git a/src/fp/fp0400a.uml b/src/fp/fp0400a.uml index 88687f425..9ef3dea02 100644 --- a/src/fp/fp0400a.uml +++ b/src/fp/fp0400a.uml @@ -184,23 +184,24 @@ BEGIN PROMPT 0 4 "" ITEM "" ITEM "Anno" - ITEM "Tipo Doc.\nSDI@6" - ITEM "Numero\nDocumento@18" + ITEM "Tipo Doc.\nSDI@5" + ITEM "Numero\nDocumento@14" ITEM "Data\nRicezione@8" ITEM "Data\nDoc.@8" - ITEM "Totale\nDocumento@12" - ITEM "Fornitore\nassociato@7" - ITEM "Num. Registrazione\ncontabile@12" - ITEM "Data Registrazione\ncontabile@12" - ITEM "Fornitore@7" - ITEM "Ragione Sociale@50" + ITEM "Totale\nDocumento@7" + ITEM "Totale\nritenute@6" + ITEM "Fornitore\nassociato@6" + ITEM "Num. Regis.\ncontabile@8" + ITEM "Data Regis.\ncontabile@8" + ITEM "Fornitore@5" + ITEM "Ragione Sociale@40" ITEM "Stato\nP.IVA@4" ITEM "Partita IVA@10" - ITEM "Cod. Fiscale@16" - ITEM "Allegati@7" - ITEM "Ragione Sociale (XML)@50" - ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@22" - ITEM "Chiave Prot.@80" + ITEM "Cod. Fiscale@12" + ITEM "Allegati@6" + ITEM "Ragione Sociale (XML)@40" + ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@20" + ITEM "Chiave Prot.@40" END ENDPAGE @@ -311,6 +312,12 @@ BEGIN FLAGS "D" END +NUMBER S_TOTRIT 10 2 +BEGIN + PROMPT 1 2 "Totale Ritenute" + FLAGS "D" +END + BOOLEAN S_FPPRO BEGIN PROMPT 15 2 "Salvato in FP-PRO"