Patch level : 12.0 700

Files correlati     : fp
Commento            :
- Corretta visualizzazione monitor passive
- Corretto funzionamento pulsanti toolbar
- Aggiunto filtro per tipo progressivo
This commit is contained in:
Simone Palacino 2019-02-14 22:56:23 +01:00
parent 2ce1d2274b
commit 8d76f94f75
3 changed files with 148 additions and 20 deletions

View File

@ -9,6 +9,7 @@
#include "tsdb.h" #include "tsdb.h"
#include "fp0400a.h" #include "fp0400a.h"
#include "fplib.h" #include "fplib.h"
#include "sheet.h"
enum enum
{ {
@ -20,18 +21,24 @@ enum
found_piva = 2, // Lo trovo con p.iva found_piva = 2, // Lo trovo con p.iva
found_cf = 4, // Non ho p.iva lo trovo con cod.fisc found_cf = 4, // Non ho p.iva lo trovo con cod.fisc
}; };
enum { filtri = 0, elenco_fe = 1, elenco_err = 2 }; // Enum per bottoni toolbar (numero pagina in cui mi trovo)
class TPassive_mask : public TAutomask class TPassive_mask : public TAutomask
{ {
protected: protected:
void set_filter_changed(); void set_filter_changed();
void select_all(int sheet_field);
void select_all_filtri();
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
void next_page(int p) override; void next_page(int p) override;
// Elenco dei protocolli selezionati
void elenco_prots_sel(TString& string) const;
void fill(); void fill();
static int find_fornitore(TLocalisamfile& clifo); static int find_fornitore(TLocalisamfile& clifo);
static void add_row_err_forn(int forn_code, TSheet_field& sf_err, TString& denom); static void add_row_err_forn(int forn_code, TSheet_field& sf_err, TString& denom);
static void aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err); static void aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err);
void aggiungi_prot() const;
void init(); void init();
void load_all_fields(); void load_all_fields();
@ -69,6 +76,7 @@ void TPassive_mask::fill()
TSheet_field& sf = sfield(F_DOCS); TSheet_field& sf = sfield(F_DOCS);
TSheet_field& sf_err = sfield(F_ERR); TSheet_field& sf_err = sfield(F_ERR);
TString query; TString query;
TString prots;
TLocalisamfile clifo(LF_CLIFO); TLocalisamfile clifo(LF_CLIFO);
const TDate dal = get(F_DATAINI); const TDate dal = get(F_DATAINI);
@ -78,8 +86,10 @@ void TPassive_mask::fill()
sf.destroy(); sf.destroy();
sf_err.hide(); sf_err.hide();
sf_err.destroy(); sf_err.destroy();
query << "SELECT YEAR(P7_DATA) AS ANNO, P7_TIPODOC AS [TIPO_SDI], P7_NUMERO AS [NUM_DOC], " << elenco_prots_sel(prots);
query << "SELECT PZ_TIPOPROT AS TIPO_PROT, YEAR(P7_DATA) AS ANNO, P7_TIPODOC AS [TIPO_SDI], P7_NUMERO AS [NUM_DOC], " <<
"P7_DATA AS [DATA_DOC], PQ_IMPTOTDOC AS [TOT_DOC], P2_ANADENOMIN AS [RAG_SOC], P2_ANANOME AS NOME, " << "P7_DATA AS [DATA_DOC], PQ_IMPTOTDOC AS [TOT_DOC], P2_ANADENOMIN AS [RAG_SOC], P2_ANANOME AS NOME, " <<
"P2_ANACOGNOME AS COGNOME, P2_FISCIVACOD AS [P_IVA], P2_CODFISCALE AS [COD_FISC], P2_FISCIVAPAESE AS [COD_PAESE],\n" << "P2_ANACOGNOME AS COGNOME, P2_FISCIVACOD AS [P_IVA], P2_CODFISCALE AS [COD_FISC], P2_FISCIVAPAESE AS [COD_PAESE],\n" <<
"COUNT(PP_ATTACHMENT) AS ATTACHMENT, P1_CODDEST AS [COD_SDI], PU_PEC AS PEC, P1_KEYPRGINVIO AS KEYPROG, P1_KEYHEADERFATT AS KEYHEAD, P1_KEYBODYFATT AS KEYFATT, " << "COUNT(PP_ATTACHMENT) AS ATTACHMENT, P1_CODDEST AS [COD_SDI], PU_PEC AS PEC, P1_KEYPRGINVIO AS KEYPROG, P1_KEYHEADERFATT AS KEYHEAD, P1_KEYBODYFATT AS KEYFATT, " <<
@ -91,7 +101,7 @@ void TPassive_mask::fill()
"LEFT JOIN PAA2600F PAA26 ON P1_KEYPRGINVIO = PP_KEYPRGINVIO and P1_KEYHEADERFATT = PP_KEYHEADERFATT and P1_KEYBODYFATT = PP_KEYBODYFATT\n" << "LEFT JOIN PAA2600F PAA26 ON P1_KEYPRGINVIO = PP_KEYPRGINVIO and P1_KEYHEADERFATT = PP_KEYHEADERFATT and P1_KEYBODYFATT = PP_KEYBODYFATT\n" <<
"LEFT JOIN PAA3200F PAA32 ON P1_KEYPRGINVIO = PU_KEYPRGINVIO and P1_KEYHEADERFATT = PU_KEYHEADERFATT and P1_KEYBODYFATT = PU_KEYBODYFATT\n" << "LEFT JOIN PAA3200F PAA32 ON P1_KEYPRGINVIO = PU_KEYPRGINVIO and P1_KEYHEADERFATT = PU_KEYHEADERFATT and P1_KEYBODYFATT = PU_KEYBODYFATT\n" <<
"LEFT JOIN FPPRO00F FPPRO ON P1_KEYPRGINVIO = PZ_KEYPRGINVIO and P1_KEYHEADERFATT = PZ_KEYHEADERFATT and P1_KEYBODYFATT = PZ_KEYBODYFATT\n" << "LEFT JOIN FPPRO00F FPPRO ON P1_KEYPRGINVIO = PZ_KEYPRGINVIO and P1_KEYHEADERFATT = PZ_KEYHEADERFATT and P1_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"WHERE P7_DATA >= \'" << dal.date2ansi() << "\' AND P7_DATA <= \'" << al.date2ansi() << "\'\n" << "WHERE P7_DATA >= \'" << dal.date2ansi() << "\' AND P7_DATA <= \'" << al.date2ansi() << "\' AND PZ_TIPOPROT IN (" << prots << ")\n" <<
"GROUP BY YEAR(P7_DATA), P7_TIPODOC, P7_NUMERO, P7_DATA, PQ_IMPTOTDOC, P2_ANADENOMIN, P2_ANANOME, P2_ANACOGNOME, P2_FISCIVACOD, P2_CODFISCALE, P2_FISCIVAPAESE,\n" << "GROUP BY YEAR(P7_DATA), P7_TIPODOC, P7_NUMERO, P7_DATA, PQ_IMPTOTDOC, P2_ANADENOMIN, P2_ANANOME, P2_ANACOGNOME, P2_FISCIVACOD, P2_CODFISCALE, P2_FISCIVAPAESE,\n" <<
"P1_CODDEST, PU_PEC, P1_KEYPRGINVIO, P1_KEYHEADERFATT, P1_KEYBODYFATT, PZ_TIPOPROT, PZ_NUMPROT, PZ_ANNOPROT, PZ_TIPOCF, PZ_CLIFOR"; "P1_CODDEST, PU_PEC, P1_KEYPRGINVIO, P1_KEYHEADERFATT, P1_KEYBODYFATT, PZ_TIPOPROT, PZ_NUMPROT, PZ_ANNOPROT, PZ_TIPOCF, PZ_CLIFOR";
fp_db().sq_set_exec(query, false); fp_db().sq_set_exec(query, false);
@ -109,6 +119,29 @@ void TPassive_mask::fill()
sf_err.show(); sf_err.show();
} }
void TPassive_mask::elenco_prots_sel(TString& string) const
{
TString_array elenco;
TSheet_field& sf = sfield(F_PROT);
FOR_EACH_SHEET_ROW(sf, nr, row)
{
if (*row->get(0) == 'X')
elenco.add(row->get());
}
// Creo una stringa così fatta: "'a', 'b', 'c'". (con elenco avente "a", "b" e "c" come stringhe)
if (elenco.items() > 0)
{
for (int i = 0; i < elenco.items() - 1; i++)
string << "\'" << elenco.row(i) << "\', ";
string << "\'" << elenco.row(elenco.items() - 1) << "\'";
}
else
string = "\'\'";
}
void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err) void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err)
{ {
int forn_code = -1; int forn_code = -1;
@ -162,6 +195,24 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(key_prot); row.add(key_prot);
} }
void TPassive_mask::aggiungi_prot() const
{
TSheet_field& sf_prot = sfield(F_PROT);
TString query = "";
query << "SELECT DISTINCT(PZ_TIPOPROT) AS TIPO_PROT \nFROM FPPRO00F";
fp_db().sq_set_exec(query, false);
while (fp_db().sq_next())
{
TToken_string& row = sf_prot.row(sf_prot.items()+1);
row.add("", 0);
row.add(fp_db().sq_get("TIPO_PROT"));
}
sf_prot.force_update();
}
void TPassive_mask::add_row_err_forn(int forn_code, TSheet_field& sf_err, TString& denom) void TPassive_mask::add_row_err_forn(int forn_code, TSheet_field& sf_err, TString& denom)
{ {
TToken_string& row_err = sf_err.row(-1); TToken_string& row_err = sf_err.row(-1);
@ -175,7 +226,7 @@ void TPassive_mask::add_row_err_forn(int forn_code, TSheet_field& sf_err, TStrin
row_err.add("Salvato in db ma non corrisponde a un fornitore."); row_err.add("Salvato in db ma non corrisponde a un fornitore.");
break; break;
case no_forn: case no_forn:
row_err.add("Non trovato fornitore con per quella P.IVA."); row_err.add("Non trovato fornitore per quella P.IVA.");
break; break;
case no_match_cf: case no_match_cf:
row_err.add("Trovato fornitore ma il codice fiscale non corrisponde."); row_err.add("Trovato fornitore ma il codice fiscale non corrisponde.");
@ -250,12 +301,34 @@ int TPassive_mask::find_fornitore(TLocalisamfile& clifo)
void TPassive_mask::init() void TPassive_mask::init()
{ {
aggiungi_prot();
} }
void TPassive_mask::load_all_fields() void TPassive_mask::load_all_fields()
{ {
} }
void TPassive_mask::select_all(int sheet_field)
{
TSheet_field& docs = sfield(sheet_field);
TString_array& sht = docs.rows_array();
const int items = sht.items();
if (items > 0)
{
const TString4 select = *sht.row(0).get(0) == 'X' ? "" : "X";
for (int i = 0; i < items; i++)
sht.row(i).add(select, 0);
docs.force_update();
}
}
void TPassive_mask::select_all_filtri()
{
}
void TPassive_mask::salva_for() void TPassive_mask::salva_for()
{ {
if(fp_db().sq_is_connect()) if(fp_db().sq_is_connect())
@ -287,9 +360,11 @@ void TPassive_mask::salva_for()
fp_db().sq_set_exec(q_update, false); fp_db().sq_set_exec(q_update, false);
} }
} }
row->add("", 0);
} }
} }
fp_db().sq_commit(); fp_db().sq_commit();
sf.force_update();
} }
} }
@ -297,9 +372,35 @@ bool TPassive_mask::on_field_event(TOperable_field& o, TField_event e, long joll
{ {
switch (o.dlg()) switch (o.dlg())
{ {
case S_SELCODPROT:
if(e == fe_modify)
set_filter_changed();
break;
case F_PROT:
if(e == fe_init)
init();
break;
case DLG_ALL:
if (e == fe_button)
switch (curr_page())
{
case elenco_fe:
select_all(F_DOCS);
case filtri:
select_all(F_PROT);
set_filter_changed();
break;
default: break;
}
break;
case DLG_SAVEREC: case DLG_SAVEREC:
if (e == fe_button) if (e == fe_button)
salva_for(); switch(curr_page())
{
case elenco_fe:
salva_for();
default: break;
}
break; break;
case F_DATAINI: case F_DATAINI:
if (e == fe_init) if (e == fe_init)
@ -313,7 +414,7 @@ bool TPassive_mask::on_field_event(TOperable_field& o, TField_event e, long joll
default: break; default: break;
} }
if ((e == fe_modify || e >= se_enter) && jolly == 0) if ((e == fe_modify || e >= se_enter) && jolly == 0)
if (o.dlg() >= START_MASK && o.dlg() <= END_MASK) if (o.dlg() >= START_MASK && o.dlg() <= END_MASK || o.dlg() == F_PROT)
set_filter_changed(); set_filter_changed();
return true; return true;
@ -326,7 +427,6 @@ bool TPassive_mask::on_field_event(TOperable_field& o, TField_event e, long joll
class TPassive_app : public TSkeleton_application class TPassive_app : public TSkeleton_application
{ {
public: public:
void main_loop() override; void main_loop() override;
@ -338,7 +438,6 @@ void TPassive_app::main_loop()
TPassive_mask mask; TPassive_mask mask;
while(mask.run() == K_ENTER) while(mask.run() == K_ENTER)
{ {
} }
} }

View File

@ -1,10 +1,15 @@
#define START_MASK 401 #define START_MASK 501
#define F_DATAINI 401 #define F_DATAINI 501
#define F_DATAEND 402 #define F_DATAEND 502
#define F_SAVEFOR 403 #define F_SAVEFOR 503
#define END_MASK 499 #define END_MASK 599
#define F_PROT 401
#define S_SELCODPROT 101
#define S_CODPROT 102
//#define F_DOCUMENTI_TIPO 301 //#define F_DOCUMENTI_TIPO 301
//#define S_SELCODNUM 101 //#define S_SELCODNUM 101
//#define S_TIPODOCSEL 102 //#define S_TIPODOCSEL 102

View File

@ -15,13 +15,6 @@ BEGIN
FLAGS "" FLAGS ""
END END
BUTTON DLG_FINDREC 2 2
BEGIN
PROMPT 1 1 "Segna pronto"
PICTURE TOOL_PERMISSIONS
FLAGS "D"
END
#include <helpbar.h> #include <helpbar.h>
ENDPAGE ENDPAGE
@ -42,6 +35,13 @@ BEGIN
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
SPREADSHEET F_PROT 25 10
BEGIN
PROMPT 1 6 "Selezionare o aggiungere un filtro sul Tipo Progressivo"
ITEM "@1"
ITEM "Codice\nProtocol.@12"
END
ENDPAGE ENDPAGE
@ -86,6 +86,29 @@ ENDPAGE
ENDMASK ENDMASK
PAGE "Spread protocol " 0 2 0 0
BOOLEAN S_SELCODPROT
BEGIN
PROMPT 1 1 ""
FLAGS ""
END
STRING S_CODPROT 12
BEGIN
PROMPT 1 1 ""
FLAGS ""
END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
ENDPAGE
ENDMASK
PAGE "Documento" -1 -1 78 9 PAGE "Documento" -1 -1 78 9
BOOLEAN S_SELECTED BOOLEAN S_SELECTED
@ -281,6 +304,7 @@ END
ENDPAGE ENDPAGE
ENDMASK ENDMASK
PAGE "Riga Errore" -1 -1 69 14 PAGE "Riga Errore" -1 -1 69 14
STRING S_STATOERR 2 STRING S_STATOERR 2