campo-sirio/src/f9/f90100.cpp

289 lines
5.5 KiB
C++
Raw Normal View History

#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;
}