From 0dfeffddb3a70784e4bde4ae329e0cebe709eaf8 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Tue, 14 Jan 2020 17:56:10 +0100 Subject: [PATCH] Patch level : 12.0 920 Files correlati : fp0.exe Commento : - Corretta esportazione informazioni dichiarazioni d'intento - Corretta data di registrazione con data ricezione o con una specificata (f1) --- src/fp/fp0400.cpp | 73 +++++++++++++++++++++++++++++++++++++--------- src/fp/fp0400a.h | 17 ++++++----- src/fp/fp0400a.uml | 14 ++++++++- 3 files changed, 82 insertions(+), 22 deletions(-) diff --git a/src/fp/fp0400.cpp b/src/fp/fp0400.cpp index 7c64807c1..72b4f2b07 100644 --- a/src/fp/fp0400.cpp +++ b/src/fp/fp0400.cpp @@ -69,8 +69,8 @@ protected: // Tasto aggiorna: aggiorna cliente che non corrisponde. bool aggiorna_forn(); void salva_for() const; - void clean_ini(const TString& filename) const; - void run_cg0(const TString& filename) const; + static void clean_ini(const TString& filename); + static void run_cg0(const TString& filename); void elenco_prots_sel(TString& string) const; static vector& get_righe_iva(TToken_string& keys); @@ -89,7 +89,7 @@ protected: void fattsel(int dlg, TField_event& e); // Non permette la selezione multipla delle righe void sel() const; - bool on_key(KEY key); + bool on_key(KEY key) override; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; void check_buttons(int p) const; void next_page(int p) override; @@ -102,12 +102,13 @@ protected: // Aggiunge i protocolli che sono già presenti per le fatture nel db alla tabellina per il filtro void aggiungi_prot() const; void init() const; - + void save_all() const; public: TString& get_fattsel() const; static void auto_assoc(); TPassive_mask(bool f1); + ~TPassive_mask() { save_all(); } }; bool TPassive_mask::clifo_handler(TMask_field& f, KEY key) @@ -450,8 +451,6 @@ void TPassive_mask::auto_assoc() { TToken_string key("",';'); key.add(fp_db().sq_get("KEYPROG")); key.add(fp_db().sq_get("KEYHEAD")); key.add(fp_db().sq_get("KEYFATT")); - if (TString(key.get(0)) == "fNuBh" && TString(key.get(1)) == "05094400966" && TString(key.get(2)) == "TD012019-07-22609") - bool simo = true; clifo.zero(); clifo.put(CLI_TIPOCF, "F"); @@ -547,6 +546,11 @@ void TPassive_mask::init() const aggiungi_prot(); } +void TPassive_mask::save_all() const +{ + ini_set_bool(CONFIG_DITTA, PARA_FP, "F_USEDATARIC", get_bool(F_USEDATARIC)); +} + bool TPassive_mask::causfa_handler(TMask_field& f, KEY k) { if (k == K_TAB && f.focusdirty()) @@ -620,7 +624,7 @@ void TPassive_mask::salva_for() const } } -void TPassive_mask::clean_ini(const TString& filename) const +void TPassive_mask::clean_ini(const TString& filename) { static TString remove_string; #ifdef DBG @@ -631,7 +635,7 @@ void TPassive_mask::clean_ini(const TString& filename) const remove_files(remove_string, false); } -void TPassive_mask::run_cg0(const TString& filename) const +void TPassive_mask::run_cg0(const TString& filename) { static TString run_string; #ifdef DBG @@ -642,6 +646,11 @@ void TPassive_mask::run_cg0(const TString& filename) const TExternal_app(run_string).run(); } +bool is_tipomov_nc(const TString& codcaus) +{ + return TCausale(codcaus).tipomov() == tm_nota_credito; +} + int TPassive_mask::prepara_contab() const { const int err = check_err(); @@ -685,7 +694,13 @@ int TPassive_mask::prepara_contab() const contab_ini.set_paragraph(LF_MOV); // [23] contab_ini.set("CODCAUS", codcaus); contab_ini.set("CODCF", row->get(sf.cid2index(S_FORNITORE))); - contab_ini.set("DATACOMP", TDate(TODAY)); + TDate datareg; + if (get_bool(F_USEDATARIC)) + datareg = TDate(row->get(sf.cid2index(S_DATARIC))); + else + datareg = !get(F_DATAREGDIF).empty() ? TDate(get(F_DATAREGDIF)) : TDate(TODAY); + contab_ini.set("DATAREG", datareg); + contab_ini.set("DATACOMP", datareg); contab_ini.set("DATADOC", row->get(sf.cid2index(S_DATADOC))); contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC))); contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7)); @@ -715,7 +730,7 @@ int TPassive_mask::prepara_contab() const int i = 1; for (auto it = riva.begin(); it != riva.end(); ++it) { - contab_ini.set_paragraph(LF_RMOVIVA, i); + contab_ini.set_paragraph(LF_RMOVIVA, i); // [25] contab_ini.set("IMPONIBILE", abs(it->imponibile).string()); contab_ini.set("IMPOSTA", abs(it->imposta).string()); contab_ini.set("PERCIVA", it->aliquota.string()); @@ -735,14 +750,33 @@ int TPassive_mask::prepara_contab() const for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) { const int riga = real(fp_db().sq_get("RIGA")).integer(); - contab_ini.set_paragraph(LF_SCADENZE, riga); // Setto il paragrafo con riga scad + contab_ini.set_paragraph(LF_SCADENZE, riga); // Setto il paragrafo con riga scad [29] contab_ini.set("DATASCAD", fp_db().sq_get_date("DATA")); contab_ini.set("IMPORTO", fp_db().sq_get("IMPORTO")); contab_ini.set("NRATA", riga); contab_ini.set("NRIGA", "1"); } + + if(check_causale(codcaus, "NC", true) && is_tipomov_nc(codcaus)) + { + contab_ini.set_paragraph(LF_MOV); // Aggiungo i riferimenti al documento se nota credito: GESTISCO DA CG PER IMPOSTARE PARTITE/SCADENZIARIO + where_q.cut(0) << "WHERE PD_KEYPRGINVIO = '" << keys.get(0) << "'"; + where_q << " AND PD_KEYHEADERFATT = '" << keys.get() << "'"; + where_q << " AND PD_KEYBODYFATT = '" << keys.get() << "'"; + query.cut(0) << "SELECT PD_RIFNUMLINEA AS NUMLINEA, PD_IDDOC AS DOC, PD_DATADOC AS DATADOC\nFROM PAA1400F\n" << where_q; + fp_db().sq_set_exec(query, false); + bool ok = fp_db().sq_next(); + for(int j = 0; ok; ok = fp_db().sq_next(), j++) + { + contab_ini.set(TString("NUMLINEA(") << j << ")", fp_db().sq_get("NUMLINEA")); + contab_ini.set(TString("DOC(") << j << ")", fp_db().sq_get("DOC")); + contab_ini.set(TString("DATADOC(") << j << ")", fp_db().sq_get("DATADOC")); + } + } + row->add("", 0); + break; // Chiudo subito tanto se ne può selezionare solo una alla volta } } @@ -936,7 +970,7 @@ void TPassive_mask::new_forn() query << "' AND PU_KEYHEADERFATT = '" << keys.get(); query << "' AND PU_KEYBODYFATT = '" << keys.get() << "'"; fp_db().sq_set_exec(query); - TString pec = fp_db().sq_get("PEC"); + const TString pec = fp_db().sq_get("PEC"); TString num; num.format("%04d", nr); #ifdef DBG @@ -1053,7 +1087,7 @@ bool TPassive_mask::aggiorna_forn() row->add("", 0); } if (count) - run_cg0(newf); + run_cg0(newf); auto_assoc(); _filter_changed = true; next_page(1000); @@ -1218,6 +1252,17 @@ bool TPassive_mask::on_field_event(TOperable_field& o, TField_event e, long joll field(F_PARIVA).enable(en); field(F_CODFISC).enable(en); } + case F_USEDATARIC: + if (e == fe_init) + set(F_USEDATARIC, ini_get_bool(CONFIG_DITTA, PARA_FP, "F_USEDATARIC", true) ? "X" : ""); + if(e == fe_init || e == fe_modify) + { + const bool use = get_bool(F_USEDATARIC); + field(F_DATAREGDIF).enable(!use); + if (!use && get(F_DATAREGDIF).empty()) + set(F_DATAREGDIF, TDate(TODAY)); + } + break; default: break; } if (o.dlg() >= F_ASSOC && o.dlg() <= F_CONTABIL) @@ -1331,4 +1376,4 @@ int fp0400(int argc, char * argv[]) TPassive_app fpas; fpas.run(argc, argv, TR("Fatturazione F.P.")); return 0; -} \ No newline at end of file +} diff --git a/src/fp/fp0400a.h b/src/fp/fp0400a.h index 9944c954f..58408ab60 100644 --- a/src/fp/fp0400a.h +++ b/src/fp/fp0400a.h @@ -12,13 +12,16 @@ #define F_GROUPCON 511 #define F_GROUPCON2 512 #define F_PERIODPREC 513 -#define F_GROUPCAU 514 -#define F_ENABLEFORN 515 -#define F_FORNITORE 516 -#define F_RAGSOC 517 -#define F_STATOPAIV 518 -#define F_PARIVA 519 -#define F_CODFISC 520 +#define F_USEDATARIC 514 +#define F_DATAREGDIF 515 +#define F_GROUPCAU 516 +#define F_ENABLEFORN 517 +#define F_FORNITORE 518 +#define F_RAGSOC 519 +#define F_STATOPAIV 520 +#define F_PARIVA 521 +#define F_CODFISC 522 + #define END_MASK 599 diff --git a/src/fp/fp0400a.uml b/src/fp/fp0400a.uml index 12388022d..d4da3098c 100644 --- a/src/fp/fp0400a.uml +++ b/src/fp/fp0400a.uml @@ -221,7 +221,7 @@ BEGIN MODULE F1 END -GROUPBOX F_GROUPCON2 59 3 +GROUPBOX F_GROUPCON2 59 5 BEGIN PROMPT 33 16 "@BContabilizzazione automatica:" END @@ -232,6 +232,18 @@ BEGIN MODULE F1 END +BOOLEAN F_USEDATARIC +BEGIN + PROMPT 34 18 "Utilizza data di ricezione per la registrazione" + MODULE F1 +END + +DATE F_DATAREGDIF +BEGIN + PROMPT 34 19 "Data diversa da quella di ricezione" + MODULE F1 +END + ENDPAGE PAGE "Elenco Fatture" 0 2 0 0