Primo Commit:

Primo giro praticamente completo. Ora si passa ai test e al bugfix
This commit is contained in:
smen 2023-03-28 12:49:17 +02:00
parent 97f59efa7e
commit 85ac655949
5 changed files with 95 additions and 123 deletions

View File

@ -226,6 +226,8 @@
<ClInclude Include="..\src\f9\f90600.h" />
<ClInclude Include="..\src\f9\f90600a.h" />
<ClInclude Include="..\src\f9\f90600b.h" />
<ClInclude Include="..\src\f9\f90600c.h" />
<ClInclude Include="..\src\f9\f90600d.h" />
</ItemGroup>
<ItemGroup>
<MskCompiler Include="..\src\f9\f90100a.uml" />
@ -238,6 +240,7 @@
<MskCompiler Include="..\src\f9\f90500a.uml" />
<MskCompiler Include="..\src\f9\f90600a.uml" />
<MskCompiler Include="..\src\f9\f90600b.uml" />
<MskCompiler Include="..\src\f9\f90600d.uml" />
</ItemGroup>
<ItemGroup>
<SqlCompiler Include="..\src\f9\sql\f90100.sql">

View File

@ -63,6 +63,12 @@
<ClInclude Include="..\src\f9\f90600b.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600d.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600c.h">
<Filter>Headers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\f9\f90.cpp">
@ -121,6 +127,9 @@
<MskCompiler Include="..\src\f9\f90600b.uml">
<Filter>Masks</Filter>
</MskCompiler>
<MskCompiler Include="..\src\f9\f90600d.uml">
<Filter>Masks</Filter>
</MskCompiler>
</ItemGroup>
<ItemGroup>
<SqlCompiler Include="..\src\f9\sql\f90100.sql">

View File

@ -1255,8 +1255,6 @@ TApri_estr_msk::TApri_estr_msk() : TAutomask("f90100d.msk"), _provv(true), _tipo
}
////////////////////////////////////////////////////////
// TF9_app
////////////////////////////////////////////////////////

View File

@ -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);

View File

@ -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))
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,11 +1212,8 @@ 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");
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)
{
@ -1220,108 +1283,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;
return _head.stato_estr;