Patch level : 12.0

Files correlati     : f9

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.
This commit is contained in:
Simoe 2022-10-26 15:29:19 +02:00
parent 2528b449a0
commit 77e03434b0
4 changed files with 204 additions and 69 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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 <helpbar.h>
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