Patch level : 12.0 1208

Files correlati     : bagn011.uml

Commento:
Aggiunta classe annesso ai file cartacei
This commit is contained in:
Alessandro Bonazzi 2022-10-23 22:53:15 +02:00
parent 2be84dd6ea
commit 55ca893ee0
3 changed files with 96 additions and 67 deletions

View File

@ -219,8 +219,6 @@ class TCategorie_doc
TString_array * _name_catdocs; TString_array * _name_catdocs;
int _mode_sheet; int _mode_sheet;
TClasse_doc * find_causcont(const TString& caus); // OK
TClasse_doc * find_tipodoc(const TString& tipodoc); // OK
TClasse_doc * find_tipodocsdi(const TString& tipodocsdi, const char * tipocaus); // OK TClasse_doc * find_tipodocsdi(const TString& tipodocsdi, const char * tipocaus); // OK
TArray_sheet * find_sheet_annessi(const TString& catdoc) { return (TArray_sheet *) _sheets_annessi.objptr(catdoc); } TArray_sheet * find_sheet_annessi(const TString& catdoc) { return (TArray_sheet *) _sheets_annessi.objptr(catdoc); }
@ -239,6 +237,9 @@ protected:
TCategorie_doc::TAnnesso * find_annesso(const TString& catdoc_padre, const char* catdoc_ann); TCategorie_doc::TAnnesso * find_annesso(const TString& catdoc_padre, const char* catdoc_ann);
public: public:
TClasse_doc * find_causcont(const TString& caus); // OK
TClasse_doc * find_tipodoc(const TString& tipodoc); // OK
void add_annesso(const TString& catdoc_padre, const TString& catdoc_ann, const TString& descr, void add_annesso(const TString& catdoc_padre, const TString& catdoc_ann, const TString& descr,
const TString& class_ann, bool obblig = false); const TString& class_ann, bool obblig = false);
void edit_annesso(const TString& catdoc_padre, const TString& catdoc_ann, const TString& descr, void edit_annesso(const TString& catdoc_padre, const TString& catdoc_ann, const TString& descr,
@ -267,6 +268,8 @@ public:
TCategorie_doc(); TCategorie_doc();
}; };
TCategorie_doc& categorie_doc(bool reload = false);
class TRecord_categorie : public TCategorie_doc class TRecord_categorie : public TCategorie_doc
{ {
public: public:
@ -307,25 +310,23 @@ enum err_mov
class TMovimento_estr : public TObject // aggiungere metodi per TArray class TMovimento_estr : public TObject // aggiungere metodi per TArray
{ {
bool _err;
long _numreg;
bool _err; TDate _datareg;
long _numreg; TDate _datadoc;
TDate _datareg; TString _codcaus;
TDate _datadoc; int _meseliq;
TString _codcaus; TString _numdoc;
int _meseliq; real _tot;
TString _numdoc; long _codcf;
real _tot; TString _ragsoc;
long _codcf; TString _reg_protiva;
TString _ragsoc; TString _descr;
TString _reg_protiva; state_fppro _state;
TString _descr; TString _descr_err; // Messaggio di errore visibile dal controllo estrazione.
state_fppro _state; bool _estratto;
TString _descr_err; // Messaggio di errore visibile dal controllo estrazione. err_mov _descr_estr; // Messaggio di informazioni visibile dal 'Apri Estr.'
bool _estratto; bool _cartaceo;
err_mov _descr_estr; // Messaggio di informazioni visibile dal 'Apri Estr.'
bool _cartaceo;
TFilename _nomefilecart; TFilename _nomefilecart;
TArray _annessi; // TAnnesso_mov TArray _annessi; // TAnnesso_mov
@ -410,13 +411,13 @@ class TEstrazione : public TObject
bool check_periodo_def() const; bool check_periodo_def() const;
void copy_file_to_webapp_fld(TMovimento_estr& movimento) const; void copy_file_to_webapp_fld(TMovimento_estr& movimento) const;
static void fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis); static void fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis);
TipoIVA get_tipoiva() const { return _head.tipo_doc == 'A' ? iva_acquisti : iva_vendite; } TipoIVA get_tipoiva() const { return _head.tipo_doc == 'A' ? iva_acquisti : iva_vendite; }
static bool is_doc_xml(const TRectype& mov); static bool is_doc_xml(const TRectype& mov);
static bool find_movcoll(int numreg, TString& numreg_rev_vend); static bool find_movcoll(int numreg, TString& numreg_rev_vend);
static bool load_annessi(TMovimento_estr& movimento); static bool load_annessi(TMovimento_estr& movimento);
// Se il movimento e' di vendita e ha i riferimenti al documento generatore provo a stamparlo con ve, e lo inserisco tra i cartacei F9. // Se il movimento e' di vendita e ha i riferimenti al documento generatore provo a stamparlo con ve, e lo inserisco tra i cartacei F9.
static bool stampa_documento(const TMovimento_estr& movimento, TFilename& file); static bool stampa_documento(const TMovimento_estr& movimento, TFilename& file);
bool grab_pdf_from_spotlite(const TMovimento_estr& movimento, TFilename& file) const; bool grab_pdf_from_spotlite(const TMovimento_estr& movimento, TFilename& file) const;
public: public:
static bool make_prosp_int_revc(int numreg, TAnnesso * TAnnesso); static bool make_prosp_int_revc(int numreg, TAnnesso * TAnnesso);
@ -436,11 +437,9 @@ private:
static bool pura_iva(const TRectype& mov); static bool pura_iva(const TRectype& mov);
void write_errorsql_log(const TString& query) const; void write_errorsql_log(const TString& query) const;
static TCategorie_doc& categorie_doc(bool reload = false);
public: public:
void add_mov(TMovimento_estr * movimento) { _movs.add(movimento); }
void add_mov(TMovimento_estr * movimento) { _movs.add(movimento); }
/** DIAGNOSTICA GESTIONALE. /** DIAGNOSTICA GESTIONALE.
* Controllo lo stato delle fatture: * Controllo lo stato delle fatture:
* Per le fatt. acquisto non collegate a fppro cerca di agganciarle. * Per le fatt. acquisto non collegate a fppro cerca di agganciarle.
@ -541,7 +540,7 @@ class TF9_doccart
public: public:
static bool add_cart(const TFilename& file, long numreg, bool is_annesso = false, static bool add_cart(const TFilename& file, long numreg, bool is_annesso = false,
const TString& catannpadre = "", const TString& catdocann = "", bool suppress_errors = true); const TString& catannpadre = "", const TString& catdocann = "", bool suppress_errors = true);
bool doc_already_exists(const TFilename& file, long & numreg, bool& TAnnesso); bool doc_already_exists(const TFilename& file, long & numreg, bool& TAnnesso);
bool mov2doc(long numreg, TFilename& doc); bool mov2doc(long numreg, TFilename& doc);
bool mov2listann(const TString& numreg, TString_array & list_annessi); bool mov2listann(const TString& numreg, TString_array & list_annessi);
bool mov2listann_vect(const long numreg, TArray & list_annessi); bool mov2listann_vect(const long numreg, TArray & list_annessi);

View File

@ -176,6 +176,36 @@ TMovimento_estr::TMovimento_estr(TISAM_recordset & mov, TipoIVA tipo, bool escl)
// TEstrazione // TEstrazione
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
long find_movcoll(long numreg) // ma serve ?
{
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg);
mov.read();
const TCausale& cau = cached_causale(mov.get(MOV_CODCAUS), mov.get_int(MOV_ANNOES));
const TString4 cau_reg = cau.causale_reg_iva();
const TString numdoc = mov.get(MOV_NUMDOC);
TString query("USE ");
query << LF_MOV << " KEY 1 SELECT " << MOV_CODCAUS << "==\"" << cau_reg << "\"\nFROM " << MOV_NUMREG << "==" << numreg;
TISAM_recordset mov_rs(query);
long movcoll = 0L;
for (bool ok = mov_rs.move_first(); ok; ok = mov_rs.move_next())
{
TRectype& curr = (TRectype&)mov_rs.cursor()->curr();
const long movcoll_found = curr.get_long(MOV_MOVCOLL);
if (curr.get(MOV_NUMDOC) == numdoc && (movcoll_found == 0L || movcoll_found == numreg))
{
movcoll = mov_rs.get_long(MOV_NUMREG);
curr.put(MOV_MOVCOLL, numreg);
break;
}
}
return movcoll;
}
const char* TEstrazione::caus_sos(const TLocalisamfile& mov, const TipoIVA iva) const char* TEstrazione::caus_sos(const TLocalisamfile& mov, const TipoIVA iva)
{ {
if (iva == iva_acquisti) if (iva == iva_acquisti)
@ -249,11 +279,11 @@ bool TEstrazione::check_annessi_oblig(const TString& catdoc, const int numreg,TT
ann_nexist.add(ann_name); ann_nexist.add(ann_name);
} }
else if(ok_cat && ann->opcee() == "RC") else if(ok_cat && ann->opcee() == "RC")
{ {
// Generazione prospetto integrativo. // Generazione prospetto integrativo.
const bool ok = make_prosp_int_revc(numreg, ann); const bool ok = make_prosp_int_revc(numreg, ann);
if (!ok) if (!ok)
ann_nexist.add(TString() << "Prospetto integrativo (" << ann->catdoc() << ")"); ann_nexist.add(TString() << "Prospetto integrativo (" << ann->catdoc() << ")");
ok_ann &= ok; ok_ann &= ok;
} }
@ -345,36 +375,36 @@ void TEstrazione::copy_file_to_webapp_fld(TMovimento_estr& movimento) const
file.trim(); file.trim();
if (movimento.cartaceo() && cd != nullptr && file.full()) if (movimento.cartaceo() && cd != nullptr && file.full())
{ {
categorie.add(cd->catdoc(), 0); categorie.add(cd->catdoc(), 0);
files.add(file, 0); files.add(file, 0);
} }
if(!movimento.annessi().empty()) //qui if(!movimento.annessi().empty()) //qui
{ {
FOR_EACH_ARRAY_ITEM(movimento.annessi(), r, obj) FOR_EACH_ARRAY_ITEM(movimento.annessi(), r, obj)
{ {
TAnnesso_mov & ann = (TAnnesso_mov &) *obj; TAnnesso_mov & ann = (TAnnesso_mov &) *obj;
categorie.add(ann.catdocann()); categorie.add(ann.catdocann());
files.add(TF9_doccart::get_full_path_file_cartaceo(ann.filename())); files.add(TF9_doccart::get_full_path_file_cartaceo(ann.filename()));
} }
} }
#ifdef DBG #ifdef DBG
CHECK(files.items() == categorie.items(), "copy_file_to_webapp_fld: 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 #endif
for(int i = 0; i < files.items(); ++i) for(int i = 0; i < files.items(); ++i)
{ {
TFilename file = files.get(i); TFilename file = files.get(i);
TFilename dest(base); TFilename dest(base);
dest.add(categorie.get(i)).add(file.name()); dest.add(categorie.get(i)).add(file.name());
make_dir(dest.path()); make_dir(dest.path());
const bool f = fcopy(file, dest); const bool f = fcopy(file, dest);
if (!f) if (!f)
error_box("Errore nel copiare il file nella cartella di destinazione: %s", (const char*)dest); error_box("Errore nel copiare il file nella cartella di destinazione: %s", (const char*)dest);
} }
} }
void TEstrazione::fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis) void TEstrazione::fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis)
@ -500,7 +530,7 @@ bool TEstrazione::stampa_documento(const TMovimento_estr& movimento, TFilename&
if(!TF9_doccart::add_cart(file, movimento.numreg())) if(!TF9_doccart::add_cart(file, movimento.numreg()))
{ {
TF9_doccart filecart; TF9_doccart filecart;
TFilename fdoc; TFilename fdoc;
ok = filecart.mov2doc(movimento.numreg(), fdoc) && fdoc.name() == file.name(); ok = filecart.mov2doc(movimento.numreg(), fdoc) && fdoc.name() == file.name();
} }
@ -570,7 +600,7 @@ bool TEstrazione::make_prosp_int_revc(const int numreg, TAnnesso * annesso)
const TFilename newfile(TF9_doccart::get_full_path_file_cartaceo(tmp_file.name())); const TFilename newfile(TF9_doccart::get_full_path_file_cartaceo(tmp_file.name()));
// if (newfile.exist()) // if (newfile.exist())
// DeleteFile(newfile); // DeleteFile(newfile);
fcopy(tmp_file, newfile); fcopy(tmp_file, newfile);
// Controllo che non esista gia' altrimenti elimino il record // Controllo che non esista gia' altrimenti elimino il record
TF9_doccart doccart; TF9_doccart doccart;
bool a; bool a;
@ -753,16 +783,6 @@ void TEstrazione::write_errorsql_log(const TString& query) const
#endif #endif
} }
TCategorie_doc& TEstrazione::categorie_doc(const bool reload)
{
static TCategorie_doc* _doc_cats = nullptr;
if (_doc_cats == nullptr)
_doc_cats = new TCategorie_doc();
else if (reload)
_doc_cats->reload();
return *_doc_cats;
}
// Public methods ///////////////////////////////////////////////////////////////////////////////////////////// // Public methods /////////////////////////////////////////////////////////////////////////////////////////////
bool TEstrazione::update_drd_stato_estr() const bool TEstrazione::update_drd_stato_estr() const
@ -903,7 +923,7 @@ const char* TEstrazione::diagnostica_mov()
mov_i.set_err("", mov_no_cartaceo); mov_i.set_err("", mov_no_cartaceo);
mov_i.set_estratto(false); mov_i.set_estratto(false);
++_stats.fa_skip; ++_stats.fa_skip;
} }
} }
copy_file_to_webapp_fld(mov_i); copy_file_to_webapp_fld(mov_i);
} }
@ -1245,7 +1265,7 @@ bool TEstrazione::estrazione_iva(bool escluso)
{ {
iva_query.add(IVA_CLASAN9, ((TAnnesso_mov &)ann[i]).catdocann(), 10); iva_query.add(IVA_CLASAN9, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF9, ((TAnnesso_mov &)ann[i++]).filename(), 100); iva_query.add(IVA_NOMF9, ((TAnnesso_mov &)ann[i++]).filename(), 100);
} }
} }
iva_query.add(IVA_USERELA, user(), 10); iva_query.add(IVA_USERELA, user(), 10);
@ -1965,6 +1985,16 @@ TCategorie_doc::TCategorie_doc() : _mode_sheet(MODE_SHEETS)
TCategorie_doc& categorie_doc(const bool reload)
{
static TCategorie_doc* _doc_cats = nullptr;
if (_doc_cats == nullptr)
_doc_cats = new TCategorie_doc();
else if (reload)
_doc_cats->reload();
return *_doc_cats;
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// TRecord_categorie // TRecord_categorie

View File

@ -168,7 +168,7 @@ bool TF9_doccart::add_cart(const TFilename& file, long numreg, const bool is_ann
bool TF9_doccart::doc_already_exists(const TFilename& file, long& numreg, bool& annesso) bool TF9_doccart::doc_already_exists(const TFilename& file, long& numreg, bool& annesso)
{ {
annesso = false; annesso = false;
const TRectype & tdocs = cache().get(LF_F9DOCS, file.name(), 2); const TRectype & tdocs = cache().get(LF_F9DOCS, file.name(), 2);
bool ok = tdocs.full(); bool ok = tdocs.full();
@ -186,7 +186,7 @@ bool TF9_doccart::doc_already_exists(const TFilename& file, long& numreg, bool&
{ {
numreg = _tannessi.get_long(F9A_NUMREG); numreg = _tannessi.get_long(F9A_NUMREG);
annesso = true; annesso = true;
} }
} }
return ok; return ok;
} }
@ -228,21 +228,21 @@ bool TF9_doccart::mov2listann(const TString& numreg, _Out_ TString_array& list_a
CHECK(numreg_fetched == numreg_fetched, "*Maledetooo*"); CHECK(numreg_fetched == numreg_fetched, "*Maledetooo*");
#endif #endif
} }
return ok; return ok;
} }
bool TF9_doccart::mov2listann_vect(const long numreg, TArray & list_annessi) bool TF9_doccart::mov2listann_vect(const long numreg, TArray & list_annessi)
{ {
list_annessi.destroy(); list_annessi.destroy();
_tannessi.zero(); _tannessi.zero();
_tannessi.setkey(1); _tannessi.setkey(1);
_tannessi.put(F9A_NUMREG, numreg); _tannessi.put(F9A_NUMREG, numreg);
bool ok = false; bool ok = false;
// Si posiziona nl primo record giusto. Poi per sapere quando terminare guardo se la chiave e' ancora quella giusta. // Si posiziona nl primo record giusto. Poi per sapere quando terminare guardo se la chiave e' ancora quella giusta.
for (int err = _tannessi.read(_isgteq) == NOERR; err == NOERR; err = _tannessi.next()) for (int err = _tannessi.read(_isgteq) == NOERR; err == NOERR; err = _tannessi.next())
{ {
long numreg_fetched = _tannessi.get_long(F9A_NUMREG); long numreg_fetched = _tannessi.get_long(F9A_NUMREG);
if (numreg_fetched == numreg) if (numreg_fetched == numreg)
{ {
@ -255,9 +255,9 @@ bool TF9_doccart::mov2listann_vect(const long numreg, TArray & list_annessi)
} }
else else
break; break;
} }
return ok; return ok;
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////