Merge branch 'R12.00.1136' of http://10.65.20.33/sirio/CAMPO/campo into R12.00.1136
This commit is contained in:
commit
1f0e7624fe
@ -93,6 +93,7 @@
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<AdditionalLibraryDirectories>..\lib</AdditionalLibraryDirectories>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
|
@ -68,10 +68,13 @@
|
||||
<ClCompile Include="..\src\f9\f90200.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\f9\f90400.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\f9\f90300.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\f9\f90400.cpp">
|
||||
<ClCompile Include="..\src\f9\f90500.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\f9\f90500.cpp">
|
||||
|
@ -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
|
||||
@ -82,7 +84,7 @@ int TEstrai_mask::estrai()
|
||||
|
||||
long nreg = mov.get_long(MOV_NUMREG);
|
||||
|
||||
if (nreg == 20045)
|
||||
if (nreg == 207)
|
||||
int here = 0;
|
||||
|
||||
if (escluso)
|
||||
@ -132,6 +134,8 @@ int TEstrai_mask::estrai()
|
||||
#endif
|
||||
// Ricalcolo sheet estrazioni
|
||||
f9_app().notify_estraction();
|
||||
if (log.rows() > 0)
|
||||
log.preview();
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -165,7 +169,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;
|
||||
@ -620,7 +623,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)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -674,9 +677,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;
|
||||
}
|
||||
|
||||
@ -1345,20 +1346,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
|
||||
@ -1460,6 +1447,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);
|
||||
@ -1476,7 +1464,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;
|
||||
@ -1499,9 +1487,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;
|
||||
}
|
||||
@ -1528,14 +1516,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";
|
||||
@ -1618,7 +1598,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();
|
||||
@ -1678,6 +1659,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;
|
||||
|
@ -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. */
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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());
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
100
src/f9/f9lib.h
100
src/f9/f9lib.h
@ -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"
|
||||
@ -328,9 +329,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:
|
||||
@ -356,20 +359,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); }
|
||||
@ -378,11 +390,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;
|
||||
@ -391,12 +405,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.
|
||||
@ -411,13 +425,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:
|
||||
@ -427,16 +440,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:
|
||||
@ -485,8 +498,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() {}
|
||||
};
|
||||
|
||||
|
||||
@ -494,7 +507,7 @@ class TF9_dberr
|
||||
{
|
||||
TString _str;
|
||||
TString _insert;
|
||||
ofstream* _fout;
|
||||
TLog_report * _log;
|
||||
|
||||
protected:
|
||||
void add_str(const TString& string);
|
||||
@ -507,11 +520,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
|
||||
@ -534,26 +548,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() { }
|
||||
};
|
||||
|
||||
|
||||
@ -601,9 +611,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();
|
||||
};
|
||||
|
||||
@ -624,7 +634,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();
|
||||
};
|
||||
|
@ -73,8 +73,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;
|
||||
@ -86,11 +85,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);
|
||||
@ -103,6 +105,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)
|
||||
@ -118,8 +126,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));
|
||||
@ -142,9 +219,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);
|
||||
@ -225,32 +301,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;
|
||||
|
||||
@ -266,11 +347,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;
|
||||
@ -280,25 +361,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)
|
||||
@ -370,42 +467,37 @@ 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 (file.is_relative_path())
|
||||
{
|
||||
const TString studio = prefix().get_studio();
|
||||
file.insert(studio);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -466,45 +558,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.
|
||||
@ -531,10 +585,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;
|
||||
@ -543,7 +596,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
|
||||
{
|
||||
@ -582,33 +635,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);
|
||||
@ -654,7 +712,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() << " );";
|
||||
@ -665,7 +723,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;
|
||||
@ -694,9 +752,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;
|
||||
@ -771,23 +829,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
|
||||
@ -833,7 +885,7 @@ const char* TEstrazione::diagnostica_mov()
|
||||
|
||||
const long numreg = mov_i.numreg();
|
||||
|
||||
if (numreg == 20045) {
|
||||
if (numreg == 210) {
|
||||
int here = 0;
|
||||
}
|
||||
|
||||
@ -916,30 +968,12 @@ const char* TEstrazione::diagnostica_mov()
|
||||
|
||||
// DA CONTROLLARE
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -969,7 +1003,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;
|
||||
|
||||
@ -1010,7 +1044,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;
|
||||
@ -1024,16 +1058,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();
|
||||
}
|
||||
@ -1048,6 +1095,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.");
|
||||
@ -1086,9 +1134,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);
|
||||
@ -1106,16 +1156,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;
|
||||
}
|
||||
|
||||
@ -1129,18 +1181,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));
|
||||
@ -1169,32 +1213,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)), ';');
|
||||
@ -1207,12 +1246,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);
|
||||
@ -1221,66 +1258,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);
|
||||
@ -1342,8 +1380,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;
|
||||
@ -1357,12 +1395,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";
|
||||
}
|
||||
|
||||
|
||||
@ -1382,14 +1414,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)
|
||||
@ -1443,22 +1471,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("", '|');
|
||||
@ -1479,7 +1510,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 ", "
|
||||
@ -1496,8 +1527,6 @@ TF9_dberr::TF9_dberr()
|
||||
ERR_PROTIVA ", "
|
||||
ERR_DESCR ", "
|
||||
ERR_DESCERR ") VALUES ()";
|
||||
_fout = new ofstream;
|
||||
_fout->open("f9_dberr.txt");
|
||||
}
|
||||
;
|
||||
TString _user;
|
||||
|
@ -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)
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef __AUTOMASK_H
|
||||
#define __AUTOMASK_H
|
||||
|
||||
#ifndef __DEFMASK_H
|
||||
#ifndef __DEFMASK_Hautomask
|
||||
#include <defmask.h>
|
||||
#endif
|
||||
|
||||
|
@ -73,6 +73,18 @@ bool print_url(const char* url)
|
||||
return ok;
|
||||
}
|
||||
|
||||
const TString & get_golem_path(long ditta)
|
||||
{
|
||||
TFilename golem_path;
|
||||
if (ditta < 0)
|
||||
ditta = prefix().get_codditta();
|
||||
golem_path = firm2dir(ditta);
|
||||
golem_path.add("golem");
|
||||
if (!dexist(golem_path))
|
||||
make_dir(golem_path);
|
||||
return get_tmp_string() = golem_path;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Maschera GOLEM
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -452,13 +464,8 @@ bool TGolem_field::autosave(TRelation& r)
|
||||
const int logicnum = r.lfile().num();
|
||||
dir.get(logicnum, _nolock, _nordir, _sysdirop);
|
||||
const long ditta = dir.is_com() ? 0 : prefix().get_codditta();
|
||||
|
||||
TFilename golem_path;
|
||||
golem_path = firm2dir(ditta);
|
||||
golem_path.add("golem");
|
||||
if (!dexist(golem_path))
|
||||
make_dir(golem_path);
|
||||
|
||||
const TFilename golem_path = get_golem_path(ditta);
|
||||
|
||||
const int old_items = _old_value.items();
|
||||
const int new_items = new_value.items();
|
||||
const int items = new_items > old_items ? new_items : old_items;
|
||||
@ -506,6 +513,8 @@ bool TGolem_field::autosave(TRelation& r)
|
||||
}
|
||||
|
||||
fcopy(new_file, old_file);
|
||||
if (old_file.starts_with(golem_path))
|
||||
old_file = old_file.mid(golem_path.len());
|
||||
new_row.add(old_file, 0);
|
||||
new_value.add(new_row, i);
|
||||
|
||||
|
@ -15,6 +15,8 @@ bool print_url(const char* url);
|
||||
|
||||
class TMAPI_session;
|
||||
|
||||
const TString & get_golem_path(long ditta);
|
||||
|
||||
class TMail_message : public TString_array
|
||||
{
|
||||
TString_array _recipients, _copy_recipients, _attachments;
|
||||
|
@ -337,9 +337,9 @@ public:
|
||||
// @cmember Modifica a video la riga
|
||||
void update(int row);
|
||||
// @cmember Ritorna la disabilitazione della colonna <p col>
|
||||
bool column_disabled(int col) const { return _column_disabled[col]; }
|
||||
bool column_disabled(int col) const;
|
||||
// @cmember Ritorna l' abilitazione della colonna <p col>
|
||||
bool column_enabled(int col) const { return !column_disabled(col); }
|
||||
bool column_enabled(int col) const;
|
||||
|
||||
// @cmember Ritorna il contenuto della riga <p n>-esima
|
||||
TToken_string& row(int n) { return _str.row(n); }
|
||||
@ -1065,6 +1065,21 @@ bool TSpreadsheet::destroy(
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TSpreadsheet::column_disabled(int col) const
|
||||
{
|
||||
if (col >= FIRST_FIELD)
|
||||
col = cid2index(col);
|
||||
return _column_disabled[col];
|
||||
}
|
||||
|
||||
bool TSpreadsheet::column_enabled(int col) const
|
||||
{
|
||||
if (col >= FIRST_FIELD)
|
||||
col = cid2index(col);
|
||||
return !column_disabled(col);
|
||||
}
|
||||
|
||||
|
||||
// @doc INTERNAL
|
||||
|
||||
// @mfunc Modifica a video la riga
|
||||
|
@ -7,32 +7,58 @@
|
||||
* Classe per esecuzioni di query temporanee (wrapper semplice per SACommand) *
|
||||
******************************************************************************/
|
||||
|
||||
const bool SSimple_query::sq_set_exec(const char* query, const bool auto_f)
|
||||
{
|
||||
bool ok = false;
|
||||
|
||||
if (sq_is_connect())
|
||||
{
|
||||
ok = _rec.set(query);
|
||||
if (ok)
|
||||
_rec.exec(auto_f);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
const TDate SSimple_query::sq_get_date(const char * field)
|
||||
{
|
||||
TDate date(_rec.get_date(field));
|
||||
if(!date.ok() || date == 19000100)
|
||||
TDate date;
|
||||
|
||||
if (sq_is_connect())
|
||||
{
|
||||
TString dt_str = _rec.get(field);
|
||||
if (dt_str.len() > 10)
|
||||
dt_str = dt_str.left(10);
|
||||
date = dt_str;
|
||||
date = _rec.get_date(field);
|
||||
|
||||
if (!date.ok() || date == 19000100)
|
||||
{
|
||||
TString dt_str = _rec.get(field);
|
||||
|
||||
if (dt_str.len() > 10)
|
||||
dt_str = dt_str.left(10);
|
||||
date = dt_str;
|
||||
}
|
||||
}
|
||||
return date;
|
||||
}
|
||||
|
||||
const real SSimple_query::sq_get_real(const char * field)
|
||||
{
|
||||
const real app(_rec.get(field));
|
||||
return app;
|
||||
real r;
|
||||
|
||||
if (sq_is_connect())
|
||||
r = _rec.get(field);
|
||||
return r;
|
||||
}
|
||||
|
||||
const TString & SSimple_query::sq_get(const char* field, const bool rtrim)
|
||||
{
|
||||
TString & fld = get_tmp_string(1024);
|
||||
|
||||
fld = _rec.get(field);
|
||||
if (rtrim)
|
||||
fld.rtrim();
|
||||
if (sq_is_connect())
|
||||
{
|
||||
fld = _rec.get(field);
|
||||
if (rtrim)
|
||||
fld.rtrim();
|
||||
}
|
||||
|
||||
return fld;
|
||||
}
|
||||
@ -51,15 +77,18 @@ const TString & SSimple_query::sq_get(unsigned int column, const bool rtrim)
|
||||
{
|
||||
TString & val = get_tmp_string(1024);
|
||||
|
||||
val << _rec.get(column);
|
||||
if (rtrim)
|
||||
val.rtrim();
|
||||
if (sq_is_connect())
|
||||
{
|
||||
val << _rec.get(column);
|
||||
if (rtrim)
|
||||
val.rtrim();
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
unsigned SSimple_query::sq_get_num_fields() const
|
||||
{
|
||||
return _rec.get_num_fields();
|
||||
return sq_is_connect() ? _rec.get_num_fields() : 0;
|
||||
}
|
||||
|
||||
const TString & SSimple_query::sq_get_name_field(const unsigned column) const
|
||||
|
@ -1,30 +1,3 @@
|
||||
/**********************************************************************************
|
||||
* ######\ *
|
||||
* ## __##\ *
|
||||
* ## / \__| ######\ ######\####\ ######\ ######\ *
|
||||
* ## | \____##\ ## _## _##\ ## __##\ ## __##\ *
|
||||
* ## | ####### |## / ## / ## |## / ## |## / ## | *
|
||||
* ## | ##\ ## __## |## | ## | ## |## | ## |## | ## | *
|
||||
* \###### |\####### |## | ## | ## |####### |\###### | *
|
||||
* \______/ \_______|\__| \__| \__|## ____/ \______/ *
|
||||
* ## | *
|
||||
* ## | *
|
||||
* \__| *
|
||||
**********************************************************************************/
|
||||
|
||||
|
||||
/********************************************************************************************************************************
|
||||
* TSDB.H *
|
||||
* Inizio sviluppo: 13.10.2016 *
|
||||
* Autore: Tolla *
|
||||
* Descrizione: *
|
||||
* La seguente libreria ha due scopi: *
|
||||
* - Implementare una serie di funzioni che emulino interamente il funzionamento attuale di campo in Visual FoxPro su MSQL *
|
||||
* - Creare delle nuove API per gestire il database in MSSQL con cui verranno riscritti i programmi *
|
||||
* Librerie esterne utilizzate: *
|
||||
* - SQLAPI++ (Permette la gestione dei più famosi DB attualmente esistenti) *
|
||||
********************************************************************************************************************************/
|
||||
|
||||
#ifndef __TSDB_H
|
||||
#define __TSDB_H
|
||||
|
||||
@ -51,12 +24,6 @@
|
||||
|
||||
#include "recset.h"
|
||||
|
||||
/********************************************************************************
|
||||
* SSimpleQuery (Sirio Simple Query) *
|
||||
* "Wrapper" di TXvt_recordset, implementa OGNI funzione in modo tale da *
|
||||
* poterlo sostituire brutalmente in qualsiasi momento così da non aver *
|
||||
* problemi come durante il passaggio da ISAM a SQL (spero). che cazzata da riscrivere *
|
||||
********************************************************************************/
|
||||
class SSimple_query
|
||||
{
|
||||
protected:
|
||||
@ -108,44 +75,44 @@ public:
|
||||
|
||||
// Configuration
|
||||
/**< Imposta la query ricevuta come (const char *) nel recordset */
|
||||
const bool sq_set(const char* query) { return _rec.set(query); }
|
||||
const bool sq_set(const char* query) { return sq_is_connect() && _rec.set(query); }
|
||||
/**< Imposta la query ricevuta come (string) nel recordset */
|
||||
const bool sq_set(const string& query) { return _rec.set(query.c_str()); }
|
||||
const bool sq_set(const string& query) { return sq_is_connect() && _rec.set(query.c_str()); }
|
||||
/**< Imposta la query ricevuta come (TString) nel recordset */
|
||||
const bool sq_set(TString& query) { return _rec.set(static_cast<const char *>(query)); }
|
||||
const bool sq_set(TString& query) { return sq_is_connect() && _rec.set(static_cast<const char *>(query)); }
|
||||
/**< Esegue la query impostata nel recordset, se viene passato autoF == true esegue anche un comando sqNext() */
|
||||
const bool sq_exec(bool autoF = true) { return _rec.exec(autoF); }
|
||||
const bool sq_exec(bool autoF = true) { return sq_is_connect() && _rec.exec(autoF); }
|
||||
/**< Unisce le funzioni sqSet e sqExec, riceve la query come (const char *) */
|
||||
const bool sq_set_exec(const char* query, const bool auto_f = true) { _rec.set(query); return _rec.exec(auto_f); }
|
||||
const bool sq_set_exec(const char* query, const bool auto_f = true);
|
||||
/**< Unisce le funzioni sqSet e sqExec, riceve la query come (string) */
|
||||
const bool sq_set_exec(const string& query, const bool auto_f = true) { _rec.set(query.c_str()); return _rec.exec(auto_f); }
|
||||
/**< Unisce le funzioni sqSet e sqExec, riceve la query come (TString) */
|
||||
const bool sq_set_exec(TString& query, const bool auto_f = true) { return sq_set_exec(static_cast<const char*>(query), auto_f); }
|
||||
/**< Si sposta avanti di un record, in caso di esito negativo valorizza _stringError e _codeError */
|
||||
const bool sq_next() { return _rec.next(); }
|
||||
const bool sq_next() { return sq_is_connect() && _rec.next(); }
|
||||
/**< Si sposta indietro di un record, in caso di esito negativo valorizza _stringError e _codeError */
|
||||
const bool sq_prev() { return _rec.prev(); }
|
||||
const bool sq_prev() { return sq_is_connect() && _rec.prev(); }
|
||||
/**< Si sposta al primo record, in caso di esito negativo valorizza _stringError e _codeError */
|
||||
const bool sq_first() { return _rec.first(); }
|
||||
const bool sq_first() { return sq_is_connect() && _rec.first(); }
|
||||
/**< Si sposta all'ultimo record, in caso di esito negativo valorizza _stringError e _codeError */
|
||||
const bool sq_last() { return _rec.last(); }
|
||||
const bool sq_last() { return sq_is_connect() && _rec.last(); }
|
||||
/**< Si sposta alla posizione n, in caso di esito negativo valorizza _stringError e _codeError */
|
||||
const bool sq_go(const int new_pos) { return _rec.go(new_pos); }
|
||||
const bool sq_go(const int new_pos) { return sq_is_connect() && _rec.go(new_pos); }
|
||||
/**< Ritorna il numero di righe affette dall'ultima query */
|
||||
const int sq_rows_affected() const { return _rec.rows_affected(); }
|
||||
const int sq_rows_affected() const { return sq_is_connect() ? _rec.rows_affected() : 0; }
|
||||
|
||||
|
||||
// Getters
|
||||
/**< Ritorna il valore nel campo (field) in formato (int) */
|
||||
const int sq_get_int(const char* field) { return _rec.get_int(field); }
|
||||
const int sq_get_int(const char* field) { return sq_is_connect() ? _rec.get_int(field) : 0; }
|
||||
/**< Ritorna il valore nel campo (field) in formato (short) */
|
||||
const short sq_get_short(const char* field) { return _rec.get_short(field); }
|
||||
const short sq_get_short(const char* field) { return sq_is_connect() ? _rec.get_short(field) : 0; }
|
||||
/**< Ritorna il valore nel campo (field) in formato (long) */
|
||||
const long sq_get_long(const char* field) { return _rec.get_long(field); }
|
||||
const long sq_get_long(const char* field) { return sq_is_connect() ? _rec.get_long(field) : 0L; }
|
||||
/**< Ritorna il valore nel campo (field) in formato (double) */
|
||||
const double sq_get_double(const char* field) { return _rec.get_double(field); }
|
||||
const double sq_get_double(const char* field) { return sq_is_connect() ? _rec.get_double(field) : 0.0; }
|
||||
/**< Ritorna il valore nel campo (field) in formato (bool) */
|
||||
const bool sq_get_bool(const char* field) { return _rec.get_bool(field); }
|
||||
const bool sq_get_bool(const char* field) { return sq_is_connect() && _rec.get_bool(field); }
|
||||
/**< Ritorna il valore nel campo (field) in formato (TDate) */
|
||||
const TDate sq_get_date(const char* field);
|
||||
/**< Ritorna il valore nel campo (field) in formato (real) */
|
||||
@ -161,7 +128,7 @@ public:
|
||||
/**< Ritorna il valore della colonna numero (column) passato come (unsigned int) */
|
||||
const TString & sq_get(unsigned int column, bool rtrim = true);
|
||||
/**< Ritorna il valore nel campo (field) in formato (char) */
|
||||
const char sq_get_char(const char* field) { return _rec.get_char(field); }
|
||||
const char sq_get_char(const char* field) { return sq_is_connect() && _rec.get_char(field); }
|
||||
/**< Ritorna il numero di campi dopo l'ultimo comando di esecuzione effettuato; se il risultato esiste */
|
||||
unsigned int sq_get_num_fields() const;
|
||||
/**< Ritorna il nome del campo numero (column) in formato (TString) = */
|
||||
@ -171,7 +138,7 @@ public:
|
||||
/**< Ritorna il tipo del campo numero (column) in formato (TFieldtypes) */
|
||||
TFieldtypes sq_get_type_field(unsigned column) const;
|
||||
/**< Ritorna la posizione attuale */
|
||||
const long sq_pos() const { return _rec.pos(); }
|
||||
const long sq_pos() const { return sq_is_connect() ? _rec.pos() : 0; }
|
||||
|
||||
// Error Getters
|
||||
/**< Ritorno l'ultimo codice errore segnalato in formato /int) */
|
||||
|
Loading…
x
Reference in New Issue
Block a user