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