From 215a96b16c099dfa8827b0b0e3410a351986632a Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Fri, 5 Apr 2019 11:35:09 +0200 Subject: [PATCH] Patch level : 12.0 758 Files correlati : cg2100 Commento : Riordinato e sistemato codice --- src/cg/cg2100.cpp | 50 ++++++++++++++++++++++++++++------------------- src/cg/cg2102.cpp | 14 +++++-------- src/cg/cg2102.h | 15 +++++++++++--- 3 files changed, 47 insertions(+), 32 deletions(-) diff --git a/src/cg/cg2100.cpp b/src/cg/cg2100.cpp index 0fcaf0980..bbfad5b60 100755 --- a/src/cg/cg2100.cpp +++ b/src/cg/cg2100.cpp @@ -1567,17 +1567,18 @@ int TPrimanota_application::rewrite(const TMask& m) void TPrimanota_application::clean_fppro() const { TMask& msk = curr_mask(); - const KEY last = msk.last_key(); + const KEY last_key = msk.last_key(); - if (_mode != MODE_MOD) - return; - if (!fexist("fp0.exe") || fp_settings().get_db_indirizzo().empty() || fp_settings().is_f8()) - return; // Salto il salvataggio in FPPRO - if (last != 127 && last != K_SAVE) // Salto se non sto eliminando + // Controlli: solo in mod modifica; che abbia fp (no F8); che non sono in salvataggio + if (_mode != MODE_MOD + && !is_fp() + && last_key != 127 && last_key != K_SAVE) return; - TString query; const TString& numreg = msk.get(F_NUMREG); + // Levo riferimento registrazione da FPPRO + // Aggiorno database rimettendo i valori predefiniti in numregcont e dataregcont + TString query; query << "UPDATE FPPRO00F\n" << "SET PZ_NUMREGCONT = 0, PZ_DATAREGCONT = '2001-01-01'\n" << "WHERE PZ_NUMREGCONT = '" << numreg << "'"; @@ -1585,6 +1586,11 @@ void TPrimanota_application::clean_fppro() const fp_db().sq_commit(); } +bool TPrimanota_application::is_fp() +{ + return fexist("fp0.exe") && !fp_settings().get_db_indirizzo().empty() && !fp_settings().is_f8(); +} + bool TPrimanota_application::remove() { @@ -2209,9 +2215,11 @@ bool TPrimanota_application::save(bool check_dirty) const int fp_code = save_fppro(); const bool saved = TRelation_application::save(check_dirty); - if (saved && fp_code > 0 && !save_dbmov()) + // Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov + if (saved) { - message_box(TString("ATTENZIONE:") << " non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" << + if(fp_code > 0 && !save_dbmov()) + message_box(TString("ATTENZIONE:") << " non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" << "Movimento registrato senza collegamento ai documenti in ingresso."); } @@ -2334,16 +2342,21 @@ int TPrimanota_application::save_fppro() const const KEY last = msk.last_key(); // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP - if (!fexist("fp0.exe") || fp_settings().get_db_indirizzo().empty() || fp_settings().is_f8()) - return pro_nofp; // Salto il salvataggio in FPPRO + if (!is_fp()) + return pro_nofp; if (!fp_db().sq_is_connect()) { message_box("Attenzione connesione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata."); return pro_nofp; } + // Anzitutto guardo la modalita' in cui sono + // Se in modalita' inserimento continuo normalmente if (_mode != MODE_INS) { + // Se in modalita' modifica e sto salvando + // Guardo se quel documento corrisponde a un doc in FPPRO + // Lancio messaggio di avvertimento pulisco su db e proseguo col salvataggio del documento modificato if(_mode == MODE_MOD && last == K_SAVE) { TString query; @@ -2352,12 +2365,13 @@ int TPrimanota_application::save_fppro() const if (fp_db().sq_get_int("COUNT") != 0) { message_box(TString("Attenzione!") << " E' stato modificato un movimento già collegato a un documento in ingresso."); - clean_fppro(); + clean_fppro(); // Pulisco db msk.set(F_PROKEY, ""); msk.set(F_PROTFPPRO, ""); - save_dbmov(); + save_dbmov(); // Svuoto riferimento doc ingresso sul mov } } + // In altre modalita' esco senza fare nulla sul db else return pro_notsaved; } @@ -2365,13 +2379,9 @@ int TPrimanota_application::save_fppro() const TLocalisamfile clifo(LF_CAUSALI); clifo.setkey(1); clifo.put("CODCAUS", msk.get(F_CODCAUS)); - if (clifo.read() != NOERR) + if (clifo.read() != NOERR && clifo.get("TIPODOC") != "FA") return pro_notsaved; - if (clifo.get("TIPODOC") != "FA") - return pro_notsaved; - - - if (last != K_SAVE) { // Salto se sto uscendo + if (last != K_SAVE) { // Se sto uscendo avvertimento di non salvataggio e salto message_box("La registrazione del movimento non verrà salvata sul database."); return pro_notsaved; } @@ -2420,7 +2430,7 @@ int TPrimanota_application::save_fppro() const const int n = fp_db().sq_items(); if (n != 1) { - message_box("Attenzione non è stato possibile indentificare\nil documento con una specifica fattura in ingresso"); + message_box("Attenzione non è stato possibile indentificare\nil documento con una specifica fattura in ingresso.\nSi prega di riportare i dati dei documenti selezionandolo con l'apposito sistema di aggancio alle fatture di ingresso"); return pro_notsaved; } const int numreg = fp_db().sq_get_int("PZ_NUMREGCONT"); diff --git a/src/cg/cg2102.cpp b/src/cg/cg2102.cpp index 6c7db0f09..a2dbf14da 100755 --- a/src/cg/cg2102.cpp +++ b/src/cg/cg2102.cpp @@ -3453,13 +3453,10 @@ bool TPrimanota_application::protiva_handler(TMask_field& f, KEY key) bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key) { - TMask& cg_msk = f.mask(); - // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP - if (!(fexist("fp0.exe") && !fp_settings().get_db_indirizzo().empty() && !fp_settings().is_f8())) - return true; - if (key != 32 && key != 9) + if (!is_fp() && key != 32 && key != 9) return true; + TMask& cg_msk = f.mask(); TMask* msk = new TMask("cgFPPRO"); msk->set_handler(DLG_CONFIG, fppro_handler); msk->set_handler(DLG_LINK, fppro_ok_handler); @@ -3862,11 +3859,10 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key) bool TPrimanota_application::load_fppro_mask(TMask* msk, KEY k) { - if (k != 32) - return false; // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP - if (!fexist("fp0.exe") || fp_settings().get_db_indirizzo().empty() || fp_settings().is_f8()) - return false; // Salto il salvataggio in FPPRO + if (k != 32 + && !is_fp()) + return false; if (!fp_db().sq_is_connect()) { message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata."); diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index b8a3b9b60..d8d39a381 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -169,9 +169,13 @@ class TPrimanota_application : public TRelation_application static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS - static bool fppro_handler(TMask_field& f, KEY k); // Carica spread fppro - static bool fppro_ok_handler(TMask_field& f, KEY k); // Riporta doc FPPRO in testata + // Handlers per aggancio FPPRO + // Bottone per maschera FPPRO static bool fppro_mask(TMask_field& f, KEY key); + // Bottone carica documenti in maschera FPPRO + static bool fppro_handler(TMask_field& f, KEY k); + // Bottone riporta doc FPPRO in testata Prima Nota + static bool fppro_ok_handler(TMask_field& f, KEY k); void reset_sheet_row(TSheet_field& s, int n); int crea_somma_spese(TImporto& imp); @@ -187,10 +191,16 @@ protected: // TApplication virtual void ini2mask(TConfig& ini, TMask& msk, bool query); virtual void mask2ini(const TMask& msk, TConfig& ini); + // Metodi per aggancio FPPRO (solo su operazioni di Fattura di Acquisto) + // Carica documenti FPPRO sulla maschera static bool load_fppro_mask(TMask* msk, KEY k = 32); + // Salvo dati fornitore e registrazione contabile sul db FPPRO int save_fppro() const; // Salva sul movimento il riferimento al documento in FPPRO bool save_dbmov() const; + // Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete) + void clean_fppro() const; + static bool is_fp(); virtual bool save(bool check_dirty); bool get_mask_swap_file(TFilename& name) const; @@ -212,7 +222,6 @@ protected: // TRelation_application virtual int read(TMask& m); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); - void clean_fppro() const; virtual bool remove(); virtual void write_enable(bool) {} virtual bool protected_record(TRectype& rec);