From 7d02362ae21f7b105f2dffd674061d62ae3ceb08 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Thu, 4 Jul 2019 10:31:56 +0200 Subject: [PATCH] Patch level : 12.0 no-patch Files correlati : cg2, cg2100t.msk Commento : - Modificati bottoni maschera fatture SDI - Corretto riporta codice fornitore se non e' valorizzato - Aggiunto scollegamento movimento da FPPRO - Corretto controllo righe vuote IVA - Riporta dati numdoc e datadoc anche col collega (per quelli che non hanno f1) --- src/cg/cg2100.cpp | 13 ++- src/cg/cg2100c.uml | 7 ++ src/cg/cg2100t.uml | 45 ++++---- src/cg/cg2102.cpp | 84 +++++++++++---- src/cg/cg2102.h | 2 + src/cg/cg2FPPRO.uml | 251 -------------------------------------------- src/f1/f1lib.cpp | 8 ++ src/f1/f1lib.h | 1 + 8 files changed, 117 insertions(+), 294 deletions(-) delete mode 100644 src/cg/cg2FPPRO.uml diff --git a/src/cg/cg2100.cpp b/src/cg/cg2100.cpp index d5a1fae52..1d9a9e4ee 100755 --- a/src/cg/cg2100.cpp +++ b/src/cg/cg2100.cpp @@ -131,11 +131,17 @@ TMask* TPrimanota_application::load_mask(int n) if (m->find_by_id(F_COLFPPRO) != NULL) m->hide(F_COLFPPRO); if (m->find_by_id(DLG_LINK) != NULL) + { m->disable(DLG_LINK); + m->disable(DLG_EDIT); + } } else if (m->find_by_id(DLG_LINK) != NULL) + { m->set_handler(DLG_LINK, fppro_mask); + m->set_handler(DLG_EDIT, scollega_handler); + } if (_quadratura) m->set_handler(F_ADJUST_IVA, quadratura_handler); @@ -1750,7 +1756,7 @@ void TPrimanota_application::clean_fppro() // Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio if (_mode != MODE_MOD || !has_f1_db(&msk) - || last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT) + || last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega()) return; const TString& numreg = msk.get(F_NUMREG); @@ -2660,6 +2666,11 @@ bool TPrimanota_application::save_dbmov(bool clean) const mov.put(MOV_KEYFPPRO, !clean ? keyfppro : ""); ok = mov.rewrite() == NOERR; } + if(clean && ok) + { + app().curr_mask().set(F_PROKEY, ""); + app().curr_mask().set(F_COLFPPRO, ""); + } return ok; } diff --git a/src/cg/cg2100c.uml b/src/cg/cg2100c.uml index 02e2af047..eb02ca113 100755 --- a/src/cg/cg2100c.uml +++ b/src/cg/cg2100c.uml @@ -10,6 +10,13 @@ BEGIN MODULE FP END +BUTTON DLG_EDIT 2 2 +BEGIN + PROMPT 3 1 "Scollega F.E." + PICTURE TOOL_CANCEL + MODULE FP +END + BUTTON DLG_NULL 2 2 BEGIN PROMPT 1 1 "" diff --git a/src/cg/cg2100t.uml b/src/cg/cg2100t.uml index 30814e7fe..2c535055c 100644 --- a/src/cg/cg2100t.uml +++ b/src/cg/cg2100t.uml @@ -10,13 +10,14 @@ END BUTTON DLG_OK 2 2 BEGIN - PROMPT 2 1 "Riporta Documento" + PROMPT 2 1 "Contabilizzaz." + PICTURE TOOL_EXPORT MODULE F1 END BUTTON DLG_LINK 2 2 BEGIN - PROMPT 3 1 "Collega Documento" + PROMPT 3 1 "Collega in Prima nota" PICTURE TOOL_LINK END @@ -33,7 +34,7 @@ PAGE "Fatture Ricevute SDI" -1 -1 77 20 NUMBER F_CODCLIFORS 6 BEGIN - PROMPT 1 1 "Codice fornitore" + PROMPT 0 1 "Fornitore" FIELD CODCF GROUP 1 USE LF_CLIFO @@ -54,27 +55,17 @@ BEGIN FLAGS "D" END -STRING F_COFIS 16 +STRING F_RAGSOCS 50 BEGIN - PROMPT 35 1 "Cod. Fiscale " - GROUP 1 - USE LF_CLIFO KEY 4 - INPUT TIPOCF "F" - INPUT COFI F_COFIS - DISPLAY "Codice fiscale@16" COFI - DISPLAY "Ragione Sociale@50" RAGSOC - DISPLAY "Codice" CODCF - DISPLAY "Sospeso@C" SOSPESO - DISPLAY "Partita IVA@12" PAIV - COPY OUTPUT F_CODCLIFORS - CHECKTYPE NORMAL - ADD RUN cg0 -1 + PROMPT 20 1 "" + INPUT TIPOCF F_CLIFO SELECT + INPUT RAGSOC F_RAGSOCCF FLAGS "D" END STRING F_STATOPAIVS 2 BEGIN - PROMPT 1 2 "P. IVA" + PROMPT 0 2 "P. IVA" USE %SCE INPUT CODTAB F_STATOPAIVS DISPLAY "Codice" CODTAB @@ -103,11 +94,21 @@ BEGIN FLAGS "D" END -STRING F_RAGSOCS 50 +STRING F_COFIS 16 BEGIN - PROMPT 0 3 "Rag. Soc." - INPUT TIPOCF F_CLIFO SELECT - INPUT RAGSOC F_RAGSOCCF + PROMPT 35 2 "Cod. Fiscale " + GROUP 1 + USE LF_CLIFO KEY 4 + INPUT TIPOCF "F" + INPUT COFI F_COFIS + DISPLAY "Codice fiscale@16" COFI + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Sospeso@C" SOSPESO + DISPLAY "Partita IVA@12" PAIV + COPY OUTPUT F_CODCLIFORS + CHECKTYPE NORMAL + ADD RUN cg0 -1 FLAGS "D" END diff --git a/src/cg/cg2102.cpp b/src/cg/cg2102.cpp index b9ed663fe..49acfefb9 100755 --- a/src/cg/cg2102.cpp +++ b/src/cg/cg2102.cpp @@ -3917,23 +3917,38 @@ bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr& msk) { + bool ok = false; TLocalisamfile clifo(LF_CLIFO); - if (msk->get_codforn().empty()) + TToken_string keys(msk->get_fpprokeys(), ';'); + TString codforn = TFppro(keys).get_codforn(); + if (codforn.empty()) + codforn = msk->get_codforn(); + if (codforn.empty()) { clifo.setkey(5); clifo.put(CLI_TIPOCF, "F"); clifo.put(CLI_PAIV, msk->get_piva()); clifo.read(); + ok = clifo.get(CLI_PAIV) == msk->get_piva(); + if(!ok) + { + clifo.zero(); + clifo.setkey(5); + clifo.put(CLI_TIPOCF, "F"); + clifo.put(CLI_PAIV, msk->get_piva()); + clifo.put(CLI_STATOPAIV, "IT"); + clifo.read(); + } } else { clifo.setkey(1); clifo.put(CLI_TIPOCF, "F"); - clifo.put(CLI_CODCF, msk->get_codforn()); + clifo.put(CLI_CODCF, codforn); clifo.read(); } - - if (clifo.get(CLI_PAIV) == msk->get_piva() && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != msk->get_codforn())) + ok = clifo.get(CLI_PAIV) == msk->get_piva(); + if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn)) { cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF)); cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC)); @@ -3964,16 +3979,26 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr& msk) { - cg_msk.set(F_NUMDOCEXT, msk->get_numdoc()); - cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7)); - cg_msk.set(F_DATADOC, msk->get_datadoc()); - if (msk->get_numdoc().full()) - write_clifo(cg_msk, msk); - write_righe_iva_f1(cg_msk, msk); - set_totale(cg_msk, msk); - cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE); - if(write_scad_f1(cg_msk, msk)) - app().set_scad_f1(cg_msk); + const bool bring = msk->should_bring_back(); + if (bring) + { + if (msk->get_numdoc().full() && cg_msk.get(F_CODCLIFOR).empty()) + write_clifo(cg_msk, msk); + write_righe_iva_f1(cg_msk, msk); + set_totale(cg_msk, msk); + cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE); + if (write_scad_f1(cg_msk, msk)) + app().set_scad_f1(cg_msk); + } + // Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati + if (bring || cg_msk.get(F_NUMDOC).empty()) + { + cg_msk.set(F_NUMDOCEXT, msk->get_numdoc()); + cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7)); + } + + if (bring || cg_msk.get(F_DATADOC).empty()) + cg_msk.set(F_DATADOC, msk->get_datadoc()); } bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key) @@ -3995,12 +4020,7 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key) msk->run(); // Riporto dati FPPRO su maschera Prima Nota (solo se hai F1) // Se non hai F1 collego senza riportarti i dati (solo le chiavi db) - if (msk->should_bring_back()) - { - riporta_dati_f1(cg_msk, msk); - //TConfig ini("cg2CONTAB0001.ini"); - //app().ini2mask(ini, cg_msk, false); - } + riporta_dati_f1(cg_msk, msk); cg_msk.set(F_PROKEY, msk->get_fpprokeys()); is_collegato(cg_msk.field(F_COLFPPRO)); cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA)); @@ -4009,6 +4029,30 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key) return true; } +bool TPrimanota_application::scollega(const bool set) +{ + static bool scollega = false; + if (set) + return scollega = true; + const bool last = scollega; + scollega = false; + return last; +} + +bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key) +{ + TMask& cg_msk = f.mask(); + if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS))) + return true; + if (cg_msk.get_bool(F_COLFPPRO)) + { + scollega(true); + app().clean_fppro(); + app().save_dbmov(true); + message_box("Il movimento e' stato scollegato dalla fattura elettronica\nin ingresso, precedentemente associata."); + } +} + bool TPrimanota_application::is_collegato(TMask_field& f) { TMask& cg_msk = f.mask(); diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index fc7620b14..c3007a273 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -194,6 +194,7 @@ class TPrimanota_application : public TRelation_application // Handlers per aggancio FPPRO // Bottone per maschera FPPRO static bool fppro_mask(TMask_field& f, KEY key); + static bool scollega_handler(TMask_field& f, KEY key); static bool is_collegato(TMask_field& f); static void fppromask_set_handl(TMask* msk); static void load_list(TMask* msk, KEY k); @@ -224,6 +225,7 @@ protected: // TApplication int save_fppro(); // Salva sul movimento il riferimento al documento in FPPRO (keys) bool save_dbmov(bool clean = false) const; + static bool scollega(bool set = false); // Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete) void clean_fppro(); // setta variabili prima del controllo has_f1_db diff --git a/src/cg/cg2FPPRO.uml b/src/cg/cg2FPPRO.uml deleted file mode 100644 index bf2e444c2..000000000 --- a/src/cg/cg2FPPRO.uml +++ /dev/null @@ -1,251 +0,0 @@ -#include "cg2100.h" - -TOOLBAR "topbar" 0 0 0 2 - -BUTTON DLG_CONFIG 2 2 -BEGIN - PROMPT 1 1 "Ricarica Fatture" - PICTURE TOOL_CONVERT -END - -BUTTON DLG_OK 2 2 -BEGIN - PROMPT 2 1 "Riporta Documento" - MODULE F1 -END - -BUTTON DLG_LINK 2 2 -BEGIN - PROMPT 3 1 "Collega Documento" - PICTURE TOOL_LINK -END - -BUTTON DLG_QUIT 2 2 -BEGIN - PROMPT 4 1 "Fine" - PICTURE TOOL_QUIT -END - -ENDPAGE - - -PAGE "Fatture Ricevute SDI" -1 -1 77 20 - -NUMBER F_CODCLIFORS 6 -BEGIN - PROMPT 1 1 "Codice fornitore" - FLAGS "D" -END - -STRING F_COFIS 16 -BEGIN - PROMPT 35 1 "Cod. Fiscale " - FLAGS "D" -END - -STRING F_STATOPAIVS 2 -BEGIN - PROMPT 1 2 "P. IVA" - FLAGS "D" -END - -STRING F_PIVAS 12 -BEGIN - PROMPT 15 2 "" - FLAGS "D" -END - -STRING F_RAGSOCS 50 -BEGIN - PROMPT 0 3 "Rag. Soc." - FLAGS "D" -END - -BOOLEAN F_ENABSEARCH -BEGIN - PROMPT 0 4 "Effettua ricerca per P.IVA/Disabilita ricerca per cod. Fornitore" -END - -BOOLEAN F_ENABDATE -BEGIN - PROMPT 0 5 "Abilita filtro per data" -END - -DATE F_DATESEARCH -BEGIN - PROMPT 35 5 "Data documento" - FLAGS "H" -END - -TEXT F_SHEET_TEXT -BEGIN - PROMPT 0 6 "@BSelezionare la fattura, quindi premere 'Collega Documento'" -END - -BOOLEAN F_SHOWALL -BEGIN - PROMPT 0 7 "Mostra anche fatture già registrate" -END - -SPREADSHEET F_SHEETFPPROS 0 15 -BEGIN - PROMPT 0 8 "" - ITEM " " - ITEM "Tipo Doc@5" - ITEM "Data\nRicezione@8" - ITEM "Data\nDoc.@8" - ITEM "Totale\nDocumento@7" - ITEM "Ritenute\nfiscali@6" - ITEM "Numero@14" - ITEM "Ragione sociale@40" - ITEM "Paese@4" - ITEM "P. IVA@10" - ITEM "Cod. Fiscale@14" - ITEM "Tipo Protocollo\nin ingresso@10" - ITEM "Progressivo\ndi ingresso@10" - ITEM "Chiave FPPRO@40" -END - -STRING F_NUMEROI 20 -BEGIN - PROMPT 1 20 "NUMERO" - FLAGS "H" -END - -DATE F_DATAI -BEGIN - PROMPT 1 21 "DATA" - FLAGS "H" -END - -NUMBER F_TOTDOCI 10 3 -BEGIN - PROMPT 1 22 "IMPTOTDOC" - FLAGS "H" -END - -STRING F_PROTFPPROI 18 -BEGIN - PROMPT 1 23 "Tipo Protocollo" - FLAGS "H" -END - -STRING F_FPPROKEYSI 80 -BEGIN - PROMPT 1 19 "db key" - HELP "Chiave database" - FLAGS "H" -END - -ENDPAGE -ENDMASK - - -PAGE "ELEMENTI SPREADSHEET" -1 -1 77 20 - -BOOLEAN F_SELFPPROS -BEGIN - PROMPT 1 0 "Selected" - FLAGS "" -END - -STRING F_TIPODOCS 4 -BEGIN - PROMPT 10 0 "TIPODOC" - FLAGS "D" -END - -DATE F_DATAS -BEGIN - PROMPT 1 1 "DATA" - FLAGS "D" -END - -DATE F_DATAORARICS -BEGIN - PROMPT 1 2 "DATAORARIC" - FLAGS "D" -END - -NUMBER F_IMPTOTDOCS 10 3 -BEGIN - PROMPT 1 3 "IMPTOTDOC" - FLAGS "D" -END - -NUMBER F_RITENUTE 10 3 -BEGIN - PROMPT 1 4 "Ritenute d'acconto" - FLAGS "D" -END - -STRING F_NUMEROS 20 -BEGIN - PROMPT 1 5 "NUMERO" - FLAGS "D" -END - -STRING F_RAGXML 50 - BEGIN - PROMPT 1 8 "" - FLAGS "D" - HELP "Ragione sociale scritta nell'xml" -END - -STRING F_FISCIVAPAESES 2 -BEGIN - PROMPT 1 6 "FISCIVAPAESE" - FLAGS "D" -END - -STRING F_FISCIVACODS 16 -BEGIN - PROMPT 1 7 "FISCIVACOD" - FLAGS "D" -END - -STRING F_CODFISCALES 16 -BEGIN - PROMPT 1 8 "CODFISCALE" - FLAGS "D" -END - -STRING F_TIPOPROTS 2 -BEGIN - PROMPT 1 9 "TIPOPROT" - FLAGS "D" -END - -NUMBER F_PROGRESSS 10 0 -BEGIN - PROMPT 1 10 "PROGRESS" - FLAGS "D" -END - -STRING F_KEYFPPROS 80 -BEGIN - PROMPT 1 11 "CHIAVE FPPRO" - FLAGS "D" -END - -ENDPAGE -TOOLBAR "Documento" 0 0 0 2 - -BUTTON DLG_OK 2 2 -BEGIN - PROMPT 1 1 "" -END - -BUTTON DLG_USER 2 2 -BEGIN - PROMPT 1 1 "Collega" - PICTURE TOOL_LINK -END - -BUTTON DLG_CANCEL 2 2 -BEGIN - PROMPT 1 1 "" -END - -ENDPAGE -ENDMASK \ No newline at end of file diff --git a/src/f1/f1lib.cpp b/src/f1/f1lib.cpp index c2a3d49a8..5295766ea 100644 --- a/src/f1/f1lib.cpp +++ b/src/f1/f1lib.cpp @@ -88,6 +88,14 @@ int TFppro::get_numreg(TToken_string& keys) return get_numreg(); } +TString TFppro::get_codforn() const +{ + TString query; + query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str(); + _db->sq_set_exec(query); + return _db->sq_get("PZ_CLIFOR"); +} + TDate TFppro::get_datareg() { if (!_is_set) diff --git a/src/f1/f1lib.h b/src/f1/f1lib.h index 881805a43..3cd054cc7 100644 --- a/src/f1/f1lib.h +++ b/src/f1/f1lib.h @@ -50,6 +50,7 @@ public: void get_keys_fppro(); int get_numreg(); int get_numreg(TToken_string& keys); + TString get_codforn() const; TDate get_datareg(); TDate get_datareg(TToken_string& keys); real get_ritenute() const;