From fdedce8cbbc0b07c4ba55fab9c3111f3fea027ae Mon Sep 17 00:00:00 2001 From: Mattia Tollari Date: Mon, 8 Oct 2018 10:42:28 +0200 Subject: [PATCH] Patch level : 12.0 no-patch Files correlati : fp Commento : - Sistemato setter esportazione documenti, non si toglieva il flag una volta valorizzato - Sistemato parsing caratteri speciali - Sistemata lettura descrizione nel documento - Messa a punto SQL - Aumentata dimensione get_tmp_string a 1024 token --- src/fp/fp0100.cpp | 4 +- src/fp/fplib01.cpp | 86 +++++++++++++++++++++++++++++++++++------ src/fp/fplib01.h | 4 +- src/fp/sql/fp0100.sql | 4 +- src/fp/sql/fp0104.sql | 7 +++- src/include/strings.cpp | 2 +- 6 files changed, 88 insertions(+), 19 deletions(-) diff --git a/src/fp/fp0100.cpp b/src/fp/fp0100.cpp index 383513680..639e3abe3 100644 --- a/src/fp/fp0100.cpp +++ b/src/fp/fp0100.cpp @@ -41,8 +41,8 @@ void TParametri_mask::save_all() const ini_set_string(CONFIG_DITTA, "fp", "flddest", get(F_FLDDEST)); ini_set_string(CONFIG_DITTA, "fp", "fldusrdest", get(F_FLDUSRDEST)); ini_set_string(CONFIG_DITTA, "fp", "cofitras", get(F_COFI)); - ini_set_bool(CONFIG_DITTA, "fp", "gestioneallegati", get(F_ESPORTAALLEG)); - ini_set_bool(CONFIG_DITTA, "fp", "allegafatt", get(F_ESPORTADOC)); + ini_set_bool(CONFIG_DITTA, "fp", "gestioneallegati", get_bool(F_ESPORTAALLEG)); + ini_set_bool(CONFIG_DITTA, "fp", "allegafatt", get_bool(F_ESPORTADOC)); } void TParametri_mask::load_all() diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index c75a33281..7b3674181 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -138,7 +138,7 @@ bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt) TString16 fullnumdoc; codnum.complete_num(ndoc, fullnumdoc); - bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '/' << doc.tipo().tipo_doc_sdi() << '/' << fullnumdoc; + bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '_' << doc.tipo().tipo_doc_sdi() << '_' << fullnumdoc; return hfatt.full() && bfatt.full(); } @@ -175,6 +175,57 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& return true; } +inline const TString& no_special(char a) +{ + TString& r = get_tmp_string().cut(0); + switch(a) + { + case 'à': + r << "a''"; + break; + case 'è': + case 'é': + r << "e''"; + break; + case 'ì': + r << "i''"; + break; + case 'ò': + r << "o''"; + break; + case 'ù': + r << "u''"; + break; + case '\'': + r << "''"; + break; + case '\\': + r << "\\\\"; + break; + default: + r << a; + } + return r; + /* + if (a == 'à') + return "a''"; + else if (a == 'è' || a == 'é') + return "e''"; + else if (a == 'ì') + return "i''"; + else if (a == 'ò') + return "o''"; + else if (a == 'ù') + return "u''"; + else if (a == '\'') + return "''"; + else if (a == '\\') + return "\\\\"; + // Se non trovo nulla ritorno il valore + return a; + */ +} + /*************************************************************************** * TPaf_record ***************************************************************************/ @@ -289,13 +340,14 @@ const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) if (!apici) return str; - TString& tmp = get_tmp_string(); - tmp = str; - for (int a = str.rfind('\''); a >= 0; a--) + // Parso i caratteri speciali + TString& tmp = get_tmp_string().cut(0); + for(int i = 0; i < str.len(); i++) { - if (tmp[a] == '\'') - tmp.insert("'", a); + tmp << no_special(str[i]); } + + // Aggiungo apici a inizio e fine riga tmp.insert("'", 0); tmp << '\''; return tmp; @@ -534,17 +586,16 @@ bool TDoc_fp::get_bank(const TDocumento& doc, TString& iban, TString& abi, TStri return found; } -const char* TDoc_fp::descrizione(const TRiga_documento& rdoc) const +const TString& TDoc_fp::descrizione(const TRiga_documento& rdoc) const { if (rdoc.get_bool(RDOC_DESCLUNGA)) { - TString tmp; + TString& tmp = get_tmp_string(); tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST); tmp.replace('\n', ' '); tmp.strip_double_spaces(); tmp.trim(); - TParagraph_string para(tmp, 100); - return para.get(0); + return tmp; } return rdoc.get(RDOC_DESCR); } @@ -605,7 +656,10 @@ bool TDoc_fp::insert(TPaf_record& p) { ok = p.insert(); if (!ok) + { log(2, db().sq_get_string_error()); + log(2, p.insert_string()); + } } return ok; } @@ -622,7 +676,10 @@ bool TDoc_fp::remove(TPaf_record& p) { ok = p.remove(); if (!ok) + { log(2, db().sq_get_string_error()); + log(2, p.remove_string()); + } } return ok; } @@ -637,7 +694,10 @@ bool TDoc_fp::save_paf() query += *i; ok = db().sq_set_exec(query); if (!ok) + { log(2, db().sq_get_string_error()); + log(2, query.c_str()); + } } return ok; } @@ -701,7 +761,8 @@ const int TDoc_fp::commit() else { r = -1; - log(3, db().sq_get_string_error()); + log(2, db().sq_get_string_error()); + log(2, "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_GESTIONE = 'D'"); } } _to_commit = false; @@ -1140,10 +1201,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) TPaf_record paf3000f("PAF3000F"); paf3000f.set("PT_KEYHEADERFATT", hfatt); paf3000f.set("PT_KEYBODYFATT", bfatt); + remove(paf3000f); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", descrizione(*rdoc)); - // paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione + paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione // long riga_art = 0; diff --git a/src/fp/fplib01.h b/src/fp/fplib01.h index 6ef9ece9f..22c694696 100644 --- a/src/fp/fplib01.h +++ b/src/fp/fplib01.h @@ -11,6 +11,7 @@ #include #define SQL_FLD "sql/" +#define CARATTERI_SPECIALI "àèéìòù°'\\" // Ritorna la connessione al DB paf secondo i parametri impostati nel programma di configurazione SSimple_query& db(); @@ -20,6 +21,7 @@ bool check_tables(); bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt); bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt); bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec); +inline const TString& no_special(char a); // Contenitore di campi di un record di database MSSQLServer class TPaf_record : public TObject @@ -100,7 +102,7 @@ protected: bool parse_sconto(const TString& formula, TToken_string& sconti) const; static bool get_bnp_iban(const TString& abi, const TString& cab, int prg, TString& iban); bool get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const; - const char* descrizione(const TRiga_documento& rdoc) const; + const TString& descrizione(const TRiga_documento& rdoc) const; const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta void log(int severity, const char* msg); diff --git a/src/fp/sql/fp0100.sql b/src/fp/sql/fp0100.sql index ca0427fd1..503cab81d 100644 --- a/src/fp/sql/fp0100.sql +++ b/src/fp/sql/fp0100.sql @@ -1269,7 +1269,7 @@ CREATE TABLE PAF3000F ( PT_KEYHEADERFATT CHAR(20) NOT NULL DEFAULT '' , PT_KEYBODYFATT CHAR(50) NOT NULL DEFAULT '' , PT_RIFNUMLINEA NUMERIC(4, 0) NOT NULL DEFAULT 0 , - PT_COMMENTO VARCHAR NOT NULL DEFAULT '' , + PT_COMMENTO VARCHAR(1000) NOT NULL DEFAULT '' , PT_GESTIONE CHAR(1) NOT NULL DEFAULT '' ) ; ALTER TABLE PAF3000F @@ -1754,7 +1754,7 @@ CREATE INDEX PAF2800F_KEY CREATE INDEX PAF2900F_KEY ON PAF2900F (PS_KEYPRGINVIO ASC , PS_KEYHEADERFATT ASC , PS_KEYBODYFATT ASC ) ; - + CREATE INDEX PAF3100F_KEY ON PAF3100F (PH_KEYPRGINVIO ASC , PH_KEYHEADERFATT ASC , PH_KEYBODYFATT ASC ) ; diff --git a/src/fp/sql/fp0104.sql b/src/fp/sql/fp0104.sql index 62f30ee18..90c351a16 100644 --- a/src/fp/sql/fp0104.sql +++ b/src/fp/sql/fp0104.sql @@ -83,4 +83,9 @@ ALTER TABLE PAFW300F ADD CONSTRAINT PAFW300F_TLLNNAPRV1 DEFAULT '19700101 00:00: UPDATE PAFW300F SET PW_UPAG = '19700101 00:00:00' WHERE PW_UPAG IS NULL; ALTER TABLE PAFW300F ALTER COLUMN PW_UPAG DATETIME NOT NULL; --- TLLNNAPRV -> Tolla non approva \ No newline at end of file +-- TLLNNAPRV -> Tolla non approva + +-- Aggiungo chiave mancante + +CREATE INDEX PAF3000F_KEY + ON PAF3000F ( PT_KEYPRGINVIO ASC, PT_KEYHEADERFATT ASC, PT_KEYBODYFATT ASC, PT_RIFNUMLINEA ASC) ; \ No newline at end of file diff --git a/src/include/strings.cpp b/src/include/strings.cpp index d15c4fda7..e2599d9bf 100755 --- a/src/include/strings.cpp +++ b/src/include/strings.cpp @@ -2055,7 +2055,7 @@ void TParagraph_string::tokenize() TToken_string& get_tmp_string(int len) { - static TString_array ararar(128); + static TString_array ararar(1024); static int next = 0; TToken_string* str = (TToken_string*)ararar.objptr(next);