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;