Patch level : 12.0 1214

Files correlati     : fp0.exe

Archiviazione cartacei
This commit is contained in:
Alessandro Bonazzi 2022-11-04 16:05:52 +01:00
parent f2b3db383f
commit 8e27155893
9 changed files with 447 additions and 409 deletions

View File

@ -38,6 +38,7 @@ int TEstrai_mask::estrai()
const char tipodoc = get_tipodoc();
const bool flagpro = is_provviso();
TFilename path;
TLog_report log("Log estrazione");
f9_app().get_spotlite_path(path);
@ -50,6 +51,7 @@ int TEstrai_mask::estrai()
F9CONF.get_addr_doc(), // Cartella documenti
false, // Estrazione di un escluso
path, // Spotlight path
&log, // Log
&dataini, // Data estr. mov dal
&dataend, // Data estr. mov al
F9CONF.get_has_cartexp() // Flag per estrarre anche i doc. cartacei
@ -121,6 +123,8 @@ int TEstrai_mask::estrai()
#endif
// Ricalcolo sheet estrazioni
f9_app().notify_estraction();
if (log.rows() > 0)
log.preview();
return result;
}
@ -154,7 +158,6 @@ bool TEstrai_mask::estrai_handler(TMask_field& f, KEY key)
if (stato == 0) // Errore scrittura F9IVA, non segno in errore in testata...
msk.segna_in_errore(); // ... se l'errore e' dovuto alla scrittura sul db.
}
app.print_log();
msk.field(ES_DESCR).set("");
msk.stop_run(K_FORCE_CLOSE);
return true;
@ -609,7 +612,7 @@ void TControllo_mask::associa() // todo: levare gli ultimi residui del vecchio
FOR_EACH_ARRAY_ROW(_controllo_mov, r, row)
if (count < _selected_mov && row->get_bool(0)) // Devo saltare tutti quelli che non hanno il flag e contare solo quelli che ce l'hanno
count++;
TF9_dberr::del_err(_cod_soc, _id_estr, mov_sel->get_int(cid2index(F_CNUMREG)));
dberr_del_err(_cod_soc, _id_estr, mov_sel->get_int(cid2index(F_CNUMREG)));
}
}
@ -663,9 +666,7 @@ void TControllo_mask::conferma_esclusi() const
TArray& TControllo_mask::import_error_list()
{
_controllo_mov.destroy();
TF9_dberr dberr;
_tipo_doc_err = TF9_dberr::get_errori(_cod_soc, _id_estr, _controllo_mov);
_tipo_doc_err = dberr_get_err(_cod_soc, _id_estr, _controllo_mov);
return _controllo_mov;
}
@ -1334,20 +1335,6 @@ bool TF9_app::year_handler(TMask_field& field, KEY key)
return true;
}
void TF9_app::add_msg_log(const char* msg)
{
_log << msg << "\n\n";
}
void TF9_app::add_sqlerror_msg_log(const char* query)
{
TString msg;
msg << query << "\n" <<
fp_db().sq_get_string_error() << "\n" <<
fp_db().sq_get_text_error();
add_msg_log(msg);
}
void TF9_app::open_esclusi()
{
/* Prima chiedo quale mese e anno visualizzare
@ -1449,6 +1436,7 @@ void TF9_app::fill_esclusi()
bool TF9_app::estrai_escl_handler(TMask_field&, KEY key)
{
TMask descr_mask("Estrazione", 1, 60, 5);
TLog_report log("Log estrazione esclusi");
descr_mask.add_button_tool(DLG_OK, "Conferma", TOOL_OK);
descr_mask.add_button_tool(DLG_CANCEL, "Annulla", TOOL_CANCEL);
@ -1465,7 +1453,7 @@ bool TF9_app::estrai_escl_handler(TMask_field&, KEY key)
f9_app().get_spotlite_path(path);
f9_app()._estr_escluso =new TEstrazione(F9CONF.get_ambiente(), f9_app()._flagprov_escl,
f9_app()._tipodoc_escl, descr,
F9CONF.get_addr_doc(), true, path);
F9CONF.get_addr_doc(), true, path, &log);
// Prendo la riga selezionata (e controllo che sia selezionato qualcosa)
bool flag = false;
@ -1488,9 +1476,9 @@ bool TF9_app::estrai_escl_handler(TMask_field&, KEY key)
}
if (!flag)
message_box("Selezionare il movimento da estrarre");
else
f9_app().print_log();
f9_app().fill_esclusi();
if (log.rows() > 0)
log.preview();
}
return true;
}
@ -1517,14 +1505,6 @@ void TF9_app::edit_wa(TString& old_codsoc) const
fp_db().sq_set_exec(query) && fp_db().sq_commit();
}
void TF9_app::print_log()
{
ofstream fout;
fout.open("f9exp_err.txt");
fout << _log;
_log.cut(0);
}
bool TF9_app::is_autofattura(const TLocalisamfile& mov)
{
return cached_causale(mov.get(MOV_CODCAUS), mov.get_date(MOV_DATAREG).year()).tipo_doc() == "AF";
@ -1607,7 +1587,8 @@ bool TF9_app::aggiorna_tab_f9(int version) const
const int end = sql.find(';'); // Se trovo un comma lancio la query
if (end != int(std::string::npos))
{
TString query; query << sql.c_str();
TString query(sql.c_str());
ok &= fp_db().sq_set_exec(query, false);
ok &= fp_db().sq_commit();
sql.erase();
@ -1667,6 +1648,7 @@ bool TF9_app::check_table() const
if (!check_tab_version())
{
TString msg;
std::ofstream fout;
fout.open("f9checktaberr.txt");
fout << fp_db().sq_get_text_error(false) << std::endl;

View File

@ -162,10 +162,7 @@ public:
class TF9_app : public TSkeleton_application
{
// friend class TMonitor_mask;
friend class TEstrai_mask;
// friend class TControllo_mask;
// friend class TApri_estr_msk;
friend class TEstrazione;
TMask * _esclusi_mask;
@ -177,7 +174,6 @@ class TF9_app : public TSkeleton_application
TToken_string _mov_escl;
char _tipodoc_escl;
char _flagprov_escl;
TString _log;
TEstrazione* _estr_escluso;
@ -212,11 +208,6 @@ public:
void edit_wa(TString& old_codsoc) const;
// logs
void print_log();
void add_msg_log(const char* msg);
void add_sqlerror_msg_log(const char* query);
static bool is_autofattura(const TLocalisamfile& mov);
/** Segna su mov che il movimento e' stato estratto. */

View File

@ -117,11 +117,9 @@ bool TF9_categorie_doc_msk::on_key(KEY key)
if (key == K_DEL)
{
TSheet_field& sf = sfield(S_CLASSDOC);
sf.hide();
TString_array& arr = sf.rows_array();
arr.destroy(sf.selected(), true);
sf.force_update();
sf.show();
sf.destroy(sf.selected(), true);
}
return TAutomask::on_key(key);
}

View File

