Patch level : 12.0 736

Files correlati     : fp
Commento            : Corretto monitor fatture passive
- Messo una volta sola denominazione in scheda errori fornitori
- Aggiunte funzioni clean_cg0 e run_cg0 per gestire files.ini
- Sistemato ciclo per chiamata e creazione files.ini
This commit is contained in:
Mattia Tollari 2019-03-18 16:43:44 +01:00
parent ee493c3790
commit 8ca1befb44
2 changed files with 70 additions and 51 deletions

View File

@ -12,6 +12,7 @@
#include "sheet.h"
#include "execp.h"
#include "dongle.h"
#include <map>
enum
{
@ -28,13 +29,27 @@ enum { filtri = 0, elenco_fe = 1, elenco_err = 2 }; // Enum per bottoni toolbar
class TPassive_mask : public TAutomask
{
protected:
bool _filter_changed;
TFilename tmp_dir;
struct TForn_err
{
int forn_code;
int fatt_err;
};
std::map<TString, TForn_err> _list_fatt_err;
void set_filter_changed();
void select_all(int sheet_field);
// Tasto nuovo: apre nuovo fornitore valorizzando già i dati dalla fattura
void new_forn();
// Tasto aggiorna: aggiorna cliente che non corrisponde.
void aggiorna_forn();
void salva_for() const;
void clean_cg0(const TString& filename) const;
void run_cg0(const TString& filename) const;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
void next_page(int p) override;
// Elenco dei protocolli selezionati
@ -46,24 +61,15 @@ protected:
// Aggiunge i protocolli che sono già presenti per le fatture nel db alla tabellina per il filtro
void aggiungi_prot() const;
void init();
void load_all_fields();
TToken_string _forn_code;
TToken_string _list_fatt_err;
bool _filter_changed;
void salva_for() const;
public:
void save_all_fields() const;
TPassive_mask() : TAutomask("fp0400a"), _filter_changed(true)
{
tmp_dir = tmp_dir.tempdir();
load_all_fields();
_forn_code = "";
_forn_code.separator('|');
_list_fatt_err = "";
_list_fatt_err.separator('|');
}
};
@ -119,8 +125,7 @@ void TPassive_mask::fill()
"ORDER BY PZ_ANNOPROT DESC, PZ_TIPOPROT ASC, PZ_NUMPROT DESC";
fp_db().sq_set_exec(query, false);
_forn_code = "";
_list_fatt_err = "";
_list_fatt_err.clear();
while(fp_db().sq_next())
{
aggiungi_riga(clifo, sf, sf_err);
@ -185,31 +190,27 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(fp_db().sq_get("TIPO_SDI"));
row.add(fp_db().sq_get("NUM_DOC"));
// Trasformo formato data da yyyy-mm-gg a italiano
TDate date_t(fp_db().sq_get_date("DATA_DOC"));
row.add(date_t);
row.add(fp_db().sq_get_date("DATA_DOC"));
row.add(fp_db().sq_get("TOT_DOC"));
// Dopo aver fatto le ricerche se lo trovo lo segno e lo aggiungo, se no coloro la cella
TString forn_str; forn_str << forn_code;
TString nr_row; nr_row << sf.items();
if(forn_code < 0)
{
_forn_code.add(forn_str);
_list_fatt_err.add(nr_row);
}
if (forn_code == 0) row.add("X");
else row.add("");
// Decido se mettere o meno il flag
if (forn_code == 0)
row.add("X");
else
row.add("");
// Valorizzo le colonne rimanenti o la tabella degli errori
if (forn_code >= 0)
{
row.add(clifo.get(CLI_CODCF));
row.add(clifo.get(CLI_RAGSOC));
}
else
else if (_list_fatt_err.find(denom) == _list_fatt_err.end())
{
//sf.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, 2, sf.cid2index(S_FORNITORE));
//sf.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, 2, sf.cid2index(S_RAGSOC));
TForn_err& forn_err = _list_fatt_err[denom];
forn_err.forn_code = forn_code;
forn_err.fatt_err = sf.items() - 1;
add_row_err_forn(forn_code, sf_err, denom);
}
@ -248,7 +249,7 @@ void TPassive_mask::aggiungi_prot() const
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(const int forn_code, TSheet_field& sf_err, TString& denom)
{
TToken_string& row_err = sf_err.row(-1);
row_err.add(fp_db().sq_get("COD_PAESE"), 1);
@ -399,15 +400,31 @@ void TPassive_mask::salva_for() const
}
}
void TPassive_mask::clean_cg0(const TString& filename) const
{
static TString remove_string;
remove_string.cut(0) << tmp_dir << "\\" << filename << "*.*";
remove_files(remove_string, false);
}
void TPassive_mask::run_cg0(const TString& filename) const
{
static TString run_string;
run_string.cut(0) << "cg0 -1 -i" << tmp_dir << "\\" << filename << "*" << ".ini" << " /u" << user();
TExternal_app(run_string).run();
}
void TPassive_mask::new_forn()
{
TSheet_field& sf = sfield(F_ERR);
TString newf = "fpnewf";
static const TString newf = "fpnewf";
clean_cg0(newf);
FOR_EACH_SHEET_ROW(sf, nr, row)
{
int cod_forn = _forn_code.get_int(nr); // Prendo codice di errore associazione fornitore
int n_row_elenco = _list_fatt_err.get_int(nr); // Prendo che numero di riga a cui mi riferisco in fatture
const TString denom = row->get(sf.cid2index(S_RAGSERR));
TForn_err& forn_err = _list_fatt_err[denom];
const int& cod_forn = forn_err.forn_code; // Prendo codice di errore associazione fornitore
const int& n_row_elenco = forn_err.fatt_err; // Prendo che numero di riga a cui mi riferisco in fatture
TSheet_field& f_docs = sfield(F_DOCS); // Prendo SheetField da elenco fatture
TToken_string& row_elenco_fatt = f_docs.row(n_row_elenco); // Prendo riga dall'elenco delle fatture
TToken_string keys(row_elenco_fatt.get(f_docs.cid2index(S_PROKEY)), ';'); // Dalla riga leggo la chiave del db
@ -424,7 +441,6 @@ void TPassive_mask::new_forn()
TString num; num.format("%04d", nr);
TFilename newf_ini;
TString temp_path = newf_ini.tempdir();
newf_ini.tempdir() << "\\" << newf << num << ".ini";
TConfig forn_conf(newf_ini, "Transaction");
@ -444,12 +460,10 @@ void TPassive_mask::new_forn()
forn_conf.set("RAGGOR", "O");
forn_conf.set("PADESTIN", row_elenco_fatt.get(sf.cid2index(S_CODSDI)));
TExternal_app app(TString("cg0 -1 -i") << temp_path << "\\" << newf << "*" << ".ini" << " /u" << user());
app.run();
row->add("", 0);
}
}
run_cg0(newf);
sf.force_update();
}
@ -457,28 +471,35 @@ void TPassive_mask::aggiorna_forn()
{
TSheet_field& sf = sfield(F_ERR);
static const TString newf = "fpaggf";
clean_cg0(newf);
FOR_EACH_SHEET_ROW(sf, nr, row)
{
const int cod_forn = _forn_code.get_int(nr); // Prendo codice di errore associazione fornitore
const int n_row_elenco = _list_fatt_err.get_int(nr); // Prendos che numero di riga a cui mi riferisco in fatture
const TString denom = row->get(sf.cid2index(S_RAGSERR));
TForn_err& forn_err = _list_fatt_err[denom];
const int& cod_forn = forn_err.forn_code; // Prendo codice di errore associazione fornitore
const int& n_row_elenco = forn_err.fatt_err; // Prendo che numero di riga a cui mi riferisco in fatture
TSheet_field& f_docs = sfield(F_DOCS); // Prendo SheetField da elenco fatture
TToken_string& row_elenco_fatt = f_docs.row(n_row_elenco); // Prendo riga dall'elenco delle fatture
if (row->starts_with("X") && cod_forn == no_match_cf)
{
TLocalisamfile clifo(LF_CLIFO);
bool is_not_gruppo_iva = false;
clifo.setkey(5);
clifo.put(CLI_TIPOCF, 'F');
clifo.put(CLI_STATOPAIV, row->get(1));
clifo.put(CLI_PAIV, row->get(2));
is_not_gruppo_iva = (clifo.read() == NOERR && clifo.get(CLI_ALLEG) != "G");
if(is_not_gruppo_iva)
clifo.put(CLI_STATOPAIV, row->get(sf.cid2index(S_STATOERR)));
clifo.put(CLI_PAIV, row->get());
if(clifo.read() != NOERR)
{
TString msg = "Impossibile trovare il fornitore scelto ";
msg << row->get(sf.cid2index(S_STATOERR)) << " " << row->get();
warning_box(msg);
continue;
}
if(clifo.get(CLI_ALLEG) != "G") // Controllo che non sia un gruppo IVA
{
TString num; num.format("%04d", nr);
TFilename newf_ini;
TString temp_path = newf_ini.tempdir();
newf_ini.tempdir() << "\\" << newf << num << ".ini";
TConfig forn_conf(newf_ini, "Transaction");
@ -487,15 +508,13 @@ void TPassive_mask::aggiorna_forn()
forn_conf.set_paragraph("20");
forn_conf.set("TIPOCF", "F");
forn_conf.set("COFI", row->get(sf.cid2index(S_CODFIERR)));
forn_conf.set("CODCF", row_elenco_fatt.get(sf.cid2index(S_FORNITORE)));
forn_conf.set("CODCF", clifo.get(CLI_CODCF));
TExternal_app app(TString("cg0 -1 -i") << temp_path << "\\" << newf << "*" << ".ini" << " /u" << user());
message_box(TString("Sto andando a modificare il codice fiscale del fornitore:\n") << row->get(sf.cid2index(S_RAGSERR)));
app.run();
row->add("", 0);
}
}
}
run_cg0(newf);
sf.force_update();
}