diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 591999b84..5eb92e23f 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -1026,15 +1026,27 @@ bool TDoc_fp::initialize(TDocumentoEsteso& doc) } const TRectype& TDoc_fp::cco(const TRectype& doc) const { - TString80 conkey; - const TString& con = doc.get(DOC_CONTRATTO); - if (con.full()) - { - char tcon = doc.get_char(DOC_MODPAG); - if (tcon < 'C') tcon = 'C'; - conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), static_cast(con)); - } - return cache().get("&CON", conkey); + TString80 conkey; + const TString& con = doc.get(DOC_CONTRATTO); + if (con.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), static_cast(con)); + } + + static TLocalisamfile tabmod(LF_TABMOD); + // Controllo se non sono già sul record, così evito read inutili + // Lo sto facendo a mano perchè usare cache() metterebbe FP nella colonna "MOD" + if (tabmod.get("MOD") != "PA" || tabmod.get("COD") != "CON" || tabmod.get("CODTAB") != conkey) + { + tabmod.zero(); + tabmod.put("MOD", "PA"); + tabmod.put("COD", "CON"); + tabmod.put("CODTAB", conkey); + tabmod.read(); + } + return tabmod.curr(); } void TDoc_fp::log(int severity, const char* msg) { @@ -1575,7 +1587,15 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // Fuori dallo scope per dopo const TString16 cup = doc.get(DOC_CUP); const TString16 cig = doc.get(DOC_CIG); - const TString80 com = doc.get(DOC_CODCMS); + + // Codice commessa, spostato nel campo S5 di TABCOM + TString80 com = cco(doc).get("S5"); + // Se è una commessa della sanità bisogna aggiungere un cancelletto davanti e dietro + if(cco(doc).get_bool("B0")) + { + com.add_front_and_back("#"); + } + // SEMPRE // Azzera contratti TPaf_record& paf1000f = _paf_container.get_paf("PAF1000F"); diff --git a/src/fp/fplib05.cpp b/src/fp/fplib05.cpp index 06bc344f3..3874dd69d 100644 --- a/src/fp/fplib05.cpp +++ b/src/fp/fplib05.cpp @@ -639,8 +639,6 @@ TVariant& TFP_expression::parse_search(const TString& str, TRiga_documento& rdoc { return get_value(cache().get(tabella, search, key), campo); } - else - { - return get_value(cache().get(file, search, key), campo); - } + + return get_value(cache().get(file, search, key), campo); } diff --git a/src/include/strings.cpp b/src/include/strings.cpp index e9bfa50cc..0efcd3a3b 100755 --- a/src/include/strings.cpp +++ b/src/include/strings.cpp @@ -1038,6 +1038,17 @@ TString & TString::add_front(const char * s) return *this; } +TString& TString::add_back(const char* s) +{ + return operator<<(s); +} + +TString& TString::add_front_and_back(const char* front, const char* back) +{ + add_front(front); + return add_back(back); +} + // Certified 90% word TString::hash() const { diff --git a/src/include/strings.h b/src/include/strings.h index b1a8802f3..9ef03d33e 100755 --- a/src/include/strings.h +++ b/src/include/strings.h @@ -161,6 +161,12 @@ public: TString& insert(const char* s, int pos = 0); // @cmember Aggiunge la stringa passata davanti TString& add_front(const char* s); + // @cmember Aggiunge la stringa passata dietro, sta funzione non serve a un tubo, solo per rendere più bello il codice se chiamata con add_front + TString& add_back(const char* s); + // @cmember Aggiunge la prima stringa passata davanti e la seconda dietro + TString& add_front_and_back(const char * front, const char* back); + // @cmember Aggiunge la stringa passata davanti e dietro + TString& add_front_and_back(const char * s) { return add_front_and_back(s, s); } // @cmember Elimina tutti i caratteri contenuti in k TString& strip(const char* k); diff --git a/src/pa/patbcon.h b/src/pa/patbcon.h index aa99a4e25..88b4e9519 100644 --- a/src/pa/patbcon.h +++ b/src/pa/patbcon.h @@ -1,16 +1,18 @@ #ifndef __PATBCON_H #define __PATBCON_H -#define F_CON_TIPO 101 -#define F_CON_CODCF 102 -#define F_CON_RAGSOC 112 -#define F_CON_CODICE 103 -#define F_CON_DESCRIZIONE 113 -#define F_CON_DATA 104 -#define F_CON_RIFAMM 105 -#define F_CON_CAUS1 121 -#define F_CON_CAUS2 122 -#define F_CON_CAUS3 123 +#define F_CON_TIPO 101 +#define F_CON_CODCF 102 +#define F_CON_RAGSOC 112 +#define F_CON_CODICE 103 +#define F_CON_DESCRIZIONE 113 +#define F_CON_DATA 104 +#define F_CON_RIFAMM 105 +#define F_CON_CAUS1 121 +#define F_CON_CAUS2 122 +#define F_CON_CAUS3 123 +#define F_CON_COMCON 124 +#define B_CON_ASL 125 #endif diff --git a/src/pa/patbcon.uml b/src/pa/patbcon.uml index a5d197273..5f3da7692 100644 --- a/src/pa/patbcon.uml +++ b/src/pa/patbcon.uml @@ -79,7 +79,7 @@ BEGIN END -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 6 BEGIN PROMPT 1 5 "@bDati contratto/convenzione/ordine P.A." END @@ -109,30 +109,42 @@ END STRING F_CON_RIFAMM 20 BEGIN - PROMPT 24 7 "Riferimento amministrazione " + PROMPT 2 8 "Riferimento amministrazione " FIELD S4 END +STRING F_CON_COMCON 20 +BEGIN + PROMPT 2 9 "Codice commessa o convenzione " + FIELD S5 +END + +BOOLEAN B_CON_ASL +BEGIN + PROMPT 55 9 "Commessa per sanità" + FIELD B0 +END + GROUPBOX DLG_NULL 78 5 BEGIN - PROMPT 1 10 "@bCausale" + PROMPT 1 11 "@bCausale" END STRING F_CON_CAUS1 50 BEGIN - PROMPT 14 11 "" + PROMPT 14 12 "" FIELD S1 END STRING F_CON_CAUS2 50 BEGIN - PROMPT 14 12 "" + PROMPT 14 13 "" FIELD S2 END STRING F_CON_CAUS3 50 BEGIN - PROMPT 14 13 "" + PROMPT 14 14 "" FIELD S3 END