289 lines
5.5 KiB
C++
289 lines
5.5 KiB
C++
|
#include <automask.h>
|
||
|
#include "applicat.h"
|
||
|
#include "f90100a.h"
|
||
|
#include "lffiles.h"
|
||
|
#include "isam.h"
|
||
|
#include "mov.h"
|
||
|
#include "f1lib.h"
|
||
|
#include "../fp/fplib.h"
|
||
|
|
||
|
enum state_fppro
|
||
|
{
|
||
|
correct = 1,
|
||
|
reg_with_err = -1,
|
||
|
not_fa = -10,
|
||
|
guessed = 100,
|
||
|
no_guessed = 0
|
||
|
};
|
||
|
|
||
|
class TMonitor_mask : public TAutomask
|
||
|
{
|
||
|
bool _dirty;
|
||
|
state_fppro check_fppro(int numreg) const;
|
||
|
|
||
|
protected:
|
||
|
void sel_all();
|
||
|
bool diagnosticazzi();
|
||
|
bool estrai();
|
||
|
void load_packs();
|
||
|
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||
|
|
||
|
public:
|
||
|
void fill();
|
||
|
void save_all();
|
||
|
void next_page(int p) override;
|
||
|
|
||
|
TMonitor_mask() : TAutomask("f90100a") {}
|
||
|
};
|
||
|
|
||
|
state_fppro TMonitor_mask::check_fppro(int numreg) const
|
||
|
{
|
||
|
TLocalisamfile mov(LF_MOV);
|
||
|
mov.put(MOV_NUMREG, numreg);
|
||
|
if (mov.read() && check_causale(mov.get(MOV_CODCAUS))) // Controllo subito la causale se no non mi interessa
|
||
|
{
|
||
|
// Controllo se ho i riferimenti all'FPPRO e verifico che sia tutto ok
|
||
|
const TString& keys_fppro = mov.get(MOV_KEYFPPRO);
|
||
|
if (keys_fppro.full())
|
||
|
{
|
||
|
TToken_string keys(keys_fppro, ';');
|
||
|
if (fppro_db().check_reg(keys, numreg))
|
||
|
return correct;
|
||
|
return reg_with_err;
|
||
|
}
|
||
|
else // Se non ho i riferimenti faccio guessing
|
||
|
{
|
||
|
if (fppro_db().guess_the_doc(mov))
|
||
|
return guessed;
|
||
|
return no_guessed;
|
||
|
}
|
||
|
}
|
||
|
return not_fa;
|
||
|
}
|
||
|
|
||
|
void TMonitor_mask::sel_all()
|
||
|
{
|
||
|
TSheet_field& sf = sfield(S_MOVS);
|
||
|
const char s = sf.row(0).starts_with("X") ? ' ' : 'X';
|
||
|
sf.hide();
|
||
|
FOR_EACH_SHEET_ROW(sf, n, row)
|
||
|
row->add(s, 0);
|
||
|
sf.force_update();
|
||
|
sf.show();
|
||
|
}
|
||
|
|
||
|
bool TMonitor_mask::diagnosticazzi()
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
bool TMonitor_mask::estrai()
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void TMonitor_mask::load_packs()
|
||
|
{
|
||
|
TSheet_field& sf = sfield(S_ELAB);
|
||
|
|
||
|
const TDate from(TFppro::get_data_first_doc());
|
||
|
const TDate to(TODAY);
|
||
|
|
||
|
TLocalisamfile mov(LF_MOV);
|
||
|
mov.setkey(2);
|
||
|
mov.put(MOV_DATAREG, from);
|
||
|
|
||
|
struct movs_s
|
||
|
{
|
||
|
int n_docs{};
|
||
|
TDate first_doc;
|
||
|
TDate last_doc;
|
||
|
};
|
||
|
std::map<TDate, movs_s> elabs;
|
||
|
for(bool ok = mov.read(); ok && mov.get_date(MOV_DATAREG) <= to; ok = mov.next() == NOERR)
|
||
|
{
|
||
|
TDate last_dt_doc;
|
||
|
TDate last_dt_el;
|
||
|
TDate data_el = mov.get_date(MOV_DATAELABF9);
|
||
|
if(data_el.ok())
|
||
|
{
|
||
|
auto it = elabs.find(data_el);
|
||
|
if (it != elabs.end())
|
||
|
{
|
||
|
elabs[data_el].n_docs++;
|
||
|
last_dt_el = data_el;
|
||
|
last_dt_doc = mov.get_date(MOV_DATAREG);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!elabs.empty())
|
||
|
elabs[last_dt_el].last_doc = last_dt_doc;
|
||
|
elabs.insert({ data_el, {1, mov.get_date(MOV_DATAREG), TDate()} });
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for (auto it = elabs.begin(); it != elabs.end(); ++it)
|
||
|
{
|
||
|
TToken_string& row = sf.row(-1);
|
||
|
row.add(it->first, 1);
|
||
|
row.add(it->second.n_docs);
|
||
|
row.add(it->second.first_doc);
|
||
|
row.add(it->second.last_doc);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TMonitor_mask::fill()
|
||
|
{
|
||
|
const TDate dataini = get_date(F_DATAINI);
|
||
|
const TDate dataend = get_date(F_DATAEND);
|
||
|
TSheet_field& sf = sfield(S_MOVS);
|
||
|
TLocalisamfile mov(LF_MOV);
|
||
|
|
||
|
|
||
|
sf.hide();
|
||
|
sf.reset();
|
||
|
mov.setkey(2);
|
||
|
mov.put(MOV_DATAREG, dataini);
|
||
|
int i = 0;
|
||
|
for(bool ok = mov.read(); ok && mov.get_date(MOV_DATAREG) <= dataend; ok = mov.next() == NOERR)
|
||
|
{
|
||
|
if(mov.get_bool(MOV_REGST) && mov.get(MOV_NUMDOC).full())
|
||
|
{
|
||
|
TToken_string& row = sf.row(-1);
|
||
|
row.add("");
|
||
|
row.add(mov.get(MOV_NUMREG));
|
||
|
row.add(mov.get(MOV_DATAREG));
|
||
|
row.add(mov.get(MOV_DATADOC));
|
||
|
row.add(mov.get(MOV_CODCAUS));
|
||
|
row.add(mov.get(MOV_MESELIQ));
|
||
|
row.add(mov.get(MOV_NUMDOC));
|
||
|
row.add(mov.get(MOV_PROTIVA));
|
||
|
row.add(mov.get(MOV_DESCR));
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sf.force_update();
|
||
|
sf.show();
|
||
|
|
||
|
set(F_TOTMOV, i);
|
||
|
|
||
|
sel_all();
|
||
|
}
|
||
|
|
||
|
void TMonitor_mask::save_all()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void TMonitor_mask::next_page(int p)
|
||
|
{
|
||
|
if (_dirty && p != 1000)
|
||
|
{
|
||
|
fill();
|
||
|
_dirty = false;
|
||
|
}
|
||
|
TAutomask::next_page(p);
|
||
|
}
|
||
|
|
||
|
bool TMonitor_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
|
{
|
||
|
switch (o.dlg())
|
||
|
{
|
||
|
case F_DATAINI:
|
||
|
if (e == fe_init)
|
||
|
{
|
||
|
#ifdef DBG
|
||
|
TDate d("01-01-2017");
|
||
|
#else
|
||
|
TDate d(TODAY);
|
||
|
d.set_month(1); d.set_day(1);
|
||
|
#endif
|
||
|
o.set(d);
|
||
|
}
|
||
|
break;
|
||
|
case F_DATAEND:
|
||
|
if (e == fe_init)
|
||
|
{
|
||
|
TDate d(TODAY); d.set_month(d.month() - 1); d.set_end_month();
|
||
|
o.set(d);
|
||
|
}
|
||
|
break;
|
||
|
case S_ELAB:
|
||
|
if(e == fe_init)
|
||
|
load_packs();
|
||
|
break;
|
||
|
case DLG_ALL:
|
||
|
if(e == fe_button && curr_page() == 1)
|
||
|
sel_all();
|
||
|
break;
|
||
|
case B_ESTR:
|
||
|
if (e == fe_button)
|
||
|
estrai();
|
||
|
break;
|
||
|
case DLG_FINDREC:
|
||
|
if(e == fe_button && curr_page() == 1)
|
||
|
{
|
||
|
fill();
|
||
|
if(diagnosticazzi());
|
||
|
field(B_ESTR).enable();
|
||
|
}
|
||
|
break;
|
||
|
case DLG_USER:
|
||
|
if (e == fe_button && jolly > 0)
|
||
|
{
|
||
|
TSheet_field& sf = sfield(S_MOVS);
|
||
|
TToken_string& row = sf.row(sf.selected());
|
||
|
TRectype mov(LF_MOV);
|
||
|
mov.put(MOV_NUMREG, row.get(sf.cid2index(F_NUMREG)));
|
||
|
if (mov.edit())
|
||
|
fill();
|
||
|
}
|
||
|
break;
|
||
|
default: break;
|
||
|
}
|
||
|
|
||
|
if (e == fe_modify)
|
||
|
if (o.dlg() >= START_MASK && o.dlg() < END_MASK || o.dlg() >= F_SEL && o.dlg() <= F_DESCR)
|
||
|
field(B_ESTR).disable();
|
||
|
|
||
|
if((e == fe_modify || e >= se_enter) && jolly == 0)
|
||
|
if (o.dlg() >= START_MASK && o.dlg() < END_MASK)
|
||
|
_dirty = true;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////
|
||
|
// TF9_app
|
||
|
///////////////////////////////////////////////
|
||
|
|
||
|
class TF9_app : public TSkeleton_application
|
||
|
{
|
||
|
public:
|
||
|
virtual bool create();
|
||
|
virtual void main_loop();
|
||
|
};
|
||
|
|
||
|
bool TF9_app::create()
|
||
|
{
|
||
|
return TSkeleton_application::create();
|
||
|
}
|
||
|
|
||
|
void TF9_app::main_loop()
|
||
|
{
|
||
|
TMonitor_mask m;
|
||
|
m.field(B_ESTR).disable();
|
||
|
while (m.run() == K_ENTER)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int f90100(int argc, char* argv[])
|
||
|
{
|
||
|
TF9_app app;
|
||
|
app.run(argc, argv, TR("Configurazione FP"));
|
||
|
return 0;
|
||
|
}
|