From 77e03434b0d03fc9bfd65b676c5a1d6b2870846c Mon Sep 17 00:00:00 2001 From: Simoe Date: Wed, 26 Oct 2022 15:29:19 +0200 Subject: [PATCH] Patch level : 12.0 Files correlati : f9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commento: Nella videata in cui abbinare manualmente i movimenti è stato aggiunto un filtro che permette di filtrare i risultati della tabella dei movimenti elettronici registrati su fppro. I pulsanti per interagire con il filtro sono tre: - Impostaz. Filtro per impostare i parametri con cui filtrare - Filtro On: per accendere il filtro - Filtro Off: per spegnere il filtro (icone ancora provvisorie) I parametri del filtro sono raggruppati in tre macro categorie: - per data - per parametri del documento (TIPODOC, IMPORTO,... ) - per parametri del fornitore(PIVA, RAGSOC,...) La videata per l'ordinamento delle tabelle è stata accorpata a quella delle impostazioni del filtro ed il relativo pulsante è stato rimosso. --- src/f9/f90100.cpp | 196 ++++++++++++++++++++++++++++++++------------- src/f9/f90100.h | 18 ++++- src/f9/f90100b.h | 23 +++++- src/f9/f90100b.uml | 36 +++++++-- 4 files changed, 204 insertions(+), 69 deletions(-) diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index 7be5cb990..97cc6027a 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -693,7 +693,7 @@ void TControllo_mask::fill() fill_fppro_sheet(); } -void TControllo_mask::fill_fppro_sheet() const +void TControllo_mask::fill_fppro_sheet(bool filter) const { TSheet_field& sf = sfield(S_FPPRO); @@ -709,15 +709,44 @@ void TControllo_mask::fill_fppro_sheet() const case 'P': order = "P2_FISCIVACOD"; break; } TString query; - query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT,\n" << - "PZ_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" << - "PZ_CLIFOR AS FORNITORE, " << - "P2_ANADENOMIN AS RAGSOC, 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" << - "JOIN FPPRO00F ON PQ_KEYPRGINVIO = PZ_KEYPRGINVIO AND PQ_KEYHEADERFATT = PZ_KEYHEADERFATT AND PQ_KEYBODYFATT = PZ_KEYBODYFATT\n" << - "WHERE PZ_NUMREGCONT = '0' AND PZ_DATAREGCONT = '2001-01-01' AND P7_DATA >= '" << _datada.date2ansi() << "' AND P7_DATA <= '" << _dataa.date2ansi() << "'\n" << - "ORDER BY " << order << " " << (_verso == 'A' ? "ASC" : "DESC") << "\n"; + query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT,\n" << + "PZ_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" << + "PZ_CLIFOR AS FORNITORE, " << + "P2_ANADENOMIN AS RAGSOC, 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" << + "JOIN FPPRO00F ON PQ_KEYPRGINVIO = PZ_KEYPRGINVIO AND PQ_KEYHEADERFATT = PZ_KEYHEADERFATT AND PQ_KEYBODYFATT = PZ_KEYBODYFATT\n" << + "WHERE PZ_NUMREGCONT = '0' AND PZ_DATAREGCONT = '2001-01-01'" << "\n"; + + if (filter) + { + if (!_flt_da_data.empty()) + query << "AND P7_DATA >= '" << _flt_da_data.date2ansi() << "'"; + else + query << "AND P7_DATA >= '20010101'"; + + if (!_flt_a_data.empty()) + query << "AND P7_DATA <= '" << _flt_a_data.date2ansi() << "'\n"; + else + query << "AND P7_DATA <= '" << today.date2ansi() << "'\n"; + + if(!_flt_tipodoc.empty()) + query << "AND PZ_TIPODOC = '" << _flt_tipodoc << "'\n"; + if(!_flt_numdoc.empty()) + query << "AND P7_NUMERO like '%" << _flt_numdoc << "%'\n"; + if(!_flt_tot_doc_da.is_zero()) + query << "AND PQ_IMPTOTDOC >= '" << _flt_tot_doc_da << "'\n"; + if (!_flt_tot_doc_a.is_zero()) + query << "AND PQ_IMPTOTDOC <= '" << _flt_tot_doc_a << "'\n"; + if (!_flt_ragsoc.empty()) + query << "AND P2_ANADENOMIN like '%" << _flt_ragsoc << "%'\n"; + if (!_flt_codforn.empty()) + query << "AND PZ_CLIFOR = '" << _flt_codforn << "'\n"; + if (!_flt_piva.empty()) + query << "AND P2_FISCIVACOD = '" << _flt_piva << "'\n"; + } + + query << "ORDER BY " << order << " " << (_verso == 'A' ? "ASC" : "DESC") << "\n"; fp_db().sq_set_exec(query, false); for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) @@ -739,52 +768,91 @@ void TControllo_mask::fill_fppro_sheet() const sf.force_update(); } -TMask& TControllo_mask::get_win_order() +TMask& TControllo_mask::get_win_filter() { - static TMask* m = nullptr; + TMask* m = nullptr; - if (m == nullptr) - { - m = new TMask("Configurazione Archiviazione Sostitutiva", 1, 60, 16); - // TOOLBAR - m->add_button_tool(DLG_OK, "Conferma", TOOL_OK); - m->add_button_tool(DLG_NULL, "", 0); - m->add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); + if (m == nullptr) + { + m = new TMask("Filtro griglia FPPRO", 1, 60, 26); - // Ordinatori - m->add_radio(F_ORDER, 0, "@BOrdina per:", 1, 0, 59, "D|N|F|R|P", "DATA|NUMDOC|FORNITORE|RAGSOC|PIVA", "Z"); - m->add_radio(F_VERSO, 0, "@BVerso:", 1, 3, 59, "A|D", "Crescente|Decrescente", "Z"); + // TOOLBAR + m->add_button_tool(DLG_OK, "Conferma", TOOL_OK); + m->add_button_tool(DLG_NULL, "", 0); + m->add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); - // Filtro date - m->add_groupbox (F_ORDDATAG, 0, "@BFiltra per data documento", 1, 6, 59, 3); - m->add_date (F_ORDDATADA, 0, "dal", 2, 7); - m->add_date (F_ORDDATAA, 0, " al", 22, 7); + // Filtro Documenti + m->add_groupbox(F_FLTDOCGRP, 0, "@BFiltra sui parametri del documento", 1, 1, 59, 5); + m->add_list(F_FLTTIPODOC, 0, "TIPO DOC. ", 2, 2, 8, "", + "|TD01|TD02|TD03|TD04|TD05|TD06|TD07|TD08|TD10|TD11|TD16|TD17|TD18|TD19|TD20|TD21|TD22|TD23|TD24|TD25|TD26|TD27|TD28", + "|TD01|TD02|TD03|TD04|TD05|TD06|TD07|TD08|TD10|TD11|TD16|TD17|TD18|TD19|TD20|TD21|TD22|TD23|TD24|TD25|TD26|TD27|TD28"); + m->add_string(F_FLTNUMDOC,0, "NUM.DOC.", 30, 2, 8); + m->add_string(F_FLTTOTDOCDA, 0, "TOT.DOC. DA", 2, 3, 8); + m->add_string(F_FLTTOTDOCA, 0, "A ", 10, 4, 8); - //m->set_handler(DLG_OK, save_conf_handler); - _ordin = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", "D")[0]; - _verso = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", "A")[0]; - m->set(F_ORDER, &_ordin); - m->set(F_VERSO, &_verso); - m->set(F_ORDDATADA, _datada); - m->set(F_ORDDATAA, _dataa); - } - return *m; + // Filtro date + m->add_groupbox(F_FLTDATAGRP, 0, "@BFiltra per data documento", 1, 6, 59, 3); + m->add_date(F_FLTDATADA, 0, "DATA DOC. DAL", 2, 7); + m->add_date(F_FLTDATAA, 0, " AL", 30, 7); + + // Filtro per fornitore + m->add_groupbox(F_FLTFORNGRP, 0, "@BFiltra per parametri fornitore", 1, 9, 59, 4); + m->add_string(F_FLTCODFORN, 0, "CODICE ", 2, 10, 8); + m->add_string(F_FLTPIVA, 0, "P.IVA", 30, 10, 15); + m->add_string(F_FLTRAGSOC, 0, "RAG.SOC.", 2, 11, 48); + + // Ordinatori + m->add_radio(F_ORDER, 0, "@BOrdina per:", 1, 13, 59, "D|N|F|R|P", "DATA|NUMDOC|FORNITORE|RAGSOC|PIVA", "Z"); + m->add_radio(F_VERSO, 0, "@BVerso:", 1, 16, 59, "A|D", "Crescente|Decrescente", "Z"); + + //m->set_handler(DLG_OK, save_conf_handler); + _ordin = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", "D")[0]; + _verso = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", "A")[0]; + + m->set(F_FLTDATADA, _flt_da_data); + m->set(F_FLTDATAA, _flt_a_data); + m->set(F_FLTDATAA, _flt_tipodoc); + m->set(F_FLTNUMDOC, _flt_numdoc); + m->set(F_FLTTOTDOCDA, _flt_tot_doc_da); + m->set(F_FLTTOTDOCA, _flt_tot_doc_a); + m->set(F_FLTCODFORN, _flt_codforn); + m->set(F_FLTPIVA, _flt_piva); + m->set(F_FLTRAGSOC, _flt_ragsoc); + m->set(F_ORDER, &_ordin); + m->set(F_VERSO, &_verso); + + } + return *m; } -void TControllo_mask::open_win_order() +void TControllo_mask::open_win_filter() { - TMask& m = get_win_order(); - m.set(F_ORDDATADA, _datada); - m.set(F_ORDDATAA, _dataa); - m.run(); - _ordin = m.get(F_ORDER)[0]; - _verso = m.get(F_VERSO)[0]; - _datada = m.get_date(F_ORDDATADA); - _dataa = m.get_date(F_ORDDATAA); - ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", &_ordin); - ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", &_verso); + TMask& m = get_win_filter(); + m.set(F_FLTDATADA, _flt_da_data); + m.set(F_FLTDATAA, _flt_a_data); + + m.run(); + + _flt_da_data = m.get_date(F_FLTDATADA); + _flt_a_data = m.get_date(F_FLTDATAA); + + _flt_tipodoc = m.get(F_FLTTIPODOC); + _flt_numdoc = m.get(F_FLTNUMDOC); + _flt_tot_doc_da = m.get_real(F_FLTTOTDOCDA); + _flt_tot_doc_a = m.get_real(F_FLTTOTDOCA); + + _flt_codforn = m.get(F_FLTCODFORN); + _flt_ragsoc = m.get(F_FLTRAGSOC); + _flt_piva = m.get(F_FLTPIVA); + + //Ordinamento + _ordin = m.get(F_ORDER)[0]; + _verso = m.get(F_VERSO)[0]; + ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", &_ordin); + ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", &_verso); } + TToken_string* TControllo_mask::selected_mov() { TSheet_field& movs = sfield(S_CONTROLLO); @@ -839,13 +907,31 @@ bool TControllo_mask::on_field_event(TOperable_field& o, TField_event e, long jo fill(); } break; - case B_ORDER: - if (e == fe_button) - { - open_win_order(); - fill_fppro_sheet(); - } - break; + case B_FILTER_CONF: + if (e == fe_button) + { + open_win_filter(); + fill_fppro_sheet(true); + field(B_FILTER_OFF).enable(); + field(B_FILTER_ON).disable(); + } + break; + case B_FILTER_ON: + if (e == fe_button) + { + fill_fppro_sheet(true); + field(B_FILTER_OFF).enable(); + field(B_FILTER_ON).disable(); + } + break; + case B_FILTER_OFF: + if (e == fe_button) + { + fill_fppro_sheet(false); + field(B_FILTER_ON).enable(); + field(B_FILTER_OFF).disable(); + } + break; case B_ASSOC: if (e == fe_button) { @@ -903,9 +989,11 @@ TControllo_mask::TControllo_mask(const char* codsoc, const char* id_estr, const _id_estr = id_estr; field(B_ESCL).disable(); field(B_ALLESCL).disable(); - get_win_order(); _is_escluso = esclusi; + field(B_FILTER_ON).disable(); + field(B_FILTER_OFF).disable(); + // Fill controllo sheet if (!_is_escluso) import_error_list(); diff --git a/src/f9/f90100.h b/src/f9/f90100.h index 642d02d9d..8eae4a96d 100644 --- a/src/f9/f90100.h +++ b/src/f9/f90100.h @@ -128,14 +128,25 @@ class TControllo_mask : public TAutomask TDate _datada; TDate _dataa; + //Filter variables + TDate _flt_da_data; + TDate _flt_a_data; + TString4 _flt_tipodoc; + TString16 _flt_numdoc; + real _flt_tot_doc_da; + real _flt_tot_doc_a; + TString16 _flt_codforn; + TString _flt_ragsoc; + TString16 _flt_piva; + void associa(); void conferma_esclusi() const; TArray& import_error_list(); void fill(); - void fill_fppro_sheet() const; - TMask& get_win_order(); - void open_win_order(); + void fill_fppro_sheet(bool filter = false) const; + TMask& get_win_filter(); + void open_win_filter(); TToken_string* selected_mov(); TToken_string* selected_fat() const; @@ -148,6 +159,7 @@ public: TControllo_mask(const char* codsoc, const char* id_estr, bool esclusi = false); }; + class TF9_app : public TSkeleton_application { // friend class TMonitor_mask; diff --git a/src/f9/f90100b.h b/src/f9/f90100b.h index ebb2f15be..eda8b0dfd 100644 --- a/src/f9/f90100b.h +++ b/src/f9/f90100b.h @@ -1,10 +1,12 @@ // Maschera controllo errori in comune con monitor e esclusi // Sheet Pacchetti gia' elaborati -#define B_ORDER 201 #define B_ASSOC 202 #define B_SELESCL 203 #define B_ESCL 204 #define B_ALLESCL 205 +#define B_FILTER_CONF 208 +#define B_FILTER_ON 209 +#define B_FILTER_OFF 210 // Sheet movimenti da controllare #define S_CONTROLLO 206 @@ -13,9 +15,22 @@ // Cambi maschera ordinamento sheet FPPRO #define F_ORDER 301 #define F_VERSO 302 -#define F_ORDDATAG 303 -#define F_ORDDATADA 304 -#define F_ORDDATAA 305 + +//Filtro FPPRO +#define F_FLTDATAGRP 310 +#define F_FLTDATADA 311 +#define F_FLTDATAA 312 +#define F_FLTDOCGRP 313 +#define F_FLTTIPODOC 314 +#define F_FLTNUMDOC 315 +#define F_FLTTOTDOCDA 316 +#define F_FLTTOTDOCA 317 +#define F_FLTFORNGRP 318 +#define F_FLTCODFORN 319 +#define F_FLTRAGSOC 320 +#define F_FLTPIVA 321 + + #define F_CSEL 101 #define F_CNUMREG 102 diff --git a/src/f9/f90100b.uml b/src/f9/f90100b.uml index f5a68c7b7..23358dc5a 100644 --- a/src/f9/f90100b.uml +++ b/src/f9/f90100b.uml @@ -2,13 +2,6 @@ TOOLBAR "topbar" 0 0 0 2 -BUTTON B_ORDER 2 2 -BEGIN - PROMPT 1 5 "Ordinamento" - PICTURE TOOL_EDIT - FLAGS "" -END - BUTTON B_ASSOC 2 2 BEGIN PROMPT 1 6 "Associa mov." @@ -43,6 +36,33 @@ BEGIN FLAGS "" END +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 1 "" + PICTURE 0 +END + +BUTTON B_FILTER_CONF 2 2 +BEGIN + PROMPT 1 5 "Impostaz. Filtro" + PICTURE TOOL_ELABORA + FLAGS "" +END + +BUTTON B_FILTER_ON 2 2 +BEGIN + PROMPT 1 5 "Filtro ON" + PICTURE TOOL_CHECK + FLAGS "" +END + +BUTTON B_FILTER_OFF 2 2 +BEGIN + PROMPT 1 5 "Filtro OFF" + PICTURE TOOL_CHECK + FLAGS "" +END + #include ENDPAGE @@ -90,7 +110,7 @@ BEGIN ITEM "Rag. Soc.@20" ITEM "Stato P.IVA" ITEM "P.IVA@8" - ITEM "@1" + ITEM "FPPRO Keys@60" END ENDPAGE