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;
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
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);
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,
const TString& class_ann, bool obblig = false);
void edit_annesso(const TString& catdoc_padre, const TString& catdoc_ann, const TString& descr,
@ -267,6 +268,8 @@ public:
TCategorie_doc();
};
TCategorie_doc& categorie_doc(bool reload = false);
class TRecord_categorie : public TCategorie_doc
{
public:
@ -307,25 +310,23 @@ enum err_mov
class TMovimento_estr : public TObject // aggiungere metodi per TArray
{
bool _err;
long _numreg;
TDate _datareg;
TDate _datadoc;
TString _codcaus;
int _meseliq;
TString _numdoc;
real _tot;
long _codcf;
TString _ragsoc;
TString _reg_protiva;
TString _descr;
state_fppro _state;
TString _descr_err; // Messaggio di errore visibile dal controllo estrazione.
bool _estratto;
err_mov _descr_estr; // Messaggio di informazioni visibile dal 'Apri Estr.'
bool _cartaceo;
bool _err;
long _numreg;
TDate _datareg;
TDate _datadoc;
TString _codcaus;
int _meseliq;
TString _numdoc;
real _tot;
long _codcf;
TString _ragsoc;
TString _reg_protiva;
TString _descr;
state_fppro _state;
TString _descr_err; // Messaggio di errore visibile dal controllo estrazione.
bool _estratto;
err_mov _descr_estr; // Messaggio di informazioni visibile dal 'Apri Estr.'
bool _cartaceo;
TFilename _nomefilecart;
TArray _annessi; // TAnnesso_mov
@ -410,13 +411,13 @@ class TEstrazione : public TObject
bool check_periodo_def() 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);
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 find_movcoll(int numreg, TString& numreg_rev_vend);
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.
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:
static bool make_prosp_int_revc(int numreg, TAnnesso * TAnnesso);
@ -436,11 +437,9 @@ private:
static bool pura_iva(const TRectype& mov);
void write_errorsql_log(const TString& query) const;
static TCategorie_doc& categorie_doc(bool reload = false);
public:
void add_mov(TMovimento_estr * movimento) { _movs.add(movimento); }
void add_mov(TMovimento_estr * movimento) { _movs.add(movimento); }
/** DIAGNOSTICA GESTIONALE.
* Controllo lo stato delle fatture:
* Per le fatt. acquisto non collegate a fppro cerca di agganciarle.
@ -541,7 +540,7 @@ class TF9_doccart
public:
static bool add_cart(const TFilename& file, long numreg, bool is_annesso = false,
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 mov2listann(const TString& numreg, TString_array & 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
///////////////////////////////////////////////////////////////////////////////
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)
{
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);
}
else if(ok_cat && ann->opcee() == "RC")
{
// Generazione prospetto integrativo.
{
// Generazione prospetto integrativo.
const bool ok = make_prosp_int_revc(numreg, ann);
if (!ok)
if (!ok)
ann_nexist.add(TString() << "Prospetto integrativo (" << ann->catdoc() << ")");
ok_ann &= ok;
}
@ -345,36 +375,36 @@ void TEstrazione::copy_file_to_webapp_fld(TMovimento_estr& movimento) const
file.trim();
if (movimento.cartaceo() && cd != nullptr && file.full())
{
{
categorie.add(cd->catdoc(), 0);
files.add(file, 0);
}
if(!movimento.annessi().empty()) //qui
{
{
FOR_EACH_ARRAY_ITEM(movimento.annessi(), r, obj)
{
{
TAnnesso_mov & ann = (TAnnesso_mov &) *obj;
categorie.add(ann.catdocann());
files.add(TF9_doccart::get_full_path_file_cartaceo(ann.filename()));
}
}
}
}
#ifdef DBG
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)
{
TFilename file = files.get(i);
TFilename dest(base);
dest.add(categorie.get(i)).add(file.name());
make_dir(dest.path());
{
TFilename file = files.get(i);
TFilename dest(base);
dest.add(categorie.get(i)).add(file.name());
make_dir(dest.path());
const bool f = fcopy(file, dest);
const bool f = fcopy(file, dest);
if (!f)
error_box("Errore nel copiare il file nella cartella di destinazione: %s", (const char*)dest);
}
if (!f)
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)
@ -500,7 +530,7 @@ bool TEstrazione::stampa_documento(const TMovimento_estr& movimento, TFilename&
if(!TF9_doccart::add_cart(file, movimento.numreg()))
{
TF9_doccart filecart;
TFilename fdoc;
TFilename fdoc;
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()));
// if (newfile.exist())
// DeleteFile(newfile);
fcopy(tmp_file, newfile);
fcopy(tmp_file, newfile);
// Controllo che non esista gia' altrimenti elimino il record
TF9_doccart doccart;
bool a;
@ -753,16 +783,6 @@ void TEstrazione::write_errorsql_log(const TString& query) const
#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 /////////////////////////////////////////////////////////////////////////////////////////////
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_estratto(false);
++_stats.fa_skip;
}
}
}
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_NOMF9, ((TAnnesso_mov &)ann[i++]).filename(), 100);
}
}
}
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

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)
{
annesso = false;
annesso = false;
const TRectype & tdocs = cache().get(LF_F9DOCS, file.name(), 2);
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);
annesso = true;
}
}
}
return ok;
}
@ -228,21 +228,21 @@ bool TF9_doccart::mov2listann(const TString& numreg, _Out_ TString_array& list_a
CHECK(numreg_fetched == numreg_fetched, "*Maledetooo*");
#endif
}
return ok;
return ok;
}
bool TF9_doccart::mov2listann_vect(const long numreg, TArray & list_annessi)
{
list_annessi.destroy();
list_annessi.destroy();
_tannessi.zero();
_tannessi.setkey(1);
_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())
{
{
long numreg_fetched = _tannessi.get_long(F9A_NUMREG);
if (numreg_fetched == numreg)
{
@ -255,9 +255,9 @@ bool TF9_doccart::mov2listann_vect(const long numreg, TArray & list_annessi)
}
else
break;
}
}
return ok;
return ok;
}
///////////////////////////////////////////////////////////////////////////////