@ -350,7 +350,7 @@ void TGestione_doc_cartacei_f9_msk::edit_ann()
f9ann.put(F9A_NUMREG, numreg);
f9ann.put(F9A_FILENAME, filename);
f9ann.read();
win.set_fields(TF9_doccart::get_full_path_file_cartaceo(filename), numreg, true, f9ann.get(F9A_CATDOCPAD), f9ann.get(F9A_CATDOCANN));
win.set_fields(get_full_path_file_cartaceo(filename), numreg, true, f9ann.get(F9A_CATDOCPAD), f9ann.get(F9A_CATDOCANN));
win.disable(F_IMPADDRESS);
win.disable(F_ISANNESSO);
@ -390,7 +390,7 @@ void TGestione_doc_cartacei_f9_msk::edit_file()
f9docs.put(F9C_NUMREG, numreg);
f9docs.put(F9C_NUMREG, nrig);
f9docs.read();
win.set_fields(TF9_doccart::get_full_path_file_cartaceo(filename), numreg);
win.set_fields(get_full_path_file_cartaceo(filename), numreg);
win.disable(F_IMPADDRESS);
win.disable(F_ISANNESSO);
@ -486,11 +486,14 @@ void TGestione_doc_cartacei_f9_msk::fill_docs()
sf.reset();
for (int err = files.first(); err == NOERR; err = files.next())
{
const TString& namefile = files.get(F9C_FILENAME);
const TFilename namefile = files.get(F9C_FILENAME);
TFilename source_file(F9CONF.get_addr_cart());
const long numreg = files.get_long(F9C_NUMREG);
const TRectype & mov = cache().get(LF_MOV, numreg);
const bool not_exist = !check_file_exist(namefile);
const bool exist = check_file_exist(namefile);
source_file = source_file.make_absolute_path();
source_file.add(namefile);
if (files.get_int(F9C_NRIG) == 0)
{
TRectype rec(files.curr());
@ -502,7 +505,7 @@ void TGestione_doc_cartacei_f9_msk::fill_docs()
}
}
if (not_exist)
if (!exist)
file_err.add(namefile, numreg);
const int row = sf.set_row_cell(F_FILENAME, namefile);
@ -524,7 +527,38 @@ void TGestione_doc_cartacei_f9_msk::fill_docs()
sf.set_row_cell(F_NPROTOCOL, nprot, row);
sf.set_row_cell(F_DESCRMOV, mov.get(MOV_DESCR), row);
sf.set_row_cell(F_DATACARIC, files.get(F9C_LOADDATE), row);
sf.set_row_cell(F_INFO, not_exist ? "IL FILE NON E' PRESENTE IN ARCHIVIO." : "", row);
sf.set_row_cell(F_INFO, !exist ? "IL FILE NON E' PRESENTE IN ARCHIVIO." : "", row);
if (exist)
{
TRectype mov = (TRectype &)cache().get(LF_MOV, numreg);
if (mov.full())
{
TToken_string cartacei(mov.get(MOV_CARTACEI), '\n');
if (cartacei.find(namefile) < 0)
{
TFilename dest_file;
dest_file = firm2dir(prefix().get_codditta());
dest_file.add("golem");
if (!dexist(dest_file))
make_dir(dest_file);
dest_file.add(namefile);
if (fcopy(source_file, dest_file))
{
TToken_string row(dest_file);
row.add(namefile);
cartacei.add(row);
mov.put(MOV_CARTACEI, cartacei);
mov.rewrite();
}
}
}
}
}
sf.force_update();

View File

