Patch level : 12.0 966

Files correlati     : f90.exe d181.des f181.dir f181.trr all-masks
Commento            :
- Aggiunto controllo per estrazione di acquisto nel caso in cui non trovo la fattura elettronica, guardo se ho un doc cartaceo. (Possibilita' per i forfettari).
- Corretta diagnostica per acquisti controllava male se in errore.
This commit is contained in:
Simone Palacino 2020-06-09 15:07:28 +02:00
parent bd8c6c9300
commit d14564d7e1
4 changed files with 55 additions and 36 deletions

View File

@ -201,6 +201,7 @@ int TEstrai_mask::estrai()
delete progr;
_stats = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Effettiva estrazione. Faccio partire diagnostica e scrittura db.
const result_estr result = _estrazione->estrai();
#ifdef DBG
TString msg;
@ -420,7 +421,7 @@ void TMonitor_mask::delete_pack(const bool all) const
" SELECT @stato = " DRD_STATO "\n"
" FROM " F9_DRD "\n"
" WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n"
" IF(@stato = '" D_GEST_ERR "') BEGIN\n"
" IF(@stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "') BEGIN\n"
" DELETE FROM " F9_ERR " WHERE " ERR_CODSOC " = '" << codsoc << "' AND " ERR_IDESTR " = '" << id_estr << "';\n"
" END\n"
" ELSE BEGIN\n"
@ -434,7 +435,7 @@ void TMonitor_mask::delete_pack(const bool all) const
" SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n"
" FROM " F9_DRD "\n"
" WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n"
" IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "') BEGIN\n"
" IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "') BEGIN\n"
" DELETE FROM " F9_DRD " WHERE " DRD_CODSOC " = '" << codsoc << "' AND " DRD_ID_EST " = '" << id_estr << "';\n"
" DELETE FROM " F9_IVA " WHERE " IVA_CODSOC " = '" << codsoc << "' AND " IVA_IDLAN " = '" << id_estr << "';\n"
" DELETE FROM " F9_MOVESTR " WHERE " MES_CODSOC " = '" << codsoc << "' AND " MES_IDESTR " = '" << id_estr << "';\n"
@ -464,7 +465,7 @@ void TMonitor_mask::delete_pack(const bool all) const
void TMonitor_mask::fill() const
{
TString query;
query << "SELECT * FROM F9DRD00K ORDER BY " << DRD_TIME << " DESC;";
query << "SELECT * FROM F9DRD00K WHERE " DRD_CODSOC " = '" << F9CONF.get_ambiente() << "' ORDER BY " << DRD_TIME << " DESC;";
fp_db().sq_set_exec(query, false);
TSheet_field& sf = sfield(S_ELAB);

View File

@ -4,7 +4,6 @@
#include <set>
#include <map>
#include "annessif9.h"
#include "applicat.h"
#include "automask.h"

View File

@ -99,6 +99,14 @@ bool TEstrazione::check_annessi_oblig(const TString& catdoc, const TString& numr
return ok_ann;
}
bool TEstrazione::check_cartaceo_acq(const movimento_t& movimento)
{
TF9_doccart filecart;
TFilename file;
TString reg; reg << movimento.numreg;
return filecart.mov2doc(reg, file) && file.exist();
}
bool TEstrazione::check_documento_vendita(const TLocalisamfile& mov, _Out_ bool& exist_doc)
{
if (!mov.get(MOV_DPROVV).empty() && !mov.get(MOV_DANNO).empty() && !mov.get(MOV_DCODNUM).empty() && !mov.get(MOV_DNDOC).empty())
@ -184,7 +192,7 @@ void TEstrazione::copy_file_to_webapp_fld(const movimento_t& movimento) const
}
}
#ifdef DBG
CHECK(files.items() == categorie.items(), "Numero di file diverso dal numero di categorie");
CHECK(files.items() == categorie.items(), "copy_file_to_webapp_fld: Numero di file diverso dal numero di categorie");
#endif
for(int i = 0; i < files.items(); ++i)
@ -448,10 +456,7 @@ const char* TEstrazione::diagnostica_mov()
const int numreg = mov_i.numreg;
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg);
#ifdef DBG
if (mov.read() != NOERR)
warning_box("OOOOOOOOOHH! E DICE SIII!!");
#endif
mov_i.cartaceo = !is_doc_xml(mov);
const state_fppro res = check_fppro(numreg);
switch (res)
@ -462,7 +467,6 @@ const char* TEstrazione::diagnostica_mov()
case correct:
ok &= true;
mov_i.err = false;
mov_i.state = res;
break;
// ERRORS
@ -472,7 +476,6 @@ const char* TEstrazione::diagnostica_mov()
mov_i.err = false;
mov_i.estratto = false;
mov_i.descr_estr = movimento_t::no_fa;
mov_i.state = res;
++_stats.fa_skip;
break;
@ -482,45 +485,60 @@ const char* TEstrazione::diagnostica_mov()
mov_i.err = true;
mov_i.estratto = false;
mov_i.descr_err = "Errore controllo movimento: associazione movimento con fattura elettronica passiva sbagliato.";
mov_i.state = res;
break;
case err_read_db:
ok &= false;
mov_i.err = true;
mov_i.estratto = false;
mov_i.descr_err = "Errore controllo movimento: errore lettura db.";
mov_i.state = res;
break;
case no_guessed:
ok &= false;
mov_i.err = true;
mov_i.estratto = false;
mov_i.descr_err = "Non associato a fattura elettr. abbinamento automatico non riuscito. Abbinare manualmente, o escludere";
mov_i.state = res;
// Controllo se esiste il cartaceo es. forfettari
if(check_cartaceo_acq(mov_i))
{
ok &= true;
mov_i.err = false;
mov_i.cartaceo = true;
mov_i.estratto = true;
mov_i.descr_err = "";
mov_i.state = correct;
}
else
{
ok &= false;
mov_i.err = true;
mov_i.estratto = false;
mov_i.descr_err = "Non associato a fattura elettr. abbinamento automatico non riuscito. Abbinare manualmente, o escludere";
}
default: break;
}
if (mov_i.err)
++_stats.fa_err;
if(mov_i.state == null_state)
mov_i.state = res;
if (mov_i.err) ++_stats.fa_err;
/* Per quelli che hanno passato il primo controllo errori controllo che debba essere estratto
* secondo le categorie documentali. */
if (!mov_i.err && mov_i.estratto)
{
std::shared_ptr<TCategorie_doc::classe_doc> cd = categorie_doc().mov2cat(mov_i.numreg);
mov_i.estratto = cd.get();
mov_i.descr_estr = cd ? movimento_t::no_err : movimento_t::no_catdoc;
mov_i.catdoc = cd;
if (mov_i.catdoc)
check_annessi(mov_i, numreg);
}
if (mov_i.estratto)
{
if (!mov_i.err)
{
// Cerco la categoria documentale
std::shared_ptr<TCategorie_doc::classe_doc> cd = categorie_doc().mov2cat(mov_i.numreg);
mov_i.estratto = cd.get();
mov_i.descr_estr = cd ? movimento_t::no_err : movimento_t::no_catdoc;
mov_i.catdoc = cd;
if (mov_i.catdoc)
check_annessi(mov_i, numreg);
}
// Se cartaceo preparo il file.
if (mov_i.cartaceo)
{
TF9_doccart filecart;
TFilename file;
TString reg; reg << it->numreg;
TString reg; reg << it->numreg;
if (filecart.mov2doc(reg, file) && file.exist())
{
mov_i.nomefilecart << file;
@ -536,7 +554,7 @@ const char* TEstrazione::diagnostica_mov()
copy_file_to_webapp_fld(mov_i);
}
}
ok &= mov_i.err;
ok &= !mov_i.err;
}
}
else if (tipo == iva_vendite)
@ -709,7 +727,7 @@ result_estr TEstrazione::estrai()
if (_head.stato_estr == D_GEST_ERR)
{
warning_box("Attenzione l'estrazione ha prodotto degli errori.\n" \
warning_box("Attenzione l'estrazione ha prodotto degli errori.\n"
"Controllare e correggere eventuali problemi\ndal Controllo Estrazione.");
// Se in errore, esporto lista errori sul db
if (!export_error_list())
@ -863,7 +881,7 @@ bool TEstrazione::estrazione_iva(bool escluso)
iva_query.add(IVA_USERELA, user());
iva_query.add_getdate(IVA_TIMEELA);
if (_head.tipo_doc == 'A')
if (_head.tipo_doc == 'A' && !it->cartaceo)
{
TToken_string keys(mov.get(MOV_KEYFPPRO), ';');
fppro_db().set_keys(keys);

View File

@ -343,8 +343,9 @@ class TEstrazione : public TObject
bool update_drd_stato_estr() const;
static const char* categoria_doc();
static const char* caus_sos(const TLocalisamfile& mov, TipoIVA iva);
static void check_annessi(movimento_t& mov_i, const TString& numreg);
static void check_annessi(movimento_t& mov_i, const TString& numreg); // Controllo se ci sono tutti gli annessi obbligatori.
static bool check_annessi_oblig(const TString& catdoc, const TString& numreg, TToken_string& ann_nexist);
static bool check_cartaceo_acq(const movimento_t& movimento);
static bool check_documento_vendita(const TLocalisamfile& mov, _Out_ bool& exist_doc);
/** CHECK RIFERIMENTO FPPRO
* Per le fatture di acquisto controllo se ho il riferimento nell'FPPRO.