From 85ac655949c3fee17da8ba2903e8c572efd81702 Mon Sep 17 00:00:00 2001 From: smen Date: Tue, 28 Mar 2023 12:49:17 +0200 Subject: [PATCH] Primo Commit: Primo giro praticamente completo. Ora si passa ai test e al bugfix --- build/f90.vcxproj | 3 + build/f90.vcxproj.filters | 9 ++ src/f9/f90100.cpp | 2 - src/f9/f9lib.h | 5 +- src/f9/f9lib01.cpp | 199 +++++++++++++++----------------------- 5 files changed, 95 insertions(+), 123 deletions(-) diff --git a/build/f90.vcxproj b/build/f90.vcxproj index b5767b4ae..b18722be9 100644 --- a/build/f90.vcxproj +++ b/build/f90.vcxproj @@ -226,6 +226,8 @@ + + @@ -238,6 +240,7 @@ + diff --git a/build/f90.vcxproj.filters b/build/f90.vcxproj.filters index ec26a173c..eef1e552e 100644 --- a/build/f90.vcxproj.filters +++ b/build/f90.vcxproj.filters @@ -63,6 +63,12 @@ Headers + + Headers + + + Headers + @@ -121,6 +127,9 @@ Masks + + Masks + diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index 82746963e..09e916ab7 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -1255,8 +1255,6 @@ TApri_estr_msk::TApri_estr_msk() : TAutomask("f90100d.msk"), _provv(true), _tipo } - - //////////////////////////////////////////////////////// // TF9_app //////////////////////////////////////////////////////// diff --git a/src/f9/f9lib.h b/src/f9/f9lib.h index d687e830a..5e3687753 100644 --- a/src/f9/f9lib.h +++ b/src/f9/f9lib.h @@ -437,8 +437,9 @@ class TEstrazione : public TObject * \return \a not_fa se il movimento passato non è una fattura. */ static state_fppro check_fppro(int numreg); - state_estr_int checkPafw3_int(int numreg); - bool guess_the_int(TLocalisamfile& mov); + state_estr_int guess_int(int numreg); + bool checkPAF(TLocalisamfile& mov); + bool checkPAA(TLocalisamfile& mov); bool check_periodo_def() const; void copy_file_to_webapp_fld(TMovimento_estr& movimento) const; void fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis); diff --git a/src/f9/f9lib01.cpp b/src/f9/f9lib01.cpp index 90aa5f37e..e60b8f5e0 100644 --- a/src/f9/f9lib01.cpp +++ b/src/f9/f9lib01.cpp @@ -451,20 +451,31 @@ state_fppro TEstrazione::check_fppro(int numreg) return not_fa; } -state_estr_int TEstrazione::checkPafw3_int(int numreg) +state_estr_int TEstrazione::guess_int(int numreg) { TLocalisamfile mov(LF_MOV); mov.put(MOV_NUMREG, numreg); if (mov.read() == NOERR) { - if (guess_the_int(mov)) - return guessed_int; - return no_guessed_int; + + if (get_tipoiva() == iva_vendite) + { + if (checkPAF(mov)) + return guessed_int; + return no_guessed_int; + } + else if(get_tipoiva() == iva_acquisti) + { + if (checkPAA(mov)) + return guessed_int; + return no_guessed_int; + } } return int_with_err; } -bool TEstrazione::guess_the_int(TLocalisamfile& mov) + +bool TEstrazione::checkPAF(TLocalisamfile& mov) { // Prendo il fornitore del mov per controllare la p.iva long codcf = mov.get_long(MOV_CODCF); @@ -482,9 +493,9 @@ bool TEstrazione::guess_the_int(TLocalisamfile& mov) TString query; query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" << - "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << - "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << - "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << + "P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAF2700F\n" << + "JOIN PAF0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << + "JOIN PAF0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << "WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" << "(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n"; if (statopiva.full()) @@ -501,8 +512,9 @@ bool TEstrazione::guess_the_int(TLocalisamfile& mov) if (ok && (fp_db().sq_items() == 1)) { - //CAPIRE COSA FARE QUI DENTRO - TToken_string keys = (fp_db().sq_get("KEYPRGINVIO"), ";"); + TToken_string keys; + keys.separator(';'); + keys = (fp_db().sq_get("KEYPRGINVIO")); keys.add(fp_db().sq_get("KEYHEADERFATT")); keys.add(fp_db().sq_get("KEYBODYFATT")); @@ -514,6 +526,54 @@ bool TEstrazione::guess_the_int(TLocalisamfile& mov) return false; } +bool TEstrazione::checkPAA(TLocalisamfile& mov) +{ + // Prendo il fornitore del mov per controllare la p.iva + long codcf = mov.get_long(MOV_CODCF); + TCli_for forn = cached_clifor('F', mov.get_long(MOV_CODCF)); + + const TString4 statopiva(forn.get(CLI_STATOPAIV)); + + const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC) + mov.get_real(MOV_REVCHARGE); + TString numdoc = mov.get(MOV_IDDOCSDI); + + TString query; + + query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" << + "P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << + "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << + "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << + "WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" << + "(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n"; + if (statopiva.full()) + query << " AND \n" << "P2_FISCIVAPAESE = '" << statopiva << "'"; + query << " AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV) << "'"; + if (forn.gruppo_IVA()) + query << " AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI) << "'"; + if (tot < 0) + query << " AND \n" "(PQ_IMPTOTDOC = " << tot << " OR PQ_IMPTOTDOC = " << abs(tot) << ")"; + else + query << " AND \n" "PQ_IMPTOTDOC = " << tot; + + bool ok = fp_db().sq_set_exec(query); + + if (ok && (fp_db().sq_items() == 1)) + { + //CAPIRE COSA FARE QUI DENTRO + TToken_string keys; + keys.separator(';'); + keys = (fp_db().sq_get("KEYPRGINVIO")); + keys.add(fp_db().sq_get("KEYHEADERFATT")); + keys.add(fp_db().sq_get("KEYBODYFATT")); + + mov.put(MOV_KEYFPPRO, keys); + mov.rewrite(); + + return true; + } + return false; +} + bool TEstrazione::check_periodo_def() const { TString query; @@ -1152,12 +1212,9 @@ const char* TEstrazione::diagnostica_mov_integrazione() bool ok = true; const TipoIVA tipo = get_tipoiva(); _stats.total = _movs.size(); - if (tipo == iva_vendite) - { - // Controlli per le fatture di acquisto - TProgress_monitor bar(_movs.items(), "Controllo stato movimenti di acquisto"); - FOR_EACH_ARRAY_ITEM(_movs, r, obj) + TProgress_monitor bar(_movs.items(), "Controllo stato movimenti"); + FOR_EACH_ARRAY_ITEM(_movs, r, obj) { if (bar.add_status()) { @@ -1170,7 +1227,13 @@ const char* TEstrazione::diagnostica_mov_integrazione() const long numreg = mov_i.numreg(); const TRectype & mov = cache().get(LF_MOV, numreg); - TToken_string keys = (mov.get(MOV_KEYPAF)); + TToken_string keys; + + if(tipo == iva_vendite) + keys = (mov.get(MOV_KEYPAF)); + else if (tipo == iva_acquisti) + keys = (mov.get(MOV_KEYFPPRO)); + keys.separator(';'); int i = keys.items(); @@ -1191,7 +1254,7 @@ const char* TEstrazione::diagnostica_mov_integrazione() mov_i.set_cartaceo(!is_doc_xml(mov)); - const state_estr_int res = checkPafw3_int(numreg); + const state_estr_int res = guess_int(numreg); switch (res) { @@ -1219,108 +1282,6 @@ const char* TEstrazione::diagnostica_mov_integrazione() } } - } - } - else if (tipo == iva_acquisti) - { - // Controlli per le fatture di vendita (AGGIORNARE STATS QUI) - TProgress_monitor bar(_movs.items(), "Controllo stato movimenti di vendita"); - - FOR_EACH_ARRAY_ITEM(_movs, r, obj) - { - if (bar.add_status()) - { - TMovimento_estr & mov_i = (TMovimento_estr &)*obj; - - // Se escluso passo avanti - if (!mov_i.estratto() && mov_i.descr_estr() == mov_escluso) - continue; - - const long numreg = mov_i.numreg(); - const TRectype & mov = cache().get(LF_MOV, numreg); - /* Controlli per vendite cambiati: - * Elettroniche solo quelle agli italiani, tutti gli altri sono cartacei - */ - if (!mov_i.err() && mov_i.estratto()) - { - mov_i.set_cartaceo(false); // ci deve essere ? - - unsigned short skip = 0; - - if (_has_cartacei && mov_i.cartaceo()) - skip |= 0x1; - else if (pura_iva(mov)) - skip |= 0x2; - else if (mov_i.datadoc().empty() || mov_i.numdoc().empty()) - skip |= 0x4; - - if (skip) - { - ++_stats.fv_cart_skip; - mov_i.reset_err(); - mov_i.set_estratto(false); - switch (skip) - { - case 0x1: mov_i.set_descr_estr(mov_no_cartaceo); break; - case 0x2: mov_i.set_descr_estr(mov_pura_iva); break; - case 0x4: mov_i.set_descr_estr(mov_no_fv); break; - default: break; - } - } - else - { - TClasse_doc* cd = categorie_doc().mov2cat(mov_i.numreg()); - const bool found = cd != nullptr; - - if (found) - mov_i.reset_err(); - else - mov_i.set_err("Categoria assente", mov_no_catdoc); - if (cd != nullptr) - check_annessi(mov_i); - - if (!mov_i.catdoc(categorie_doc())) - ++_stats.fv_nocatdoc; - if (mov_i.err()) - ++_stats.fv_err; - else if (mov_i.estratto()) - ++_stats.fv_estr; - } - - if (mov_i.estratto()) - { - if (mov_i.numreg() == 41400) { - int here = 0; - } - if (mov_i.cartaceo()) - { - TFilename file; - - // if (filecart.mov2doc(mov_i.numreg(), file) && file.exist() || grab_pdf_from_spotlite(mov_i, file) && file.exist()) - if (grab_pdf_from_spotlite(mov_i, file) && file.exist()) - mov_i.set_nomefiledoc(file); - else - mov_i.set_err("Non e' stato possibile reperire il file del documento cartaceo per questo movimento.", mov_no_filecart); - } - - TToken_string cartacei(mov.get(MOV_CARTACEI), '\n'); - - FOR_EACH_STR_TOKEN(cartacei, s) - { - TFilename file(s); - - if (file.exist()) - mov_i.documenti_allegati().add(file); - else - mov_i.set_err(format(FR("Non e' stato possibile reperire il file cartaceo %s per questo movimento."), (const char *)file), mov_no_filecart); - } - copy_file_to_webapp_fld(mov_i); - } - - } - ok &= mov_i.no_err(); - } - } } _head.stato_estr = ok ? D_GEST_OK : D_GEST_ERR;