Patch level : 12.0 790

Files correlati     : fp0400, f1lib
Commento            :
- Aggiunto log per stato contabilizzazione (salvate/annullate)
- Corretta esportazione importi negativi
This commit is contained in:
Simone Palacino 2019-05-17 11:56:09 +02:00
parent 952eeb374f
commit 9cdaf56763
3 changed files with 119 additions and 3 deletions

View File

@ -6,6 +6,7 @@
#include "execp.h"
#include "cfven.h"
#include "../fp/fp0400a.h"
#include "reputils.h"
TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres)
{
@ -138,4 +139,42 @@ void run_cont_ini()
run_string.cut(0) << "cg2 -0 -i" << TFilename().tempdir() << "\\" << F1_INIREGCONT << "*" << ".ini" << " /u" << user();
#endif
TExternal_app(run_string).run();
}
void TF1_log::log(int severity, const char* msg)
{
if (_log == nullptr)
{
_log = new TLog_report("Stato contabilizzazione:");
// Tento l'eliminazione del file
std::remove("f1_cg.log");
}
static TString txt;
txt.cut(0);
if (severity == LOG_MSG)
txt << "[message] : ";
else if(severity == LOG_WARN)
txt << "[warning] : ";
else if (severity == LOG_ERR)
txt << "[error] : ";
txt << msg;
_log->log(severity, txt);
// Scrivo anche su file
std::filebuf fb;
fb.open("f1_cg.log", std::ios::out | std::ios::app);
std::ostream os(&fb);
os << txt << std::endl;
fb.close();
}
bool TF1_log::show_log()
{
if (_log)
{
_log->preview();
delete _log;
_log = NULL;
}
return true;
}

View File

@ -3,12 +3,17 @@
#include "strings.h"
#include "config.h"
#include "report.h"
#include "reputils.h"
#define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "f1"
#define F1_CAUSFA "causfa"
#define F1_CAUSNC "causnc"
#define F1_INIREGCONT "cg2CONTAB"
#define LOG_MSG 0
#define LOG_WARN 1
#define LOG_ERR 2
enum err_cont
{
@ -41,6 +46,15 @@ public:
};
class TF1_log : TObject
{
TLog_report* _log;
public:
TF1_log() : _log(nullptr){}
void log(int severity, const char* msg);
bool show_log();
};
void set_ini_codcaus(const TString& codcaus, bool nc = false);
const char* get_ini_codcaus(bool nc = false);
const char* get_codcaus(const char * tipodoc, const char* codcf);

View File

@ -33,7 +33,9 @@ enum { filtri = 0, elenco_fe = 1, elenco_err = 2 }; // Enum per bottoni toolbar
class TPassive_mask : public TAutomask
{
bool _f1;
TLog_report* _log;
bool _f1;
protected:
bool _filter_changed;
TFilename _tmp_dir;
@ -59,6 +61,7 @@ protected:
// Gestione F1
int prepara_contab() const;
void log_contab();
void contabilizza();
TDate load_data() const;
// Handlers
@ -557,8 +560,7 @@ int TPassive_mask::prepara_contab() const
contab_ini.set("DATADOC", row->get(sf.cid2index(S_DATADOC)));
contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC)));
contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7));
contab_ini.set("TOTDOC", row->get(sf.cid2index(S_TOTDOC)));
contab_ini.set("PROGFPPRO", row->get(sf.cid2index(S_NPROT)));
contab_ini.set("TOTDOC", abs(real(row->get(sf.cid2index(S_TOTDOC)))).string());
contab_ini.set("KEYFPPRO", row->get(sf.cid2index(S_PROKEY)));
row->add("", 0);
@ -574,6 +576,65 @@ int TPassive_mask::prepara_contab() const
return is_ready;
}
void TPassive_mask::log_contab()
{
TFilename cg_ini;
TString msg;
TF1_log log;
std::vector<TString> doc_saved, doc_canceled;
FOR_EACH_SHEET_ROW(sfield(F_DOCS), n, row)
{
TString num; num.format("%04d", n);
#ifdef DBG
cg_ini = TString(F1_INIREGCONT) << num << ".ini";
#else
cg_ini = TFilename().tempdir() << "\\" << TString(F1_INIREGCONT) << num << ".ini";
#endif
if(cg_ini.exist())
{
TConfig config(cg_ini, "Transaction");
TString numdoc;
if (config.get("Result") == "OK")
{
numdoc = config.get("NUMDOC", "23");
doc_saved.insert(doc_saved.end(), numdoc);
}
else if(config.get("Result") == "CANCEL")
{
numdoc = config.get("NUMDOC", "23");
doc_canceled.insert(doc_canceled.end(), numdoc);
}
}
}
const int elem_save = doc_saved.size();
const int elem_canc = doc_canceled.size();
if (elem_save > 0)
{
if (elem_save == 1)
msg << "Il documento n. '" << doc_saved[0] << "' e' stata registrato.";
else
msg << "Sono stati registrati " << elem_save << " documenti.";
if (elem_save > 1)
for (int i = 0; i < elem_save; i++)
msg << "\n - Documento n. '" << doc_saved[i] << "'";
log.log(LOG_MSG, msg);
}
if (elem_canc > 0)
{
msg.cut(0);
if (elem_canc == 1)
msg << "La registrazione del documento n. '" << doc_canceled[0] << "' e' stata annullata.";
else
msg << "Sono state annullate " << elem_canc << " registrazioni.";
if (elem_canc > 1)
for (int i = 0; i < elem_canc; i++)
msg << "\n - Documento n. '" << doc_canceled[i] << "'";
log.log(LOG_WARN, msg);
}
if (elem_save > 0 || elem_canc > 0)
log.show_log();
}
void TPassive_mask::contabilizza()
{
const int stato = prepara_contab();
@ -582,6 +643,8 @@ void TPassive_mask::contabilizza()
{
case is_ready:
run_cont_ini(); // Eseguo gli ini
log_contab(); // Mostro stato contabilizzate/annullate
clean_ini(F1_INIREGCONT);
fill(); // Ricarico sheet per togliere quelli contabilizzati
break;
case no_codcaus: