diff --git a/ba/ba0.cpp b/ba/ba0.cpp index f9092f1eb..c7692d64d 100755 --- a/ba/ba0.cpp +++ b/ba/ba0.cpp @@ -8,6 +8,13 @@ #include #include +#if XVT_OS == XVT_OS_SCOUNIX +#include +#else +#include +#endif + + #if XVT_OS == XVT_OS_WIN extern "C" { @@ -124,6 +131,7 @@ protected: bool check_user(); virtual bool create(); virtual bool menu(MENU_TAG m); + virtual bool build_firm_data(long cod, bool flagcom = FALSE); static bool menu_item_handler(TMask_field&f, KEY k); static bool menu_find_handler(TMask_field&f, KEY k); @@ -140,6 +148,108 @@ bool TMenu_application::_find_button = FALSE; inline TMenu_application& app() { return (TMenu_application&)main_app(); } +bool TMenu_application::build_firm_data(long codditta, bool flagcom) + +{ + const char * const ndir = "/dir.gen"; + const char * const ntrc = "/trc.gen"; + TFilename s(firm2dir(codditta)); s << ndir; + bool exist = fexist(s); + + if (!exist) + { + s = s.path(); s << ntrc; + exist = fexist(s); + } + if (exist) + return message_box("Direttorio dati danneggiato, non posso attivare la ditta %ld", codditta); + if (!yesno_box("I dati della ditta %ld non esistono : devo generarli ?", codditta)) + return FALSE; + s = s.path(); +#if XVT_OS == XVT_OS_SCOUNIX + if (mkdir(s, 0777) == -1) +#else + if (mkdir(s) == -1) +#endif + return error_box("Impossibile creare il direttorio della ditta %ld (%s)", + codditta, (const char*) ndir); + + s << ndir; + if (!fcopy(&ndir[1], s)) + return error_box("Impossibile copiare il file %s della ditta %ld", + &ndir[1], codditta); + s = s.path(); s << ntrc; + if (!fcopy(&ntrc[1], s)) + return error_box("Impossibile copiare il file %s della ditta %ld", + ntrc, codditta); + + set_cursor(TASK_WIN, CURSOR_WAIT); + const long old_firm = get_firm(); + TDir dir, dir1; + TTrec rec; + + prefhndl->set(""); + dir1.get(LF_DIR, _nolock, _nordir, _sysdirop); + const long maxeod0 = dir1.eod(); + + prefhndl->set_codditta(codditta); + dir.get(LF_DIR, _nolock, _nordir, _sysdirop); + if (dir.eod() == 0) + { + dir1.eod() = 1L; + dir1.put(LF_DIR, _nordir, _sysdirop); + dir.get(LF_DIR, _nolock, _nordir, _sysdirop); + } + const long maxeod1 = dir.eod(); + + if (maxeod0 > maxeod1) + { + dir.get(LF_DIR, _nolock, _nordir, _sysdirop); + dir.eod() = maxeod0; + dir.put(LF_DIR, _nordir, _sysdirop); + rec.zero(); + } + TString mess("Generazione archivi della ditta "); mess << codditta; + TProgind p(maxeod0 ? maxeod0 : 1, mess, TRUE, TRUE, 70); + + for (int i = LF_DIR + 1; i <= maxeod0; i++) + { + p.addstatus(1); + prefhndl->set(""); + dir.get(i, _nolock, _nordir, _sysdirop); + rec.get(i); + prefhndl->set_codditta(codditta); + const char* name = dir.name(); + dir.flags() = 0L; + const bool valid_file = *name != '\0' && dir.len() > 0; + const bool create_now = flagcom ? *name == '%' : *name != '%'; + + if (valid_file && create_now) + { + dir.put(i, _nordir, _sysdirop); + rec.put(i); + TSystemisamfile f(i); + + f.build(30); + } + else + { + if (!flagcom) + { + dir.len() = 0; + rec.zero(); + } + dir.put(i, _nordir, _sysdirop); + rec.put(i); + } + } + + set_firm(old_firm); + set_cursor(TASK_WIN, CURSOR_ARROW); + return TRUE; +} + + bool TMenu_application::module_enabled(const char * program) const { bool ok = FALSE;