#include "f90.h" #include "applicat.h" #include "automask.h" #include "f90200a.h" #include "tsdb.h" #include "../fp/fplib.h" #include "f901tab.h" #include "f90100.h" /////////////////////////////////////////////////////////////// // TF9_categorie_doc_msk /////////////////////////////////////////////////////////////// class TF9_categorie_doc_msk : public TAutomask { bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; bool on_key(KEY key) override; void check_spell() const; void load_table() const; void salva_tabella() const; public: TF9_categorie_doc_msk() : TAutomask("f90200a") { load_table(); } }; bool TF9_categorie_doc_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch(o.dlg()) { case DLG_OK: if (e == fe_button) salva_tabella(); break; case B_DELETE: if (e == fe_button) { TSheet_field& sf = sfield(S_CLASSDOC); sf.hide(); FOR_EACH_SHEET_ROW(sf, nr, row) { if (row->starts_with("X")) { sf.destroy(nr); --nr; } } sf.show(); } break; } /*if(o.dlg() >= F_SELCLASS && o.dlg() <= F_OPERCEE && (e == fe_init || e == fe_modify) && jolly >= 1) { return true; }*/ return true; } bool TF9_categorie_doc_msk::on_key(KEY key) { if (key == K_DEL) { TSheet_field& sf = sfield(S_CLASSDOC); sf.hide(); int row = sf.selected(); TString_array& arr = sf.rows_array(); arr.destroy(row, true); sf.force_update(); sf.show(); } return TAutomask::on_key(key); } void TF9_categorie_doc_msk::check_spell() const { TSheet_field& sf = sfield(S_CLASSDOC); FOR_EACH_SHEET_ROW(sf, nr, row) { TString start; TString catdoc = start = row->get(F_CATDOC - 101); catdoc.trim(); catdoc.upper(); std::string ss = (const char*)catdoc; for (size_t i = 0; i < ss.size(); ++i) { if (!(ss[i] >= 'A' && ss[i] <= 'Z' || ss[i] >= '0' && ss[i] <= '9' || ss[i] == '_')) ss.erase(i--, 1); } catdoc = ss.c_str(); row->add(catdoc, 1); if (catdoc != start) sf.force_update(); } } void TF9_categorie_doc_msk::load_table() const { TSheet_field& sf = sfield(S_CLASSDOC); sf.hide(); sf.destroy(); int idx = 0; while (true) { const TString& appo = ini_get_string(CONFIG_DITTA, "F9", "CATDOC", "", idx++); if (appo == "STOP" || appo.empty()) /* STOP: Riga terminatrice */ break; TToken_string& row = sf.row(-1); row = appo; } sf.show(); sf.force_update(); } void TF9_categorie_doc_msk::salva_tabella() const { check_spell(); int idx = 0; TString iget = "start"; while (iget != "STOP" && !iget.empty()) { iget = ini_get_string(CONFIG_DITTA, "F9", "CATDOC", "", idx); ini_remove(CONFIG_DITTA, "F9", "CATDOC", idx++); } idx = 0; TSheet_field& sf = sfield(S_CLASSDOC); FOR_EACH_SHEET_ROW(sf, nr, row) { if(!((TString*)row)->empty()) ini_set_string(CONFIG_DITTA, "F9", "CATDOC", *row, idx++); } ini_set_string(CONFIG_DITTA, "F9", "CATDOC", "STOP", idx); // Riga terminatrice // Reload load_table(); } /////////////////////////////////////////////////////////////// // TF9_categorie_doc /////////////////////////////////////////////////////////////// class TF9_categorie_doc : public TSkeleton_application { TString _log; void add_error_log(TString& query); void main_loop() override; public: TF9_categorie_doc() = default; }; void TF9_categorie_doc::add_error_log(TString& query) { _log << "\n" << query << "\n" << fp_db().sq_get_text_error() << "\n" << fp_db().sq_get_string_error(); } void TF9_categorie_doc::main_loop() { TF9_categorie_doc_msk msk; while(msk.run() == K_ENTER) { TSheet_field& sf = msk.sfield(S_CLASSDOC); TString query; query << "TRUNCATE TABLE " F9_DRT ";\n"; bool ok = fp_db().sq_set_exec(query, false) && fp_db().sq_commit(); if (ok) { FOR_EACH_SHEET_ROW(sf, nr, row) { query.cut(0); query << "INSERT INTO " F9_DRT "(" DRT_CODSOC ", " DRT_CATDOC ", " DRT_DESCR ", " DRT_CLASSO ", " DRT_CAUSSO ", " DRT_CAUSCON ", " DRT_TIPOCAU ", " DRT_TIMOMOV ", " DRT_OPCEE ")\nVALUES('" << ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9) << "', '" << row->get(1) << "', '" << row->get(2) << "', '" << row->get(3) << "', '" << row->get(4) << "', '" << row->get(5) << "', '" << row->get(6) << "', '" << row->get(7) << "', '" << row->get(8) << "');\n"; ok &= fp_db().sq_set_exec(query, false) && fp_db().sq_commit(); if (!ok) break; } } if (!ok) { add_error_log(query); ofstream fout; fout.open("f9.catdoc.dberror.txt"); fout << _log << "\n"; error_box("Errore nel salvataggio dei dati.\nControllare file di errore f9.catdoc.dberror.txt"); } } } int f90200(const int argc, char* argv[]) { TF9_categorie_doc app; app.run(argc, argv, TR("Configurazione Categorie Documentali.")); return 0; }