#include #include #include #include #include #include #include #include #include #include #include #include #include "baeur.h" #include "../cg/cglib01.h" #include "baeur01.h" #include "baeur02.h" /////////////////////////////////////////////////////////// // Main app /////////////////////////////////////////////////////////// class TEuro00_app : public TEuro_app { protected: void set_prassis(const TString& dir, const TMask& m) const; void reset_770(const TString& dst) const; void convert_tabcom(const TString& lit, const TString& eur); void convert_ini(); void convert_ditte(const TString& eur); void convert_anag(); public: KEY step1(); KEY step2(); virtual void main_loop(); }; inline TEuro00_app& app() { return (TEuro00_app&)main_app(); } /////////////////////////////////////////////////////////// // Step 1 /////////////////////////////////////////////////////////// class TEuro01_mask : public TAutomask { public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TEuro01_mask() : TAutomask("baeur01") { } }; bool TEuro01_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F01_DATIE: if (e == fe_close || e == fe_modify) { const TFilename n = o.get(); const bool esiste = n.exist(); enable(DLG_QUIT, esiste); if (strlen(n.name()) > 8) return error_box("L'area dati in Euro ha un nome troppo lungo: %s", (const char*)n.name()); if (esiste) return error_box("L'area dati in Euro esiste già"); } else if (e == fe_init) { TFilename lit, eur; app().get_aree_dati(lit, eur); set(F01_DATI, lit); if (eur.empty()) eur << lit << "e"; set(F01_DATIE, eur); enable(DLG_QUIT, eur.exist()); } break; default: break; } return TRUE; } void TEuro00_app::set_prassis(const TString& dir, const TMask& m) const { TFilename str = dir; str.add("config/prassis.ini"); TConfig prassis(str, "Euro"); prassis.set("DatiLire", m.get(F01_DATI)); prassis.set("DatiEuro", m.get(F01_DATIE)); } void TEuro00_app::reset_770(const TString& dst) const { TFilename filemask = dst; filemask.add("*.dbf"); TString_array files; list_files(filemask, files); FOR_EACH_ARRAY_ROW(files, i, name) { TExternisamfile eif(*name); eif.zap(); } } KEY TEuro00_app::step1() { goto_lire(); TEuro01_mask* m = new TEuro01_mask; KEY k = m->run(); if (k == K_ENTER) { const TFilename dir1 = m->get(F01_DATI); const TFilename dir2 = m->get(F01_DATIE); if (!fexist(dir2)) make_dir(dir2); TFilename src = dir1; src.add("config"); TFilename dst = dir2; dst.add("config"); copy_dir(src, dst); set_prassis(dir1, *m); set_prassis(dir2, *m); delete m; m = NULL; TCurrency::force_cache_update(); // Chiude cache valute prefix().set(NULL); // Chiude tutti i files src = dir1; src.add("com"); // Copia dati comuni dst = dir2; dst.add("com"); copy_dir(src, dst); src = dir1; src.add("std"); // Copia dati standard dst = dir2; dst.add("std"); copy_dir(src, dst); src = dir1; src.add("m770"); // Copia dati 770 dst = dir2; dst.add("m770"); copy_dir(src, dst); goto_lire(); // Necessario per riaccedere ai tracciati reset_770(dst); } if (m) delete m; return k; } /////////////////////////////////////////////////////////// // Step 2 /////////////////////////////////////////////////////////// class TEuro02_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TEuro02_mask() : TAutomask("baeur02") { } }; bool TEuro02_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F02_LIT: case F02_EUR: if (e == fe_init) { TEdit_field& ef = (TEdit_field&)o; TCursor* cur = ef.browse()->cursor(); if (cur != NULL && cur->items() > 0) { *cur = 0; ef.set(cur->curr().get("CODTAB")); ef.check(STARTING_CHECK); } } break; default: break; } return TRUE; } struct TTabcom_data { TString4 _lit, _eur; int _last_stato; }; HIDDEN bool tabcom_handler(TRectype& curr, void* jolly) { bool update = TRUE; const TString4 cod = curr.get("COD"); if (cod == "CLM") { convert_import(curr, "R0|R1|R2|R3"); } if (cod == "DEL") { update = FALSE; } if (cod == "LIA") { const int anno = atoi(curr.get("CODTAB").mid(5, 4)); if (anno >= 2001) keep_import(curr, "COD|CODTAB|B1|B2|S7|S8|S9"); // Azzera quasi tutto else update = FALSE; } if (cod == "PLA") { update = FALSE; } if (cod == "VAL") { TTabcom_data* data = (TTabcom_data*)jolly; const TString& lit = data->_lit; const TString& eur = data->_eur; const TString& val = curr.get("CODTAB"); if (val == lit) { const real r = 1.0 / EURO; curr.put("B0", ""); curr.put("B1", "X"); curr.put("S4", EURO); curr.put("R10", r); } else if (val == eur) { curr.put("B0", "X"); curr.put("B1", ""); curr.put("S4", "1"); curr.put("R10", "1"); } else { curr.put("B0", ""); if (!curr.get_bool("B1")) { real c = curr.get("S4"); if (c != ZERO) { c = EURO / c; curr.put("S4", c.string(0,6)); curr.put("B1", "X"); } curr.zero("R10"); } } } if (cod == "VER") { zero_import(curr, "R5|R6|R7|R8|R9|R10"); } return update; } void TEuro00_app::convert_tabcom(const TString& lit, const TString& eur) { TTabcom_data data; data._lit = lit; data._eur = eur; TTable stati("%STD"); TTable tipi("%TIP"); stati.last(); const int last_stato = stati.get_int("CODTAB"); for (tipi.first(); tipi.good(); tipi.next()) { TString80 s2; s2 = tipi.get("S2"); if (s2.len() < 3 || s2[2] == ' ') { const char s[2] = { last_stato + '0', '\0'}; s2.overwrite(s, 2, 1); tipi.put("S2", s2); tipi.rewrite(); } } convert_file(LF_TABCOM, NULL, NULL, NULL, tabcom_handler, &data); } HIDDEN void convert_ini_val(TConfig& inilit, TConfig& inieur, const char* name, int index) { real val = inilit.get(name, NULL, index); if (!val.is_zero()) { val /= EURO; val.round(2); inieur.set(name, val.string(0, 2), NULL, TRUE, index); } } void TEuro00_app::convert_ini() { TFilename lit, eur; app().get_aree_dati(lit, eur); lit.add("config\\prassis.ini"); TConfig inilit(lit, "ve"); eur.add("config\\prassis.ini"); TConfig inieur(eur, "ve"); for (int i = 1; i <= 7; i++) { convert_ini_val(inilit, inieur, "SPBOSCA", i); convert_ini_val(inilit, inieur, "SPBOIMP", i); } convert_ini_val(inilit, inieur, "BOLLIES", -1); convert_ini_val(inilit, inieur, "IMPMINBOLLI", -1); for (i = 1; i <= 9; i++) convert_ini_val(inilit, inieur, "IMPSPINC", i); } HIDDEN bool ditte_handler(TRectype& curr, void* jolly) { TTabcom_data* data = (TTabcom_data*)jolly; curr.put(NDT_VALUTA, data->_eur); return TRUE; } void TEuro00_app::convert_ditte(const TString& eur) { TTabcom_data data; data._eur = eur; convert_file(LF_NDITTE, NULL, NULL, NULL, ditte_handler, &data); zap_file(LF_TAB1100A, TRUE); zap_file(LF_TAB1100B, TRUE); } void TEuro00_app::convert_anag() { convert_file(LF_ANAGGIU, NULL, "VALNOM|CAPSOC|CAPVER|FATT", NULL, NULL); convert_file(LF_SOCI, NULL, "EMOLUMENTO", NULL, NULL); if (is_com_file(LF_CLIFO)) { convert_file(LF_CLIFO, NULL, "FIDO", NULL, NULL); convert_file(LF_CFVEN, "IMPMINEFF", "", NULL, NULL); } } KEY TEuro00_app::step2() { goto_lire(); TString16 eur, lit; KEY k = K_QUIT; { TEuro02_mask m; k = m.run(); lit = m.get(F02_LIT); eur = m.get(F02_EUR); } if (k == K_ENTER) { convert_tabcom(lit, eur); convert_ini(); convert_ditte(eur); convert_anag(); } return k; } /////////////////////////////////////////////////////////// // Main /////////////////////////////////////////////////////////// void TEuro00_app::main_loop() { int step = 1; while (step >= 1 && step <= 2) { KEY k = K_ENTER; switch (step) { case 1: k = step1(); break; case 2: k = step2(); break; default: break; } if (k == K_ENTER || k == K_QUIT) step++; if (k == K_ESC) step--; } } int baeur00(int argc, char* argv[]) { TEuro00_app ma; ma.run(argc, argv, "Creazione Studio Euro"); return 0; }