From e6f67932e1b8eeefb1c48c43d8d17432c9c77545 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Wed, 1 Jul 2020 12:29:02 +0200 Subject: [PATCH] Patch level : 12.0 972 Files correlati : f90.exe d181.des f181.dir/.trr f9ProspIntegr.rep masks f90104.sql Commento : - Rimosso controllo vendite in ogni caso. Incompatibilita' con diverse situazioni tra cui note di credito interne che non sono fatture elettroniche. - Rimosso flag check vendite e il suo utilizzo nel codice. - Aggiornamento stato estrazione solo dopo scrittura f9iva. - Migliorata e resa piu' sicura query per iva aggiungendo tipi diversi e controllo lunghezza colonna. - Corretti nomi campi, che venivano invertiti IVA_ANNPROT e IVA_NUMPROT. - Aggiunto controllo in apertura controllo estrazione solo se il pacchetto e' in errore diag. gest. - Spostata in una classe separata la maschera per l'apertura del pacchetto (Apri estr.). - Corretta modifica f9wa rimaneva vuoto il record in alcuni casi. - Aggiunta possibilita' di esclusione movimenti dall'Apri estr. - Aggiunto controllo esistenza categorie documentali, caricamento cat. doc. di default e controllo tipi documento duplicati. --- src/f9/f90100.cpp | 22 ++++++++++++++----- src/f9/f90100.h | 2 +- src/f9/f90200.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index cb89d8cde..e38390ebc 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -244,11 +244,6 @@ bool TEstrai_mask::estrai_handler(TMask_field& f, KEY key) TEstrai_mask& msk = (TEstrai_mask&)f.mask(); TF9_app& app = f9_app(); - // Controllo che esistano delle categorie documentali. - TCategorie_doc catdoc; - if(catdoc.get_array_rows().items() == 0) - warning_box(""); - // Estraggo const int stato = msk.estrai(); // Main function @@ -628,6 +623,23 @@ void TMonitor_mask::sel() const sf.show(); } +TMonitor_mask::TMonitor_mask(): TAutomask("f90100a"), _inclusi_mask(nullptr) +{ + // Controllo che esistano delle categorie documentali. + TCategorie_doc catdoc; + if (catdoc.get_array_rows().items() == 0 && + yesno_box("Attenzione non e' presente alcuna categoria documentale.\nPrecaricare le categorie di default?")) + { + TString p; + p << "f90.exe -1 -d /u" << user(); + TExternal_app ext(p); + ext.run(); + } + fill(); +} + + + ///////////////////////////////////////////// // TControllo_mask diff --git a/src/f9/f90100.h b/src/f9/f90100.h index 99d53e230..fe859ffd9 100644 --- a/src/f9/f90100.h +++ b/src/f9/f90100.h @@ -160,7 +160,7 @@ class TMonitor_mask : public TAutomask void sel() const; public: - TMonitor_mask() : TAutomask("f90100a"), _inclusi_mask(nullptr) { fill(); } + TMonitor_mask(); }; class TControllo_mask : public TAutomask diff --git a/src/f9/f90200.cpp b/src/f9/f90200.cpp index a5a2a25d1..8b1527a22 100644 --- a/src/f9/f90200.cpp +++ b/src/f9/f90200.cpp @@ -50,6 +50,7 @@ class TF9_categorie_doc_msk : public TAutomask bool on_key(KEY key) override; void check_spell() const; + void check_duplicate_tipodoc() const; void delete_annesso(const TString& catdoc_padre); void edit_annesso(const TString& catdoc_padre); void fill_annessi(const TString& catdoc); @@ -143,6 +144,30 @@ void TF9_categorie_doc_msk::check_spell() const sf.show(); } +void TF9_categorie_doc_msk::check_duplicate_tipodoc() const +{ + TSheet_field& sf = sfield(S_CLASSDOC); + map lookup_table; + vector dup; + FOR_EACH_SHEET_ROW(sf, nr, row) + { + if(TString(row->get(5)).empty()) // Se non ha specificato una causale + { + const char* tipodoc = row->get(6); + auto it = lookup_table.find({ tipodoc }); + if (it == lookup_table.end()) // Se non lo trovo vuol dire che e' il primo. + lookup_table.insert({ tipodoc, 0 }); + else + { + ++it->second; + dup.emplace_back(it->first); + } + } + } + if (!dup.empty()) + warning_box("Ci sono molteplici categorie con lo stesso tipo documento.\nPer una corretta assegnazione della categoria doc. si consiglia\ndi specificare il tipo di causale o rimuovere i duplicati."); +} + void TF9_categorie_doc_msk::delete_annesso(const TString& catdoc_padre) { if (_annessi_sheet->items() > 0) @@ -191,7 +216,6 @@ void TF9_categorie_doc_msk::load_table() const TSheet_field& sf = sfield(S_CLASSDOC); sf.hide(); sf.destroy(); - int idx = 0; while (true) { @@ -203,6 +227,8 @@ void TF9_categorie_doc_msk::load_table() const } sf.show(); sf.force_update(); + + check_duplicate_tipodoc(); } void TF9_categorie_doc_msk::new_annesso(const TString& catdoc_padre) @@ -283,6 +309,7 @@ class TF9_categorie_doc : public TSkeleton_application { TString _log; void add_error_log(TString& query); + static void precarica_tabella_default(); void main_loop() override; public: @@ -295,9 +322,32 @@ void TF9_categorie_doc::add_error_log(TString& query) _log << "\n" << query << "\n" << fp_db().sq_get_text_error() << "\n" << fp_db().sq_get_string_error(); } +void TF9_categorie_doc::precarica_tabella_default() +{ + TCategorie_doc preload; + if (preload.get_array_rows().items() == 0 || + noyes_box("Attenzione questa procedura cancellera' le categorie documentali gia' presenti\ne carichera' quelle di default. Continuare?")) + { + preload.remove_all(); + preload.reload(); + preload.add_categoria("FATTACQ", "FATTURE DI ACQUISTI", "FTA", "TD01", "", "FA"); + preload.add_categoria("FATTVEN", "FATTURE DI VENDITA", "FTV", "TD01", "", "FV"); + preload.add_categoria("FATTREV", "Fattura acq. con rev. charge", "FTA", "TD01", "", "FA"); // Da aggiungere causale + preload.add_categoria("NOTCREDACQ", "Nota credito di acquisto", "FTA", "TD04", "", "NC"); + preload.add_categoria("NOTDEBVEN", "Nota debito di vendita", "FTV", "TD05", "", "ND"); + preload.add_categoria("FATTCORR", "Fattura corrispettivi", "FTA", "TD01", "", "CR"); + preload.add_categoria("BOLLADOGAC", "Bolla doganale", "FTA", "TD01", "", "BD"); + + preload.add_annesso("FATTREV", "INTREVC", "Prosp. integr. rev.ch.", "RC", true); + } +} + void TF9_categorie_doc::main_loop() { - TF9_categorie_doc_msk msk; + if(argc() > 2 && argv()[2][0] == '-' && argv()[2][1] == 'd') + precarica_tabella_default(); + + TF9_categorie_doc_msk msk; // Il costruttore carica subito la tabella... while(msk.run() == K_ENTER) { TSheet_field& sf = msk.sfield(S_CLASSDOC);