@ -149,30 +149,10 @@ void TF9_test_app::main_loop()
}
}
if (false)
{
TF9_doccart doccart;
long old_numreg = 95752;
TFilename doc;
TString_array list_annessi;
TArray vect_annessi; // TAnnesso_mov
bool movdoc = doccart.mov2doc(old_numreg, doc);
TString msg("Error retriving filename from reg n. "); msg << old_numreg;
CHECK(movdoc && TString(doc.name()) == "ve1300_F01_0000000011_0002237.pdf", (const char*)msg);
old_numreg = 95222; // Doppio annesso
bool movann = doccart.mov2listann(old_numreg, list_annessi);
//CHECK(movann && list_annessi.items() == 2, "Error retriving list annessi from numreg %s", (const char*)old_numreg);
bool movannvect = doccart.mov2listann_vect(old_numreg, vect_annessi);
//CHECK(movannvect && vect_annessi.size() == 2, "Error retriving vector annessi from numreg %s", (const char*)old_numreg);
}
if(false)
{
TF9Prospetto_integr prosp;
if (prosp("96951", "96952"))
if (prosp(96951, 96952))
{
TFilename tmp; tmp.tempdir();
tmp.add(prosp.filename().name());

View File

@ -8,7 +8,10 @@
#include "f90.h"
#include "f90500.h"
#include "f9lib.h"
#include "../cg/cglib.h"
#include "annessif9.h"
#include "docf9.h"
class TRipristina_estrazione : public TSkeleton_application
{
@ -42,6 +45,8 @@ bool TRipristina_estrazione::restore(const TString & tipomov,
filter << "(" << MOV_ELABF9 << "!=\"\")";
TCursor c(&rel, filter, 2, &from, &to);
TLocalisamfile f9ann(LF_F9ANNESSI);
TLocalisamfile f9docs(LF_F9DOCS);
TRectype & mov = c.curr();
long last_num = 0L;
const long items = c.items();
@ -58,13 +63,36 @@ bool TRipristina_estrazione::restore(const TString & tipomov,
if (reg.tipo() == tipo)
{
const long numreg = mov.get_long(MOV_NUMREG);
mov.zero(MOV_ELABF9);
const int err = mov.rewrite(rel.lfile());
if (err != NOERR)
return error_box(FR("Errore nell'aggiornamento del movimento %ld.\n Errore n. %d"),
mov.get_long(MOV_NUMREG), err);
numreg, err);
f9ann.put(F9A_NUMREG, numreg);
if (f9ann.read() == NOERR)
{
TFilename file(F9CONF.get_addr_cart());
file.make_absolute_path();
file.add(f9ann.get(F9A_FILENAME));
if (file.exist())
file.fremove();
f9ann.remove();
}
f9docs.put(F9A_NUMREG, numreg);
for (int err = f9docs.read(_isgteq); err == NOERR && numreg == f9docs.get_long(F9C_NUMREG); err = f9docs.next())
{
TFilename file(F9CONF.get_addr_cart());
file.make_absolute_path();
file.add(f9docs.get(F9C_FILENAME));
if (file.exist())
file.fremove();
f9docs.remove();
}
}
}
}

View File

@ -12,6 +12,7 @@
#include "sheet.h"
#include "sqlset.h"
#include "reprint.h"
#include "reputils.h"
#define INI_PAR_MOD "F9"
#define INI_CATDOC "CATDOC"
@ -327,9 +328,11 @@ class TMovimento_estr : public TObject // aggiungere metodi per TArray
bool _estratto;
err_mov _descr_estr; // Messaggio di informazioni visibile dal 'Apri Estr.'
bool _cartaceo;
TFilename _nomefilecart;
TArray _annessi; // TAnnesso_mov
TString_array _documenti_allegati;
TString _cat_doc_padre;
TDate _data_estr;
TString _user;
TFilename _nomefiledoc;
TMovimento_estr & copy(const TMovimento_estr & m);
public:
@ -355,20 +358,29 @@ public:
bool estratto() const { return _estratto; }
err_mov descr_estr() const { return _descr_estr; }
TClasse_doc* catdoc(TCategorie_doc& catdoc) const { return catdoc.mov2cat(numreg()); }
TArray & annessi() { return _annessi; }
bool cartaceo() const { return _cartaceo; } // todo
const TFilename & nomefilecart() const { return _nomefilecart; }
bool cartaceo() const { return _cartaceo || allegati(); }
const TFilename & nomefiledoc() const { return _nomefiledoc; }
bool allegati() const { return _documenti_allegati.items() > 0; }
TString_array & documenti_allegati() { return _documenti_allegati; }
const TString & cat_doc_padre() const { return _cat_doc_padre; }
TDate data_estr() const { return _data_estr; }
const TString& user() const { return _user; };
// void set_err(bool err) { _err = err; }
void set_err(const char * descr = "", err_mov descr_estr = mov_no_error);
void reset_err() { set_err(); }
void set_cartaceo(bool cartaceo) { _cartaceo = cartaceo; }
void set_state(state_fppro state) { _state = state; }
void set_descr_estr(err_mov descr_estr) { _descr_estr = descr_estr; }
void set_numdoc(const char * numdoc) { _numdoc = numdoc; }
void set_estratto(bool estratto) { _estratto = estratto; }
void set_nomefilecart(const char * nomefilecart) { _nomefilecart = nomefilecart; }
void set_nomefiledoc(const char * nomefiledoc) { _nomefiledoc = nomefiledoc; }
void set_cartaceo(bool cartaceo) { _cartaceo = cartaceo; }
void set_cat_doc_padre(const char *cat) { _cat_doc_padre = cat; }
void set_data_estr(TDate data) { _data_estr = data; }
void set_user(const char *user) { _user = user; };
bool load_docs();
bool fill_doc_list(TString_array& list_docs);
TMovimento_estr(TSheet_field& sf, int row);
TMovimento_estr(const long numreg);
TMovimento_estr (const TMovimento_estr & m) { copy(m); }
@ -377,11 +389,13 @@ public:
~TMovimento_estr() {}
};
long find_movcoll(long numreg); // ma serve ??
class TEstrazione : public TObject
{
drd _head;
TArray _movs; // TMovimento_estr
ofstream * _error_sql;
TLog_report * _log;
bool _escluso;
const TString _descr;
bool _has_cartacei;
@ -390,12 +404,12 @@ class TEstrazione : public TObject
/** Aggiorna stato estrazione. Utilizzato ad esempio dopo la diagnostica per riportare
* il nuovo stato sul db.
*/
bool update_drd_stato_estr() const;
static const char* caus_sos(const TLocalisamfile& mov, TipoIVA iva);
static void check_annessi(TMovimento_estr& mov_i, int numreg); // Controllo se ci sono tutti gli annessi obbligatori.
bool update_drd_stato_estr();
const char* caus_sos(const TLocalisamfile& mov, TipoIVA iva);
void check_annessi(TMovimento_estr& mov); // Controllo se ci sono tutti gli annessi obbligatori.
// Controllo se esistono tutti gli annessi cartacei obbligatori e se ci sono annessi reverse charge li genero.
static bool check_annessi_oblig(const TString& catdoc, int numreg, TToken_string& ann_nexist);
static bool check_cartaceo_acq(const TMovimento_estr& movimento);
bool check_annessi_oblig(TMovimento_estr& mov, TToken_string& ann_nexist);
bool check_cartaceo_acq(TMovimento_estr& movimento);
static bool check_documento_vendita(const TLocalisamfile& mov, bool& exist_doc);
/** CHECK RIFERIMENTO FPPRO
* Per le fatture di acquisto controllo se ho il riferimento nell'FPPRO.
@ -410,13 +424,12 @@ class TEstrazione : public TObject
static state_fppro check_fppro(int numreg);
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);
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; }
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);
bool is_doc_xml(const TRectype& mov);
bool load_docs(TMovimento_estr& movimento) { return movimento.load_docs(); }
// 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 stampa_documento(const TMovimento_estr& movimento, TFilename& file);
bool grab_pdf_from_spotlite(const TMovimento_estr& movimento, TFilename& file) const;
public:
@ -426,16 +439,16 @@ private:
static TString& drd_attr();
TString& drd_tovalues() const;
bool insert_into_drd() const; /**< Scrittura testata estrazione. Tabella F9DRD. */
bool insert_into_f9movestr() const; /**< Scrittura su db dell'elenco di movimenti presi. */
bool export_error_list() const; /**< Esporta sheet controllo fatture sul db. */
bool insert_into_drd(); /**< Scrittura testata estrazione. Tabella F9DRD. */
bool insert_into_f9movestr(); /**< Scrittura su db dell'elenco di movimenti presi. */
bool export_error_list(); /**< Esporta sheet controllo fatture sul db. */
/** Controlla ultimo id estrazione della giornata e in base al tipo di estrazione,
* genera il progressivo seguente. Chiamata da \a estrai() e \a estrai_single().
* \return Nuovo id estrazione. */
TString next_estr_today(char tipo) const;
static bool pura_iva(const TRectype& mov);
void write_errorsql_log(const TString& query) const;
void write_errorsql_log(const TString& query);
public:
@ -484,8 +497,8 @@ public:
void set_addrcart(const TString& addrcart) { _head.addr_cart = addrcart; }
TEstrazione(const TString& ambiente, bool flag_prov, char tipodoc, const TString& descr, const TString& addrcart,
bool escluso, TFilename& spotlite_path, const TDate* dal = nullptr, const TDate* al = nullptr, bool has_cartacei = false);
~TEstrazione() { safe_delete(_error_sql); }
bool escluso, TFilename& spotlite_path, TLog_report * log, const TDate* dal = nullptr, const TDate* al = nullptr, bool has_cartacei = false);
~TEstrazione() {}
};
@ -493,7 +506,7 @@ class TF9_dberr
{
TString _str;
TString _insert;
ofstream* _fout;
TLog_report * _log;
protected:
void add_str(const TString& string);
@ -506,11 +519,12 @@ public:
void add(long num);
void add() { add_str("NULL"); }
bool send();
static bool del_err(const TString& codsoc, const TString& id_estr, int numreg);
static char get_errori(const TString& codsoc, const TString& id_estr, TArray& controllo_mov);
TF9_dberr();
TF9_dberr(TLog_report * log);
};
bool dberr_del_err(const TString& codsoc, const TString& id_estr, int numreg);
char dberr_get_err(const TString& codsoc, const TString& id_estr, TArray& controllo_mov);
class TIva_insert_prepared_stat
{
TAssoc_array _fields; // TString
@ -533,26 +547,22 @@ public:
void reset();
};
bool doc_already_exists(const TFilename& file, long& numreg);
const TString & get_full_path_file_cartaceo(const TString& filename);
class TF9_doccart
{
TLocalisamfile _tannessi;
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 mov2doc(long numreg, TFilename& doc);
bool mov2listann(const TString& numreg, TString_array & list_annessi);
bool mov2listann_vect(const long numreg, TArray & list_annessi);
bool mov2listann(long numreg, TMovimento_estr& movimento, TString_array & list_annessi);
bool mov2listann_vect(const long numreg, TArray & list_annessi);
bool load_docs(long numreg, TMovimento_estr& movimento);
static TString & get_full_path_file_cartaceo(const TString& filename)
{
TString & s = get_tmp_string();
s << TFilename(F9CONF.get_addr_cart()).slash_terminate() << filename;
return s;
}
TF9_doccart() : _tannessi(LF_F9ANNESSI) { }
TF9_doccart() { }
};
@ -600,9 +610,9 @@ class TProspetto_recset final : public TSQL_recordset
public:
const TString& get_query() const { return _query; }
static void get_sum_imponibile_imposta(const char* numreg_ven, real& s_imponibili, real& s_imposte);
static void get_sum_imponibile_imposta(long numreg_ven, real& s_imponibili, real& s_imposte);
TProspetto_recset(const char* numreg_acq, const char* numreg_ven);
TProspetto_recset(long numreg_acq, long numreg_ven);
~TProspetto_recset();
};
@ -623,7 +633,7 @@ public:
bool preview();
const TFilename& filename() const { return _rep.filename(); }
bool operator()(const char* numreg_acq, const char* numreg_ven);
bool operator()(long numreg_acq, long numreg_ven);
TF9Prospetto_integr();
};

