diff --git a/src/cg/cg2100.cpp b/src/cg/cg2100.cpp index 12be3f2f3..2706a9db5 100755 --- a/src/cg/cg2100.cpp +++ b/src/cg/cg2100.cpp @@ -20,6 +20,8 @@ // Campi su maschera #include "cg2100.h" +#include "tsdb.h" +#include "../fp/fplib.h" /////////////////////////////////////////////////////////// // Dati incasso immediato @@ -2164,6 +2166,7 @@ bool TPrimanota_application::save(bool check_dirty) _swap_mask = false; return true; } + save_fppro(); return TRelation_application::save(check_dirty); } @@ -2277,6 +2280,86 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini) } } +bool TPrimanota_application::save_fppro() const +{ + const KEY last = curr_mask().last_key(); + if (last == K_ESC || last == K_QUIT || last == K_F9) // Salto se sto uscendo + return true; + // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP + if (fp_settings().get_db_indirizzo().empty() || fp_settings().is_f8()) + return true; // Salto il salvataggio in FPPRO + + TMask& msk = curr_mask(); + + const TDate data_operazione(msk.get(F_DATAREG)); + const TDate data_documento(msk.get(F_DATADOC)); + const TString& numero_docext = msk.get(F_NUMDOCEXT); + const TString& numero_doc = msk.get(F_NUMDOC); + const TString& codfisc = msk.get(F_COFI); + const TString& stato_piva = msk.get(F_STATOPAIV); + const TString& piva = msk.get(F_PIVA); + const TString& tot_doc = msk.get(F_TOTALE); + + TString id_fornitore; + + if (!piva.empty()) + { + id_fornitore << " (P2_FISCIVAPAESE = "; + if (!stato_piva.empty()) + id_fornitore << "\'" << stato_piva << "\'"; + else + id_fornitore << "\'IT\'"; + id_fornitore << " AND P2_FISCIVACOD = \'" << piva << "\'"; + } + if(!codfisc.empty()) + { + if (!id_fornitore.empty()) + id_fornitore << " OR "; + id_fornitore << " P2_CODFISCALE = \'" << codfisc << "\'"; + } + if(!id_fornitore.empty()) + id_fornitore << ")"; + else + { + error_box("Attenzione non è stata inserita ne la partita iva ne il cod.fisc del fornitore:\nimpossibile associarlo in FPPRO"); + return false; + } + + TString query; + query << "SELECT PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" << + "FROM PAA0200F\n" << "JOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" << + "JOIN PAA0100F\n" << " ON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" << + "JOIN PAA2700F\n" << "ON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" << + "WHERE " << id_fornitore << " AND PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PQ_IMPTOTDOC = \'" << tot_doc << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\' ;"; + fp_db().sq_set_exec(query); + + const TDate& dataoraric = fp_db().sq_get_date("P1_DATAORARIC"); // Devo controllare che la data operazione sia maggiore della data ric + if (dataoraric.empty()) + { + message_box("Attenzione non è stato possibile indentificare\nil documento con una fattura in FPPRO"); + return false; + } + if(data_operazione < TDate(dataoraric)) + { + error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione."); + return false; + } + + const TString keyprginvio = fp_db().sq_get("PZ_KEYPRGINVIO"); + const TString keyheaderfatt = fp_db().sq_get("PZ_KEYHEADERFATT"); + const TString keybodyfatt = fp_db().sq_get("PZ_KEYBODYFATT"); + const int numregcont = msk.get_int(F_NUMREG); + const int clifor = msk.get_int(F_CODCLIFOR); + + TString update_query; + update_query << "UPDATE FPPRO00F\n" << + "SET PZ_TIPOCF = 'F', PZ_CLIFOR = \'" << clifor << "\', PZ_DATACONT = \'" << TDate(TODAY).date2ansi() << "\', PZ_NUMREGCONT = \'" << numregcont << "\', PZ_DATAREGCONT = \'" << data_operazione.date2ansi() << "\'\n" << + "WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';"; + + fp_db().sq_set_exec(update_query); + return fp_db().sq_commit(); +} + bool TPrimanota_application::link_cesp(const TMask& msk, const char* action) { // Controlla autorizzazione diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index 8ac9a2461..72415f70d 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -181,6 +181,7 @@ protected: // TApplication void dump_fatt(TConfig& ini, TPartita & game, int rigafatt, int pref = 0); virtual void ini2mask(TConfig& ini, TMask& msk, bool query); virtual void mask2ini(const TMask& msk, TConfig& ini); + bool save_fppro() const; virtual bool save(bool check_dirty); bool get_mask_swap_file(TFilename& name) const;