From 17c72490cf9be2068ad7c2d53cadcc2d5fea7399 Mon Sep 17 00:00:00 2001 From: Mattia Tollari Date: Tue, 25 Jun 2019 11:51:35 +0200 Subject: [PATCH] Patch level : 12.0 840 Files correlati : fp0, fp0500a.msk Commento : Aggiornamento programma personalizzazioni FP: - Sistemata maschera - Aggiunto AND e OR nella condizione - Aggiunto preload con dati base durante la creazione di una personalizzazione --- src/fp/fp0500.cpp | 32 ++++++++++++++++- src/fp/fp0500a.uml | 88 +++++++++++++++++++++++++++++++--------------- src/fp/fplib.h | 2 +- src/fp/fplib05.cpp | 29 +++++++++++++++ 4 files changed, 120 insertions(+), 31 deletions(-) diff --git a/src/fp/fp0500.cpp b/src/fp/fp0500.cpp index ec8721a17..a8eef1a63 100644 --- a/src/fp/fp0500.cpp +++ b/src/fp/fp0500.cpp @@ -74,6 +74,9 @@ class TFpcust : public TRelation_application TRelation* _rel{ nullptr }; TFP_custom* _fpcust{ nullptr }; +private: + void init_insert_mode(TMask& m) override; + protected: int read(TMask& m) override; int write(const TMask& m) override; @@ -92,6 +95,27 @@ public: TRelation* get_relation() const override { return static_cast(_rel); } }; + +void TFpcust::init_insert_mode(TMask& m) +{ + // Presetto delle righe di default + + // Causale + TToken_string& row_causale = m.sfield(F_CAUSALI).row(-1); + row_causale.add("READ(%TIP, S0)"); + + // Articoli + TToken_string& row_articolo_interno = m.sfield(F_ARTICOLI).row(-1); + row_articolo_interno.add("Codice articolo interno"); + row_articolo_interno.add("READ(34, CODARTMAG)"); + row_articolo_interno.add("READ(34, CODARTMAG) != \"\" && READ(34, CODART) != \"\""); + + TToken_string& row_articolo = m.sfield(F_ARTICOLI).row(-1); + row_articolo.add("Codice articolo cliente"); + row_articolo.add("READ(34, CODART)"); + row_articolo.add("READ(34, CODARTMAG) != READ(34, CODART) && READ(34, CODART) != \"\""); +} + int TFpcust::read(TMask& m) { TRelation_application::read(m); @@ -105,6 +129,7 @@ int TFpcust::read(TMask& m) { TToken_string& row = sheet_causali.row(-1); row.add(rcaus->get(FPCCAUS_VALORE), xvtil_cid2index(S_CAUS_VALORE)); + row.add(rcaus->get(FPCCAUS_COND), xvtil_cid2index(S_CAUS_COND)); } TSheet_field& sheet_articoli = m.sfield(F_ARTICOLI); @@ -114,6 +139,7 @@ int TFpcust::read(TMask& m) TToken_string& row = sheet_articoli.row(-1); row.add(rart->get(FPCART_TIPO), xvtil_cid2index(S_ART_TIPO)); row.add(rart->get(FPCART_VALORE), xvtil_cid2index(S_ART_VALORE)); + row.add(rart->get(FPCART_COND), xvtil_cid2index(S_ART_COND)); } TSheet_field& sheet_adg = m.sfield(F_ADG); @@ -124,7 +150,11 @@ int TFpcust::read(TMask& m) row.add(radg->get(FPCADG_TIPODATO), xvtil_cid2index(S_ADG_TIPODATO)); row.add(radg->get(FPCADG_RTESTO), xvtil_cid2index(S_ADG_RTESTO)); row.add(radg->get(FPCADG_RNUMERO), xvtil_cid2index(S_ADG_RNUMERO)); - row.add(radg->get(FPCADG_RDATA), xvtil_cid2index(S_ADG_RDATA)); + row.add(radg->get_date(FPCADG_RDATA), xvtil_cid2index(S_ADG_RDATA)); + row.add(radg->get(FPCADG_TIPORIGA), xvtil_cid2index(S_ADG_TIPORIGA)); + row.add(radg->get(FPCADG_COND), xvtil_cid2index(S_ADG_COND)); + row.add(radg->get(FPCADG_SPLIT), xvtil_cid2index(S_ADG_SPLIT)); + } return NOERR; diff --git a/src/fp/fp0500a.uml b/src/fp/fp0500a.uml index 62318b5e8..cfe0438e3 100644 --- a/src/fp/fp0500a.uml +++ b/src/fp/fp0500a.uml @@ -40,10 +40,15 @@ BEGIN FIELD GLOBAL END -SPREADSHEET F_CAUSALI 0 6 +TEXT DLG_NULL BEGIN - PROMPT 1 3 "Causale" - ITEM "Valore@50" + PROMPT 1 3 "@bCausale documento" +END + +SPREADSHEET F_CAUSALI 0 15 +BEGIN + PROMPT 1 4 "Causale" + ITEM "2.1.1.11 Valore@50" ITEM "Condizione@50" END @@ -51,21 +56,31 @@ ENDPAGE PAGE "Pag. 2" 0 2 0 0 -SPREADSHEET F_ARTICOLI 0 6 +TEXT DLG_NULL BEGIN - PROMPT 1 1 "Codice Articolo" - ITEM "Tipo@35" - ITEM "Valore@35" + PROMPT 1 0 "@bArticoli" +END + +SPREADSHEET F_ARTICOLI 0 10 +BEGIN + PROMPT 0 1 "" + ITEM "2.2.1.3.1 Tipo@35" + ITEM "2.2.1.3.2 Valore@35" ITEM "Condizione@35" END -SPREADSHEET F_ADG 0 6 +TEXT DLG_NULL BEGIN - PROMPT 0 10 "Altri dati gestionali" - ITEM "Tipo Dato@35" - ITEM "Riferimento\nTesto@35" - ITEM "Riferimento\nNumero@35" - ITEM "Riferimento\nData@35" + PROMPT 1 11 "@bAltri dati gestionali" +END + +SPREADSHEET F_ADG 0 10 +BEGIN + PROMPT 0 12 "" + ITEM "2.2.1.16.1 Tipo Dato@35" + ITEM "2.2.1.16.2 Riferimento\nTesto@35" + ITEM "2.2.1.16.3 Riferimento\nNumero@35" + ITEM "2.2.1.16.4 Riferimento\nData@35" ITEM "Tipo riga@8" ITEM "Condizione@35" ITEM "Riga\nseparata@8" @@ -74,7 +89,7 @@ END ENDPAGE ENDMASK -PAGE "Riga Causale" -1 -1 60 12 +PAGE "Riga Causale" -1 -1 65 5 STRING S_CAUS_VALORE 250 50 BEGIN @@ -84,7 +99,7 @@ END STRING S_CAUS_COND 200 50 BEGIN - PROMPT 1 2 "Condizione " + PROMPT 1 2 "Cond " HELP "Condizione che se è vera abilita la riga" END @@ -94,34 +109,39 @@ TOOLBAR "Riga" 0 0 0 2 BUTTON DLG_OK 2 2 BEGIN - PROMPT 1 1 "" + PROMPT 1 1 "~Conferma" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 1 1 "~Elimina" END BUTTON DLG_CANCEL 2 2 BEGIN - PROMPT 1 1 "" + PROMPT 1 1 "~Cancella" END ENDPAGE ENDMASK -PAGE "Riga Articolo" -1 -1 60 12 +PAGE "Riga Articolo" -1 -1 70 5 STRING S_ART_TIPO 200 50 BEGIN - PROMPT 1 1 "Tipo " + PROMPT 1 1 "Tipo " HELP "Tag TipoArticolo" END STRING S_ART_VALORE 200 50 BEGIN - PROMPT 1 1 "Valore " + PROMPT 1 2 "Valore " HELP "Tag ValoreArticolo" END STRING S_ART_COND 200 50 BEGIN - PROMPT 1 2 "Condizione " + PROMPT 1 3 "Cond " HELP "Condizione che se è vera abilita la riga" END @@ -131,18 +151,23 @@ TOOLBAR "Riga" 0 0 0 2 BUTTON DLG_OK 2 2 BEGIN - PROMPT 1 1 "" + PROMPT 1 1 "~Conferma" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 1 1 "~Elimina" END BUTTON DLG_CANCEL 2 2 BEGIN - PROMPT 1 1 "" + PROMPT 1 1 "~Cancella" END ENDPAGE ENDMASK -PAGE "Riga Altri Dati Gestionali" -1 -1 60 12 +PAGE "Riga Altri Dati Gestionali" -1 -1 70 12 STRING S_ADG_TIPODATO 200 50 BEGIN @@ -170,7 +195,7 @@ END STRING S_ADG_TIPORIGA 4 BEGIN - PROMPT 1 2 "Tipo riga " + PROMPT 1 5 "Tipo riga " USE %TRI INPUT CODTAB S_ADG_TIPORIGA DISPLAY "Tipo riga@8" CODTAB @@ -181,13 +206,13 @@ END STRING S_ADG_COND 200 50 BEGIN - PROMPT 1 2 "Condizione " + PROMPT 1 6 "Cond " HELP "Condizione che se è vera abilita la riga" END BOOLEAN S_ADG_SPLIT BEGIN - PROMPT 1 2 "Riga separata" + PROMPT 20 5 "Riga separata" HELP "Separa questa informazione in una riga separata" END @@ -197,12 +222,17 @@ TOOLBAR "Riga" 0 0 0 2 BUTTON DLG_OK 2 2 BEGIN - PROMPT 1 1 "" + PROMPT 1 1 "~Conferma" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 1 1 "~Elimina" END BUTTON DLG_CANCEL 2 2 BEGIN - PROMPT 1 1 "" + PROMPT 1 1 "~Cancella" END ENDPAGE diff --git a/src/fp/fplib.h b/src/fp/fplib.h index 23a282467..146f2fba3 100644 --- a/src/fp/fplib.h +++ b/src/fp/fplib.h @@ -386,7 +386,7 @@ inline TFP_custom_cache& cached_custom_fp() class TFP_expression : public TObject { private: - enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq }; + enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or }; // Etrattori static void extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string* search); diff --git a/src/fp/fplib05.cpp b/src/fp/fplib05.cpp index 76a3df92a..650a32d0c 100644 --- a/src/fp/fplib05.cpp +++ b/src/fp/fplib05.cpp @@ -326,6 +326,18 @@ bool TFP_expression::check_condition(const TString& cond, TRiga_documento& rdoc) TFP_operator symb; split_condition(cond, cond_sx, cond_dx, symb); + // Se ho davanti un and o un or evito di fare i passaggi dopo perchè sono inutili + // Così facendo posso anche concatenare più and o or, sarebbe carino aggiungere anche il supporto alle parentesi + if(symb == and) + { + return check_condition(cond_sx, rdoc) && check_condition(cond_dx, rdoc); + } + if(symb == or) + { + return check_condition(cond_sx, rdoc) || check_condition(cond_dx, rdoc); + } + + // Altrimenti proseguo per la mia solita strada const TVariant value_sx = parse_expression(cond_sx, rdoc); const TVariant value_dx = parse_expression(cond_dx, rdoc); @@ -412,6 +424,16 @@ void TFP_expression::split_condition(const TString& cond, TString& cond_sx, TStr symb = ls; symbol = " < "; } + else if (cond.contains(" && ")) + { + symb = and; + symbol = " && "; + } + else if (cond.contains(" || ")) + { + symb = or; + symbol = " || "; + } if(symb != error) { @@ -523,6 +545,13 @@ TVariant& TFP_expression::parse_read(const TString& str, TRiga_documento& rdoc) TVariant& TFP_expression::do_read(const TString& tabella, const TString& campo, TRiga_documento& rdoc) { + + // Prima di tutto controllo se è una delle tabelle multitracciato che supporto + if(tabella == "%TIP") + { + return get_value(rdoc.doc().tipo(), campo); + } + int file; calc_table(tabella, file);