diff --git a/cg/cg4200.cpp b/cg/cg4200.cpp index 803f7fe3e..87a9cbdc4 100755 --- a/cg/cg4200.cpp +++ b/cg/cg4200.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "cg4.h" #include "cg4200.h" @@ -14,26 +13,25 @@ class TCopia_archivi : public TSkeleton_application TMask* _msk; long _default_firm; +protected: virtual bool create() ; virtual bool destroy() ; virtual void main_loop(); +public: bool copyfile(int logicnum, long from, long to); bool check_comfile(int logicnum); void clearivd(long to); void copyivd(long from, long to); -public: TCopia_archivi() : _msk(NULL) {} }; bool TCopia_archivi::check_comfile(int logicnum) { - TDir dir; - - dir.get(logicnum, _nolock, _comdir); - - if (fexist(dir.filename())) + TDir dir; dir.get(logicnum, _nolock, _comdir); + const TFilename name = dir.filename(); + if (name.exist()) return TRUE; else return error_box(FR("Non esiste il file sorgente : archivi comuni - %s"), dir.filename()); @@ -41,46 +39,47 @@ bool TCopia_archivi::check_comfile(int logicnum) bool TCopia_archivi::copyfile(int logicnum, long from, long to) { - TDir dir; - + // Controllo che la destinazione non sia un file comune set_firm(to); + TDir dir; dir.get(logicnum, _nolock, _nordir, _sysdirop); if (dir.is_com()) { dir.get(logicnum); - return error_box(FR("Non posso copiare su un'archivio comune : ditta %ld - archivio %s"), to, dir.filename()); + return error_box(FR("Impossibile copiare su un'archivio comune : ditta %ld - archivio %s"), to, dir.filename()); } - if (from > 0) set_firm(from); + + // Scarico il file sorgente su un file di testo + if (from > 0) + set_firm(from); else prefix().set("com"); + TFilename t; t.tempdir(); t << "/tr" << logicnum << ".txt"; + if (t.not_empty()) // dummy test to ensure parenthesis + { + TSystemisamfile file(logicnum); + if (file.dump(t) != NOERR) + return error_box(FR("Impossibile leggere i dati da copiare errore n. %d"), file.status()); + } - TFilename t; t.tempdir(); t << "/tr" << logicnum; - TSystemisamfile file(logicnum); - - if (file.dump(t) != NOERR) - return error_box(FR("Impossibile leggere i dati da copiare errore n. %d"), file.status()); - set_firm(to); - - TFilename s; s.tempdir(); s << "/sv" << logicnum; + // Scarico il file destinazione su un file di testo + set_firm(to); + TFilename s; s.tempdir(); s << "/sv" << logicnum << ".txt"; + TSystemisamfile file(logicnum); if (file.dump(s) != NOERR) return error_box(FR("Impossibile salvare i dati originali errore n. %d"), file.status()); + // Azzero il file destinazione + file.zap(); - - dir.get(logicnum, _lock, _nordir, _sysdirop); - dir.eod() = 0L; - dir.put(logicnum, _nordir, _sysdirop); - file.packfile(); - file.packindex(); + // Carico nel file destinazione il file di testo precedente if (file.load(t) != NOERR) { - error_box(FR("Impossibile scrivere i dati errore n. %d. Cerco di ripristinare i dati originali."), file.status()); - dir.get(logicnum, _lock, _nordir, _sysdirop); - dir.eod() = 0L; - dir.put(logicnum, _nordir, _sysdirop); - file.packindex(); + error_box(FR("Impossibile scrivere i dati errore n. %d. Ripristino dei dati originali."), file.status()); + // Ripristino il backup + file.zap(); if (file.load(s)) - error_box(FR("Impossibile scrivere i dati originali errore n. %d"), file.status()); + error_box(FR("Impossibile ripristinare i dati originali errore n. %d"), file.status()); return FALSE; } return TRUE; @@ -173,7 +172,8 @@ bool TCopia_archivi::create() bool TCopia_archivi::destroy() { - if (_msk != NULL) delete _msk; + if (_msk != NULL) + delete _msk; return TSkeleton_application::destroy(); } @@ -207,42 +207,40 @@ void TCopia_archivi::main_loop() if (ok || (!copy_pcon && !copy_causali && !copy_clifo)) { - TString256 mess(TR("Attenzione \n")); + TString mess; + mess.format(FR("Attenzione! I seguenti archivi della ditta %ld verranno sovrascritti:\n"), to_firm); + int count = 0; - if (copy_pcon) { - mess << TR("il piano dei conti"); + mess << TR("piano dei conti"); count++; } if (copy_causali) { - if (count > 0) mess << ",\n"; - mess << TR(" le causali"); + if (count > 0) mess << ", "; + mess << TR(" causali"); count++; } if (copy_clifo) { - if (count > 0) mess << ",\n"; - mess << TR(" i clienti e fornitori"); + if (count > 0) mess << ", "; + mess << TR("clienti e fornitori"); count++; } if (copy_ivd) { - if (count > 0) mess << ",\n"; - mess << TR(" la riclassificazione IV direttiva"); + if (count > 0) mess << ", "; + mess << TR("riclassificazione IV direttiva"); count++; } - mess << TR("\n della ditta ") << to_firm; - if (count > 1) - mess << TR(" saranno sovrascritti"); - else - mess << TR(" sara' sovrascritto"); - mess << TR(". Devo continuare"); - if (yesno_box((const char *) mess)) + mess << ".\n" ; + + TString msg1 = mess; msg1 << TR("Si desidera continuare?"); + if (yesno_box(msg1)) { - mess.rtrim(16); mess << TR(" Devo veramente continuare"); - if (yesno_box((const char *) mess)) + msg1 = mess; msg1 << TR("Si desidera veramente continuare?"); + if (yesno_box(msg1)) { if (copy_pcon) { @@ -261,7 +259,8 @@ void TCopia_archivi::main_loop() } } } - else error_box(TR("La copia si puo' effettuare solo se non sono stati registrati movimenti")); + else + error_box(TR("La copia si puo' effettuare solo se non sono stati registrati movimenti")); set_firm(_default_firm); } else error_box(FR("Gli archivi della ditta %ld non sono stati ancora generati"),to_firm); diff --git a/cg/cg4200a.uml b/cg/cg4200a.uml index 71ba9635a..dfe8cc9d1 100755 --- a/cg/cg4200a.uml +++ b/cg/cg4200a.uml @@ -22,7 +22,7 @@ NUMBER F_FROMFIRM 5 BEGIN PROMPT 4 5 "Ditta " USE LF_NDITTE KEY 1 - CHECKTYPE NORMAL + CHECKTYPE REQUIRED INPUT CODDITTA F_FROMFIRM DISPLAY "Codice" CODDITTA DISPLAY "Ragione sociale @50" RAGSOC