#include #include #include #include #include #include "../mg/umart.h" #include "../mg/anamag.h" #include "ve7.h" #include "ve7500a.h" ///////////////////////////////////////////////////// // Classe TLis2fil: filetext // ///////////////////////////////////////////////////// class TLis2fil_txt: public TFile_text { public: void save_price(const TRecord_text& rec, const TString& um); TLis2fil_txt(const TString& file_name, const TString& config_name); virtual ~TLis2fil_txt() { } }; TLis2fil_txt::TLis2fil_txt(const TString& file_name, const TString& config_name) : TFile_text(file_name, config_name) { } //validate per sistemare il prezzo nel file UMART void TLis2fil_txt::save_price(const TRecord_text& rec, const TString& um) { const TString80 codart = rec.get(0); const TPrice prezzo = real(rec.get(2)); TLocalisamfile umart(LF_UMART); TRectype& curr = umart.curr(); curr.put(UMART_CODART, codart); curr.put(UMART_NRIGA, 1); curr.put(UMART_UM, um); curr.put(UMART_PREZZO, prezzo); if (umart.rewrite() != NOERR) umart.write(); } ///////////////////////////////////////////////////// // Classe TLis2fil: applicazione principale // ///////////////////////////////////////////////////// class TLis2fil: public TSkeleton_application { TMask* _msk; TString4 _um; protected: virtual bool create(void); virtual void main_loop(); virtual bool destroy(void); void transfer(void); static bool annulla_handler(TMask_field& f, KEY k); const char * get_ini_name(const TString& filename) const; void import(const TString& filename); public: const TMask& msk() const { return *_msk; } TLis2fil() {} virtual ~TLis2fil() {} }; const char * TLis2fil::get_ini_name (const TString& filename) const { TScanner scan_line(filename); const TString& line = scan_line.line(); return line[0] == '"' ? "ve7500p.ini" : "ve7500m.ini"; } void TLis2fil::import(const TString& filename) { //stabilisce quale tipo di listino e' il file corrente (M o P),carica il .ini relativo //lo parsa in modo read const char * ini = get_ini_name (filename); TLis2fil_txt trasfile(filename, ini); trasfile.open(filename,'r'); const long dimension = fsize(filename); TString msg; msg << "Acquisizione del file " << filename << " in corso..."; TProgind pi(dimension, msg, false, true); TRelation rel(LF_ANAMAG); TRecord_text curr; while (trasfile.read(curr) == NOERR) { pi.setstatus(trasfile.read_file()->tellg()); trasfile.autosave(rel, curr); trasfile.save_price(curr, _um); } trasfile.close(); } // creazione dell'applicazione bool TLis2fil::create() { open_files(LF_ANAMAG, LF_UMART, 0); _msk = new TMask("ve7500a"); TString default_dir = "A:\\"; _msk->set(F_DIRNAME, default_dir); TString4 default_um = "PZ"; _msk->set(F_UM, default_um); return TSkeleton_application::create(); } // distruzione dell'applicazione bool TLis2fil::destroy() { delete _msk; return TSkeleton_application::destroy(); } // carica la maschera void TLis2fil::main_loop() { // Preimposta gli eventuali valori specificati sulla riga di comando KEY key = K_ENTER; while (key != K_QUIT) { key = _msk->run(); if (key == K_ENTER) { TString_array dir_files; TFilename path = _msk->get(F_DIRNAME); //da maschera si seleziona la directory di importazione.. _um = _msk->get(F_UM); path.add("*.txt"); list_files(path, dir_files); //..poi si mettono tutti i nomi dei files .txt presenti nella dir in un TString_array.. FOR_EACH_ARRAY_ROW(dir_files, i, row) import(*row); //..e per ogni file (riga del TString-array) si procede all'upload dei record } } } // handler per gestire la conferma dell'annullamento dei dati inseriti // nella maschera bool TLis2fil::annulla_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_SPACE) { if (yesno_box("Vuoi veramente annullare i dati inseriti")) m.reset(); } return TRUE; } int ve7500(int argc, char* argv[]) { TLis2fil a ; a.run(argc, argv, TR("Importazione listino")); return 0; }