View File

@ -71,8 +71,7 @@ TMovimento_estr & TMovimento_estr::copy(const TMovimento_estr & m)
_state = m._state;
_estratto = m._estratto;
_descr_estr = m._descr_estr;
// _catdoc = m._catdoc == nullptr ? nullptr : new TClasse_doc(*m._catdoc);
_cartaceo = m._cartaceo;
_documenti_allegati = m._documenti_allegati;
_numreg = m._numreg;
_datareg = m._datareg;
_datadoc = m._datadoc;
@ -84,11 +83,14 @@ TMovimento_estr & TMovimento_estr::copy(const TMovimento_estr & m)
_ragsoc = m._ragsoc;
_reg_protiva = m._reg_protiva;
_descr = m._descr;
_cat_doc_padre = m._cat_doc_padre;
_data_estr = m._data_estr;
_user = m._user;
return *this;
}
TMovimento_estr::TMovimento_estr(TSheet_field& sf, int row) : _err(false), _state(null_state), _estratto(true),
_descr_estr(mov_no_error), /*_catdoc(nullptr),*/ _cartaceo(false)
_descr_estr(mov_no_error), _data_estr(today), _user(user())
{
_numreg = sf.get_long_row_cell(row, FE_NUMREG);
_datareg = sf.get_date_row_cell(row, FE_DATAREG);
@ -101,6 +103,12 @@ TMovimento_estr::TMovimento_estr(TSheet_field& sf, int row) : _err(false), _stat
_ragsoc = sf.get_long_row_cell(row, FE_RAGSOC);
_reg_protiva = sf.get_str_row_cell(row, FE_PROTIVA);
_descr = sf.get_long_row_cell(row, FE_DESCR);
TClasse_doc * classe = catdoc(categorie_doc());
if (classe != nullptr)
{
_cat_doc_padre = classe->catdoc();
}
}
void TMovimento_estr::set_err(const char * descr, err_mov descr_estr)
@ -116,8 +124,77 @@ void TMovimento_estr::set_err(const char * descr, err_mov descr_estr)
_descr_estr = error ? mov_annesso_nexist : mov_no_error;
}
bool TMovimento_estr::load_docs()
{
TLocalisamfile annessi(LF_F9ANNESSI);
bool found = false;
documenti_allegati().destroy();
const TRectype & mov = cache().get(LF_MOV, numreg());
TToken_string cartacei(mov.get(MOV_CARTACEI), '\n');
FOR_EACH_STR_TOKEN(cartacei, str)
{
TToken_string orig(str);
TToken_string row(orig.get());
row.add(cat_doc_padre());
row.add(orig.get(4));
row.add(data_estr());
row.add(user());
documenti_allegati().add(row);
found = true;
}
annessi.put(F9A_NUMREG, numreg());
// Si posiziona nl primo record giusto. Poi per sapere quando terminare guardo se la chiave e' ancora quella giusta.
for (int err = annessi.read(_isgteq) == NOERR; err == NOERR && annessi.get_long(F9A_NUMREG) == numreg(); err = annessi.next())
{
if (!found)
{
set_cat_doc_padre(annessi.get(F9A_CATDOCPAD));
set_data_estr(annessi.get_date(F9A_LOADDATE));
set_user(annessi.get(F9A_USER));
}
TToken_string row(annessi.get(F9A_FILENAME));
row.add(cat_doc_padre());
row.add(annessi.get(F9A_CATDOCANN));
row.add(data_estr());
row.add(user());
documenti_allegati().add(row);
found = true;
}
return found;
}
bool TMovimento_estr::fill_doc_list(TString_array& list_docs)
{
bool ok = load_docs();
list_docs.destroy();
if (ok)
{
// Si posiziona nl primo record giusto. Poi per sapere quando terminare guardo se la chiave e' ancora quella giusta.
FOR_EACH_ARRAY_ROW(_documenti_allegati, r, str)
{
TToken_string t;
t.add(numreg());
t.add(str->get());
t.add(str->get());
t.add(str->get());
t.add(str->get());
t.add(str->get());
list_docs.add(t);
}
}
return ok;
}
TMovimento_estr::TMovimento_estr(const long numreg) : _err(false), _state(null_state), _estratto(true), _descr_estr(mov_no_error),
/* _catdoc(nullptr),*/ _cartaceo(false)
_data_estr(today), _user(user())
{
const TRectype & mov = cache().get(LF_MOV, numreg);
TToken_string key(mov.get(MOV_TIPO));
@ -140,9 +217,8 @@ TMovimento_estr::TMovimento_estr(const long numreg) : _err(false), _state(null_s
_descr = mov.get(MOV_DESCR);
}
TMovimento_estr::TMovimento_estr(TISAM_recordset & mov, TipoIVA tipo, bool escl) : _err(false), _state(null_state),
_estratto(true), _descr_estr(mov_no_error),
/* _catdoc(nullptr), */ _cartaceo(false)
TMovimento_estr::TMovimento_estr(TISAM_recordset & mov, TipoIVA tipo, bool escl) : _err(false), _state(null_state), _estratto(true),
_descr_estr(mov_no_error), _data_estr(today), _user(user())
{
_numreg = mov.get_long(MOV_NUMREG);
_datareg = mov.get_date(MOV_DATAREG);
@ -223,32 +299,37 @@ const char* TEstrazione::caus_sos(const TLocalisamfile& mov, const TipoIVA iva)
return "";
}
void TEstrazione::check_annessi(TMovimento_estr& mov_i, const int numreg)
void TEstrazione::check_annessi(TMovimento_estr& mov)
{
TToken_string ann_nexist;
if (!check_annessi_oblig(mov_i.catdoc(categorie_doc())->catdoc(), numreg, ann_nexist))
if (!check_annessi_oblig(mov, ann_nexist))
{
TString msg_annessi_mancanti("Annessi obligatori mancanti: ");
for (int i = 0; i < ann_nexist.items(); ++i)
msg_annessi_mancanti << ann_nexist.get() << " ";
mov_i.set_err(msg_annessi_mancanti);
mov.set_err(msg_annessi_mancanti);
}
else
{
load_annessi(mov_i);
}
load_docs(mov);
}
bool TEstrazione::check_annessi_oblig(const TString& catdoc, const int numreg,TToken_string& ann_nexist)
bool TEstrazione::check_annessi_oblig(TMovimento_estr& mov, TToken_string& ann_nexist)
{
ann_nexist.destroy(-1);
const TString_array lista_cat_annessi = categorie_doc().get_array_ann(catdoc); // Lista cat annessi
TF9_doccart file_cart;
TArray list_file_ann; // Lista file annessi
TString_array list_file_ann; // Lista file annessi
TClasse_doc * classe = mov.catdoc(categorie_doc());
TString catdoc;
file_cart.mov2listann_vect(numreg, list_file_ann);
if (classe != nullptr)
catdoc = classe->catdoc();
const TString_array lista_cat_annessi = categorie_doc().get_array_ann(catdoc); // Lista cat annessi
ann_nexist.cut(0);
mov.fill_doc_list(list_file_ann);
bool ok_ann = true;
@ -264,11 +345,11 @@ bool TEstrazione::check_annessi_oblig(const TString& catdoc, const int numreg,TT
// Controllo che esista l'annesso per questo mov.
bool exist = false;
FOR_EACH_ARRAY_ITEM(list_file_ann, r, obj)
FOR_EACH_ARRAY_ROW(list_file_ann, r, row)
{
TAnnesso_mov * f_ann = (TAnnesso_mov *)obj;
TString catdocann = row->get(3);
if (f_ann->catdocann() == ann_name)
if (catdocann == ann_name)
{
exist = true;
break;
@ -278,25 +359,41 @@ bool TEstrazione::check_annessi_oblig(const TString& catdoc, const int numreg,TT
if (!exist)
ann_nexist.add(ann_name);
}
else if(ok_cat && ann->opcee() == "RC")
else
if(ok_cat && ann->opcee() == "RC")
{
// Generazione prospetto integrativo.
const bool ok = make_prosp_int_revc(numreg, ann);
const bool ok = make_prosp_int_revc(mov.numreg(), ann);
if (!ok)
ann_nexist.add(TString() << "Prospetto integrativo (" << ann->catdoc() << ")");
{
TString msg(TR("Prospetto integrativo"));
msg << "(" << ann->catdoc() << ")";
ann_nexist.add(msg);
}
ok_ann &= ok;
}
}
return ok_ann;
}
bool TEstrazione::check_cartaceo_acq(const TMovimento_estr& movimento)
bool TEstrazione::check_cartaceo_acq(TMovimento_estr& movimento)
{
TF9_doccart filecart;
TFilename file;
bool ok = movimento.load_docs();
return filecart.mov2doc(movimento.numreg(), file) && file.exist();
if (ok)
{
FOR_EACH_ARRAY_ROW(movimento.documenti_allegati(), r, str)
{
TFilename file = str->get();
ok &= file.exist();
if (!ok)
break;
}
}
return ok;
}
bool TEstrazione::check_documento_vendita(const TLocalisamfile& mov, _Out_ bool& exist_doc)
@ -368,42 +465,31 @@ void TEstrazione::copy_file_to_webapp_fld(TMovimento_estr& movimento) const
// f9pwa + ambiente + idlancio(ID drd) + categoria_documento(drt) + nome_documento
TFilename base(F9CONF.get_addr_doc_loc());
base.add(_head.cod_soc).add(_head.id_estr).slash_terminate();
TToken_string categorie;
TToken_string files;
TClasse_doc * cd = movimento.catdoc(categorie_doc());
TFilename file = movimento.nomefilecart();
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;
const bool has_allegati = movimento.allegati();
categorie.add(ann.catdocann());
files.add(TF9_doccart::get_full_path_file_cartaceo(ann.filename()));
if (has_allegati)
{
TString_array & docs = movimento.documenti_allegati();
FOR_EACH_ARRAY_ROW(docs, r, str)
{
TFilename file = str->get(0);
if (file.full())
{
TFilename dest(base);
if (cd != nullptr && file.full())
dest.add(cd->catdoc());
else
dest.add("cartaceo");
dest.add(file.name());
make_dir(dest.path());
if (!fcopy(file, dest))
error_box(FR("Errore nel copiare il %s in %s"), (const char*)file, (const char*)dest);
}
}
#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());
const bool f = fcopy(file, dest);
if (!f)
error_box("Errore nel copiare il file nella cartella di destinazione: %s", (const char*)dest);
}
}
@ -464,45 +550,7 @@ bool TEstrazione::is_doc_xml(const TRectype& mov)
return (IS_ITALIANO(statopaiv)) && clifo.get(CLI_COMCF) != "B513"; // Campione d'Italia
}
bool TEstrazione::find_movcoll(const int numreg, _Out_ TString& numreg_rev_vend)
{
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(MOV_NUMREG).as_int();
curr.put(MOV_MOVCOLL, numreg);
break;
}
}
numreg_rev_vend.cut(0) << movcoll;
return numreg_rev_vend.full();
}
bool TEstrazione::load_annessi(TMovimento_estr& movimento)
{
TF9_doccart doccart;
return doccart.mov2listann_vect(movimento.numreg(), movimento.annessi());
}
bool TEstrazione::stampa_documento(const TMovimento_estr& movimento, TFilename& file)
/* bool TEstrazione::stampa_documento(const TMovimento_estr& movimento, TFilename& file)
{
bool ok = false;
// 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.
@ -529,10 +577,9 @@ bool TEstrazione::stampa_documento(const TMovimento_estr& movimento, TFilename&
// Controllo anche se false perche' potrebbe esistere gia'.
if(!TF9_doccart::add_cart(file, movimento.numreg()))
{
TF9_doccart filecart;
TFilename fdoc;
ok = filecart.mov2doc(movimento.numreg(), fdoc) && fdoc.name() == file.name();
ok = movimento.load_docs() && fdoc.name() == file.name();
}
else
ok = true;
@ -541,7 +588,7 @@ bool TEstrazione::stampa_documento(const TMovimento_estr& movimento, TFilename&
}
}
return ok;
}
} */
bool TEstrazione::grab_pdf_from_spotlite(const TMovimento_estr& movimento, TFilename& file) const
{
@ -580,33 +627,38 @@ bool TEstrazione::make_prosp_int_revc(const int numreg, TAnnesso * annesso)
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg);
mov.read();
TString rev_vend = mov.get(MOV_MOVCOLL);
if((rev_vend.full() || find_movcoll(numreg, rev_vend)) && rev_vend != "0")
long rev_vend = mov.get_long(MOV_MOVCOLL);
if (rev_vend == 0)
rev_vend = find_movcoll(numreg);
if (rev_vend > 0)
{
TF9Prospetto_integr prosp;
TString acq; acq << numreg;
const long acq = numreg;
if (prosp(acq, rev_vend))
{
// [ NUMREG][ CAT.ANN.].pdf
// [0000000][AAAAAAAAAA].pdf
TFilename tmp_file; tmp_file.tempdir();
TString name; name << format("%07d%10s", numreg, (const char*)annesso->catdoc());
name.replace(' ', '_');
tmp_file.add(name);
tmp_file.ext("pdf");
if(prosp.export_pdf(tmp_file))
if (prosp.export_pdf(tmp_file))
{
// Sposto il file nella cartella dei documenti cartacei.
const TFilename newfile(TF9_doccart::get_full_path_file_cartaceo(tmp_file.name()));
const TFilename newfile(get_full_path_file_cartaceo(tmp_file.name()));
// if (newfile.exist())
// DeleteFile(newfile);
fcopy(tmp_file, newfile);
// Controllo che non esista gia' altrimenti elimino il record
TF9_doccart doccart;
bool a;
long numreg_old;
if (doccart.doc_already_exists(newfile, numreg_old, a))
if (doc_already_exists(newfile, numreg_old))
{
TLocalisamfile lf_ann(LF_F9ANNESSI);
lf_ann.setkey(2);
@ -652,7 +704,7 @@ TString& TEstrazione::drd_tovalues() const
_head.stato_estr << "', '" << _head.addr_cart << "'";
}
bool TEstrazione::insert_into_drd() const
bool TEstrazione::insert_into_drd()
{
TString query;
query << "INSERT INTO " F9_DRD " ( " << drd_attr() << " ) \nVALUES ( " << drd_tovalues() << " );";
@ -663,7 +715,7 @@ bool TEstrazione::insert_into_drd() const
return ok;
}
bool TEstrazione::insert_into_f9movestr() const
bool TEstrazione::insert_into_f9movestr()
{
TString query;
bool ok = true;
@ -692,9 +744,9 @@ bool TEstrazione::insert_into_f9movestr() const
return ok;
}
bool TEstrazione::export_error_list() const
bool TEstrazione::export_error_list()
{
TF9_dberr dberr;
TF9_dberr dberr(_log);
const TArray & movs = _movs; // <TMovimento_estr>
bool ok = true;
int count = 0;
@ -769,23 +821,17 @@ bool TEstrazione::pura_iva(const TRectype& mov)
return rel->cg_rows() == 0;
}
void TEstrazione::write_errorsql_log(const TString& query) const
void TEstrazione::write_errorsql_log(const TString& query)
{
TString msg;
msg << query << "\n" <<
fp_db().sq_get_string_error() << "\n" <<
fp_db().sq_get_text_error();
if (_error_sql->is_open())
*_error_sql << msg << "\n\n";
#ifdef DBG
else
warning_box("Impossibile aprire il file f9_TEstrazione_error_sql.txt\nper scrivere errori scrittura db.");
#endif
_log->log(2, query);
_log->log(2, fp_db().sq_get_string_error());
_log->log(2, fp_db().sq_get_text_error());
_log->line();
}
// Public methods /////////////////////////////////////////////////////////////////////////////////////////////
bool TEstrazione::update_drd_stato_estr() const
bool TEstrazione::update_drd_stato_estr()
{
bool ok;
do
@ -901,30 +947,12 @@ const char* TEstrazione::diagnostica_mov()
mov_i.set_descr_estr(cd ? mov_no_error : mov_no_catdoc);
if (found)
check_annessi(mov_i, numreg);
check_annessi(mov_i);
}
// Se cartaceo preparo il file.
if (F9CONF.get_has_cartexp()) // Se e' abilitata l'esportazione dei cartacei, altrimenti skip...
{
if (mov_i.cartaceo())
{
TF9_doccart filecart;
TFilename file;
if (filecart.mov2doc(mov_i.numreg(), file) && file.exist())
mov_i.set_nomefilecart(file);
else
mov_i.set_err("Non e' stato possibile reperire il file del documento cartaceo per questo movimento.", mov_no_filecart);
}
else
{
ok &= true;
mov_i.set_err("", mov_no_cartaceo);
mov_i.set_estratto(false);
++_stats.fa_skip;
}
}
mov_i.load_docs();
copy_file_to_webapp_fld(mov_i);
}
}
@ -954,7 +982,7 @@ const char* TEstrazione::diagnostica_mov()
*/
if (!mov_i.err() && mov_i.estratto())
{
mov_i.set_cartaceo(!is_doc_xml(mov));
// mov_i.set_cartaceo(!is_doc_xml(mov)); ci deve essere ?
unsigned short skip = 0;
@ -995,7 +1023,7 @@ const char* TEstrazione::diagnostica_mov()
else
mov_i.set_err("Categoria assente", mov_no_catdoc);
if (cd != nullptr)
check_annessi(mov_i, mov_i.numreg());
check_annessi(mov_i);
if (!mov_i.catdoc(categorie_doc()))
++_stats.fv_nocatdoc;
@ -1009,16 +1037,29 @@ const char* TEstrazione::diagnostica_mov()
{
if (mov_i.cartaceo())
{
TF9_doccart filecart;
TFilename file;
if (filecart.mov2doc(mov_i.numreg(), file) && file.exist() || grab_pdf_from_spotlite(mov_i, file) && file.exist())
mov_i.set_nomefilecart(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();
}
@ -1033,6 +1074,7 @@ result_estr TEstrazione::estrai()
// Se non c'e' nessun movimento non sto nemmeno a scrivere il record di estrazione.
// Se estrazione definitiva controllo che il periodo non si sovrapponga alle altre estrazioni def.
// Do' errore ed esco subito.
result_estr res = estr_ok;
if (_movs.empty())
{
warning_box("Non esistono movimenti estraibili per il periodo selezionato.");
@ -1071,9 +1113,11 @@ result_estr TEstrazione::estrai()
// Scrivo record estrazione (in stato '01': in diagnostica).
const bool ok = insert_into_drd();
if (!ok)
{
TString msg;
msg << "Errore database: impossibile scrivere nuova estrazione.\n"
<< fp_db().sq_get_text_error(false);
error_box(msg);
@ -1091,16 +1135,18 @@ result_estr TEstrazione::estrai()
// Se in errore, esporto lista errori sul db
if (!export_error_list())
warning_box("Errore scrittura db. Controllare log errori.");
update_drd_stato_estr();
return estr_diag_err; // Errore diagnostica gestionale
res = estr_diag_err; // Errore diagnostica gestionale
}
// Se va tutto ben fino a qui, posso andare a scrivere nella
// tabella IVA i movimenti. F9IVA
const result_estr res = estrazione_iva() ? estr_ok : estr_err_db_iva;
if (res == estr_err_db_iva)
_head.stato_estr = D_GEST_ERR;
update_drd_stato_estr();
if (res == estr_ok)
{
res = estrazione_iva() ? estr_ok : estr_err_db_iva;
if (res == estr_err_db_iva)
_head.stato_estr = D_GEST_ERR;
}
update_drd_stato_estr();
return res;
}
@ -1114,18 +1160,10 @@ bool TEstrazione::estrazione_iva(bool escluso)
FOR_EACH_ARRAY_ITEM(_movs, r, obj)
{
TMovimento_estr & mov_i = (TMovimento_estr &)*obj;
const TRectype& mov = cache().get(LF_MOV, mov_i.numreg());
const TCausale caus(mov.get(MOV_CODCAUS), mov.get_date(MOV_DATAREG).year());
bool harambe = caus.escludi2archiviazione();
if (caus.escludi2archiviazione()) {
int siamodentro = 0;
}
if (bar.add_status() && mov_i.estratto() && !caus.escludi2archiviazione())
if (bar.add_status() && mov_i.estratto())
{
const TRectype& mov = cache().get(LF_MOV, mov_i.numreg());
TToken_string key = mov.get(MOV_TIPO);
key.add(mov.get(MOV_CODCF));
@ -1154,32 +1192,27 @@ bool TEstrazione::estrazione_iva(bool escluso)
iva_query.add(IVA_IDFISC, idfisc, 30);
iva_query.add(IVA_PIVA, paiv, 28);
iva_query.add(IVA_CODFIS, codfis, 16);
const TClasse_doc* catdoc = mov_i.catdoc(categorie_doc());
if (catdoc != nullptr)
iva_query.add(IVA_CATDOC, catdoc->catdoc(), 10);
iva_query.add(IVA_CATDOC, mov_i.catdoc(categorie_doc())->catdoc(), 10);
const TRegistro& reg = cached_registro(mov.get(MOV_REG), mov.get_int(MOV_ANNOIVA));
if (reg.iva() == iva_vendite)
{
const int anno_doc = mov.get_int(MOV_DANNO);
int anno = mov.get_int(MOV_DANNO);
if (anno_doc > 0)
if (anno > 0)
{
const char provv = mov.get(MOV_DPROVV)[0];
const TString& codnum = mov.get(MOV_DCODNUM);
const long ndoc = mov.get_long(MOV_DNDOC);
TDocumento doc(provv, anno_doc, codnum, ndoc);
TDocumento doc(provv, anno, codnum, ndoc);
iva_query.add(IVA_CAUSSOS, tipo_doc_sdi(doc) , 6);
}
else
if(catdoc!=nullptr)
iva_query.add(IVA_CAUSSOS, catdoc->caus_sost(), 6);
iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_sost(), 6);
}
//
else
{
TToken_string key(mov.get((MOV_KEYFPPRO)), ';');
@ -1192,12 +1225,10 @@ bool TEstrazione::estrazione_iva(bool escluso)
if(tipodoc.full())
iva_query.add(IVA_CAUSSOS, tipodoc, 6);
else
if (catdoc != nullptr)
iva_query.add(IVA_CAUSSOS, catdoc->caus_sost(), 6);
iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_sost(), 6);
}
else
if (catdoc != nullptr)
iva_query.add(IVA_CAUSSOS, catdoc->caus_sost(), 6);
iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_sost(), 6);
}
iva_query.add(IVA_NUMDOC, mov_i.numdoc(), 20);
iva_query.add(IVA_DATADOC, datadoc);
@ -1206,66 +1237,67 @@ bool TEstrazione::estrazione_iva(bool escluso)
iva_query.add(IVA_NPROT, mov.get(MOV_PROTIVA), 20);
iva_query.add(IVA_DATPROT, datareg);
if (catdoc != nullptr)
iva_query.add(IVA_CLASDOC, catdoc->class_sost(), 10);
iva_query.add(IVA_NOMFD, mov_i.nomefilecart().name(), 100);
/*if(is_autofattura(mov))
{
iva_query.add(IVA_FORNOR, "");
iva_query.add(IVA_REGOR, "");
iva_query.add(IVA_NUMOR, N ORI);
iva_query.add(IVA_DATAOR, TDate(20010101));
}*/
iva_query.add(IVA_CLASDOC, mov_i.catdoc(categorie_doc())->class_sost(), 10);
iva_query.add(IVA_NOMFD, mov_i.nomefiledoc().name(), 100);
// Load annessi...
if(!mov_i.annessi().empty())
if(mov_i.allegati())
{
TArray & ann = mov_i.annessi();
TString_array & docs = mov_i.documenti_allegati();
int i = 0;
const int size = ann.items();
const int size = docs.items();
iva_query.add(IVA_CLASAN1, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF1, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN1, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF1, docs.row(i++).get(0), 100);
// HOW DID MY LIFE COME TO THIS?...
if (size > i)
{
iva_query.add(IVA_CLASAN2, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF2, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN2, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF2, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN3, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF3, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN3, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF3, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN4, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF4, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN4, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF4, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN5, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF5, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN5, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF5, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN4, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF4, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN6, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF6, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN6, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF6, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN7, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF7, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN7, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF7, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN8, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF8, docs.row(i++), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN8, ((TAnnesso_mov &)ann[i]).catdocann(), 10);
iva_query.add(IVA_NOMF8, ((TAnnesso_mov &)ann[i++]).filename(), 100);
iva_query.add(IVA_CLASAN9, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF9, docs.row(i++).get(0), 100);
}
if (size > i)
{
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);
@ -1327,8 +1359,8 @@ void TEstrazione::set_dates()
}
TEstrazione::TEstrazione(const TString& ambiente, const bool flag_prov, const char tipodoc, const TString& descr,
const TString& addrcart, const bool escluso, TFilename& spotlite_path, const TDate* const dal, const TDate* const al, const bool has_cartacei)
: _descr(descr), _has_cartacei(has_cartacei), _spotlite_path(spotlite_path)
const TString& addrcart, const bool escluso, TFilename& spotlite_path, TLog_report * log, const TDate* const dal, const TDate* const al, const bool has_cartacei)
: _descr(descr), _has_cartacei(has_cartacei), _spotlite_path(spotlite_path), _log(log)
{
_head.cod_soc = ambiente;
_head.flag_prov = flag_prov;
@ -1342,12 +1374,6 @@ TEstrazione::TEstrazione(const TString& ambiente, const bool flag_prov, const ch
_head.addr_cart = addrcart;
_escluso = escluso;
_error_sql = new ofstream("f9_TEstrazione_error_sql.txt");
// Svuoto log.
ofstream f("TF9Prospetto_integr_error.txt");
f << "\n";
}
@ -1367,14 +1393,10 @@ void TF9_dberr::add_str(const TString& string)
void TF9_dberr::write_sqlerrlog(const TString& query) const
{
if (_fout->is_open())
{
TString msg;
msg << query << "\n" <<
fp_db().sq_get_string_error() << "\n" <<
fp_db().sq_get_text_error();
*_fout << msg << "\n";
}
_log->log_error(query);
_log->log_error(fp_db().sq_get_string_error());
_log->log_error(fp_db().sq_get_text_error());
_log->line();
}
void TF9_dberr::add(const TString& string)
@ -1428,22 +1450,25 @@ bool TF9_dberr::send()
return ok;
}
bool TF9_dberr::del_err(const TString& codsoc, const TString& id_estr, const int numreg)
bool dberr_del_err(const TString& codsoc, const TString& id_estr, const int numreg)
{
TString query;
query << "DELETE FROM " F9_ERR
"\nWHERE " ERR_CODSOC " = '" << codsoc << "'"
"\nAND " ERR_IDESTR " = '" << id_estr << "' AND " ERR_NUMREG " = '" << numreg << "';";
return fp_db().sq_set_exec(query) && fp_db().sq_commit();
}
char TF9_dberr::get_errori(const TString& codsoc, const TString& id_estr, TArray& controllo_mov)
char dberr_get_err(const TString& codsoc, const TString& id_estr, TArray& controllo_mov)
{
TString query;
query << "SELECT * FROM " F9_ERR
"\nWHERE " ERR_CODSOC " = '" << codsoc << "' AND "
ERR_IDESTR " = '" << id_estr << "';";
fp_db().sq_set_exec(query, false);
controllo_mov.destroy();
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
TToken_string row("", '|');
@ -1464,7 +1489,7 @@ char TF9_dberr::get_errori(const TString& codsoc, const TString& id_estr, TArray
return fp_db().sq_get((unsigned)0)[0];
}
TF9_dberr::TF9_dberr()
TF9_dberr::TF9_dberr(TLog_report * log) : _log(log)
{
_insert.cut(0) << "INSERT INTO " F9_ERR " ("
ERR_CODSOC ", "
@ -1481,8 +1506,6 @@ TF9_dberr::TF9_dberr()
ERR_PROTIVA ", "
ERR_DESCR ", "
ERR_DESCERR ") VALUES ()";
_fout = new ofstream;
_fout->open("f9_dberr.txt");
}
;
TString _user;

View File

@ -100,10 +100,21 @@ bool TF9_doccart::add_cart(const TFilename& file, long numreg, const bool is_ann
"Se si tratta di un annesso inserire le informazioni per la cat. documentale.", (const char*)numreg, (const char*)doc);
return false;
}
f9docs.zero();
f9docs.put(F9C_NUMREG, numreg);
f9docs.put(F9C_NRIG, 9);
f9docs.read();
if (f9docs.get_long(F9C_NUMREG) != numreg)
f9docs.prev();
int nrig = 1;
if (f9docs.get_long(F9C_NUMREG) == numreg)
nrig += f9docs.get_long(F9C_NRIG);
f9docs.zero();
f9docs.put(F9C_FILENAME, file.name());
f9docs.put(F9C_NUMREG, numreg);
f9docs.put(F9C_NRIG, nrig);
f9docs.put(F9C_LOADDATE, TDate(TODAY));
f9docs.put(F9C_USER, user());
}
@ -154,39 +165,27 @@ bool TF9_doccart::add_cart(const TFilename& file, long numreg, const bool is_ann
return false;
}
if (!is_annesso)
{
f9docs.write();
f9docs.rewrite();
}
f9docs.write_rewrite();
else
{
f9annessi.write();
f9annessi.rewrite();
}
f9annessi.write_rewrite();
return true;
}
bool TF9_doccart::doc_already_exists(const TFilename& file, long& numreg, bool& annesso)
{
const TRectype & docs_cart = cache().get(LF_F9DOCS, file.name(), 2);
bool ok = docs_cart.full();
annesso = false;
const TRectype & tdocs = cache().get(LF_F9DOCS, file.name(), 2);
bool ok = tdocs.full();
if (ok)
numreg = tdocs.get_long(F9C_NUMREG);
numreg = docs_cart.get_long(F9C_NUMREG);
else
{
numreg = 0L;
_tannessi.zero();
_tannessi.setkey(2);
_tannessi.put(F9A_FILENAME, file.name());
ok = _tannessi.read() == NOERR;
const TRectype & annessi = cache().get(LF_F9ANNESSI, file.name(), 2);
ok = annesso = annessi.full();
if (ok)
{
numreg = _tannessi.get_long(F9A_NUMREG);
annesso = true;
}
numreg = annessi.get_long(F9A_NUMREG);
}
return ok;
}
@ -202,64 +201,54 @@ bool TF9_doccart::mov2doc(long numreg, TFilename& doc)
return ok;
}
bool TF9_doccart::mov2listann(const TString& numreg, _Out_ TString_array& list_annessi)
bool doc_already_exists(const TFilename& file, long& numreg)
{
list_annessi.destroy();
_tannessi.zero();
_tannessi.setkey(1);
_tannessi.put(F9A_NUMREG, numreg);
const TRectype & annessi = cache().get(LF_F9ANNESSI, file.name(), 2);
bool ok = annessi.full();
TString numreg_fetched;
bool ok = false;
// Si posiziona nl primo record giusto. Poi per sapere quando terminare guardo se la chiave e' ancora quella giusta.
for (_tannessi.read(_isgteq); (numreg_fetched = _tannessi.get(F9A_NUMREG)) == numreg; _tannessi.next())
{
ok = true;
TString filename = _tannessi.get(F9A_FILENAME);
TToken_string t;
t.add(numreg_fetched);
t.add(_tannessi.get(F9A_FILENAME));
t.add(_tannessi.get(F9A_CATDOCPAD));
t.add(_tannessi.get(F9A_CATDOCANN));
t.add(_tannessi.get(F9A_LOADDATE));
t.add(_tannessi.get(F9A_USER));
list_annessi.add(t);
#ifdef DBG
CHECK(numreg_fetched == numreg_fetched, "*Maledetooo*");
#endif
}
if (ok)
numreg = annessi.get_long(F9A_NUMREG);
return ok;
}
bool TF9_doccart::mov2listann_vect(const long numreg, TArray & list_annessi)
{
list_annessi.destroy();
_tannessi.zero();
_tannessi.setkey(1);
_tannessi.put(F9A_NUMREG, numreg);
TLocalisamfile annessi(LF_F9ANNESSI);
annessi.put(F9A_NUMREG, numreg);
bool ok = false;
// 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 = annessi.read(_isgteq) == NOERR; err == NOERR; err = annessi.next())
{
long numreg_fetched = _tannessi.get_long(F9A_NUMREG);
long numreg_fetched = annessi.get_long(F9A_NUMREG);
if (numreg_fetched == numreg)
{
ok = true;
TString filename = _tannessi.get(F9A_FILENAME);
TAnnesso_mov t(numreg_fetched, _tannessi.get(F9A_FILENAME), _tannessi.get(F9A_CATDOCPAD),
_tannessi.get(F9A_CATDOCANN), _tannessi.get_date(F9A_LOADDATE), _tannessi.get(F9A_USER));
TString filename = annessi.get(F9A_FILENAME);
TAnnesso_mov t(numreg_fetched, annessi.get(F9A_FILENAME), annessi.get(F9A_CATDOCPAD),
annessi.get(F9A_CATDOCANN), annessi.get_date(F9A_LOADDATE), annessi.get(F9A_USER));
list_annessi.add(t);
}
else
break;
}
return ok;
}
const TString & get_full_path_file_cartaceo(const TString& filename)
{
TFilename name = (F9CONF.get_addr_cart());
name = name.make_absolute_path();
name.add(filename);
return get_tmp_string() = name;
}
///////////////////////////////////////////////////////////////////////////////
// TIva_insert_prepared_stat
///////////////////////////////////////////////////////////////////////////////
@ -362,10 +351,11 @@ void TProspetto_recset::precarica_tabelle()
}
}
void TProspetto_recset::get_sum_imponibile_imposta(const char* numreg_ven, real& s_imponibili, real& s_imposte)
void TProspetto_recset::get_sum_imponibile_imposta(long numreg_ven, real& s_imponibili, real& s_imposte)
{
TRecord_array iva(LF_RMOVIVA, RMI_NUMRIG);
TRectype* ivafilter = new TRectype(LF_RMOVIVA);
ivafilter->put(RMI_NUMREG, numreg_ven);
iva.read(ivafilter);
s_imponibili = ZERO;
@ -373,12 +363,13 @@ void TProspetto_recset::get_sum_imponibile_imposta(const char* numreg_ven, real&
for (int i = iva.first_row(); i <= iva.rows(); ++i)
{
TRectype& r = iva[i];
s_imponibili += r.get_real("IMPONIBILE");
s_imposte += r.get_real("IMPOSTA");
}
}
TProspetto_recset::TProspetto_recset(const char* numreg_acq, const char* numreg_ven) : TSQL_recordset("")
TProspetto_recset::TProspetto_recset(long numreg_acq, long numreg_ven) : TSQL_recordset("")
{
_numreg = new TString;
_today = new TString;
@ -408,6 +399,7 @@ TProspetto_recset::TProspetto_recset(const char* numreg_acq, const char* numreg_
precarica_tabelle();
TLocalisamfile anagraf(LF_ANAG), clifo(LF_CLIFO), comuni(LF_COMUNI), mov_acq(LF_MOV), mov_ven(LF_MOV), rmoviva(LF_RMOVIVA);
mov_acq.put(MOV_NUMREG, numreg_acq);
mov_acq.read();
anagraf.put(ANA_TIPOA, "G");
@ -573,12 +565,12 @@ bool TF9Prospetto_integr::preview()
return _book.preview();
}
bool TF9Prospetto_integr::operator()(const char* numreg_acq, const char* numreg_ven)
bool TF9Prospetto_integr::operator()(long numreg_acq, long numreg_ven)
{
if (_rep.load(_f_report))
{
TFilename fprosp; fprosp.tempdir().slash_terminate() << make_name_rep();
TProspetto_recset* _prosp_rs = new TProspetto_recset(numreg_acq, numreg_ven);
TProspetto_recset * _prosp_rs = new TProspetto_recset(numreg_acq, numreg_ven);
_items = _prosp_rs->items();
if (_items == 0)