#include #include #include #include #include #include #include #include "tabutil.h" #include "ps0713200a.h" ///////////////////////////////// //// TIMPORTA_COMM_MSK //// ///////////////////////////////// //Classe TImporta_comm_msk class TImporta_comm_msk : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TImporta_comm_msk(); }; //ON_FIELD_EVENT: metodo che gestisce i comportamenti dei vari campi della maschera //(per adesso segnaposto) bool TImporta_comm_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) { return true; } //metodo costruttore TImporta_comm_msk::TImporta_comm_msk() : TAutomask("ps0713200a"){} ///////////////////////////////// //// TIMPORTA_COMM_APP //// ///////////////////////////////// //Classe TImporta_comm_app class TImporta_comm_app : public TSkeleton_application { virtual bool check_autorization() const {return false;} virtual const char * extra_modules() const {return "cg";} TImporta_comm_msk* _msk; public: virtual bool create(); virtual bool destroy(); virtual void main_loop(); bool transfer(const TFilename& file); TImporta_comm_app() {}; }; TImporta_comm_app& app() { return (TImporta_comm_app&) main_app(); } //TRASNFER: metodo che effettivamente svolge l'elaborazione di importazione bool TImporta_comm_app::transfer(const TFilename& file) { TLog_report log("Importazione Commesse"); //Instazio lo scanner con cui leggerò il file di testo //che contiene codcms|gr|co|stco TScanner s(file); TToken_string rec(50, ','); rec = s.line(); //Instanzio la tabella che devo riempire TTable comm("CMS"); TProgind pi(fsize(file), "Importazione Commesse in corso...", true, true); //scorro tutto il file (per ogni riga devo riportare l'esito dell'importazione nel log) while (s.ok()) { if (!pi.addstatus(s.tellg())) break; TString codtab = rec.get(0); codtab.strip("\""); //salto le righe vuote del file if (codtab.empty()) continue; //recupero i dati di interesse dal file TString descr = "IDLAVORO "; descr << codtab; //gruppo conto e sottoconto devono avere dei valori sensati TString gr = rec.get(1); gr.strip("\""); (gr == "" || gr == "?") ? gr ="0" : gr = gr; TString co = rec.get(2); co.strip("\""); (co == "" || co == "?") ? co ="0" : co = co; TString sc = rec.get(3); sc.strip("\""); (sc == "" || sc == "?") ? sc ="0" : sc = gr; comm.zero(); comm.put("CODTAB", codtab); //setto il campo CODTAB comm.put("S0", descr); //setto il campo descrizione (S0) comm.put("I1", gr); //setto il campo gruppo (I1) comm.put("I2", co); //setto il campo conto (I2) comm.put("I3", sc); //setto il campo sottoconto (I3) //salvo ciò che ho appena importato int err = comm.write(); //preparo il log con tutti i risultati delle operazioni svolte TString str = "La commessa "; switch(err) { case NOERR: str << codtab << " è stata inserita"; log.log(0, str); break; case 224: str << codtab << " NON è stata inserita perchè esiste già"; log.log(2, str); break; default: str << codtab << " NON è stata inserita. Errore = " << err; log.log(2, str); break; } //leggo la riga successiva rec = s.line(); } //stampo a video il log TReport_book buc; buc.add(log); buc.preview(); return true; } bool TImporta_comm_app::create() { _msk = new TImporta_comm_msk(); return TSkeleton_application::create(); } bool TImporta_comm_app::destroy() { delete _msk; return TApplication::destroy(); } void TImporta_comm_app::main_loop() { KEY tasto; tasto = _msk->run(); if (tasto == K_ENTER) { //genero il nome del file da caricare TFilename name = _msk->get(F_PATH); name.add(_msk->get(F_NAME)); TString str; if (transfer(name)) message_box(TR("Importazione commesse completata")); else error_box(TR("L'importazione non è andata a buon fine")); } } int ps0713200 (int argc, char* argv[]) { TImporta_comm_app main_app; main_app.run(argc, argv, TR("Importazione Commesse")); return true; }