#include #include #include #include #include #include #include #include #include #include #include "..\ve\velib.h" #include "ps0544.h" #include "ps0544100a.h" class TSisipho_file: public TFile_text { protected: virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str); public: TSisipho_file(const TString& file_name, const TString& config_name); virtual ~TSisipho_file() { } }; TSisipho_file::TSisipho_file(const TString& file_name, const TString& config_name) : TFile_text(file_name, config_name) { } class TSisipho_mask : public TAutomask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TSisipho_mask(); virtual ~TSisipho_mask(){}; }; TSisipho_mask::TSisipho_mask() :TAutomask ("ps0544100a") { } bool TSisipho_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { return TRUE; } class TSisipho : public TSkeleton_application { TCursor* _cur; TSisipho_mask* _msk; TDate _dataini, _datafin; TSisipho_file* _trasfile; TConfig* _configfile; long _nrecords; virtual const char * extra_modules() const {return "ve";} protected: virtual bool create(void); virtual bool destroy(void); virtual void main_loop() ; void elabora_documenti(); public: const long nrecords() { return _nrecords;}; TConfig configfile() {return *_configfile;}; TSisipho() {} ; virtual ~TSisipho() {} ; }; // restituisce un riferimento all' applicazione inline TSisipho& app() { return (TSisipho&) main_app();} // gestione dei messaggi estesi nei campi void TSisipho_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str) { const TString code(s.get(0)); TString valore; if (code == "_FISSO") { // gestione dei campi fissi per i record delle riba // sintassi: _FISSO,! // dove: è la stringa fissa da emettere TString in(s.get()); CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'"); in.ltrim(1); in.trim(); valore = in; } else if (code == "_TELEFONO") { valore = cur.curr(LF_CLIFO).get("PTEL"); valore << " "; valore << cur.curr(LF_CLIFO).get("TEL"); } else if (code == "_VIRTUALE") { TString in(s.get()); valore = cur.curr().get(in); } else if (code == "_ANNO") { TString in(s.get()); TDate data = cur.curr().get(in); in = data.string(); valore = in.mid(8,2); } else if (code == "_MESE") { TString in(s.get()); TDate data = cur.curr().get(in); in = data.string(); valore = in.mid(3,2); } else if (code == "_PARAMETRI") { TString in(s.get()); valore = app().configfile().get(in); } else if (code == "_OGGI") { TDate data(TODAY); valore = data.string(brief, '-', full, full, amg_date); valore.strip("-"); } else if (code == "_ADESSO") { char time[128]; _strtime(time); valore.format("%s", time); valore.strip(":"); } else if (code == "_NRECORDS") { valore.format("%ld", app().nrecords()); } else NFCHECK("Macro non definita: %s", (const char *)code); str = valore; } bool TSisipho::create() { open_files(LF_DOC, LF_CLIFO, LF_COMUNI, LF_CFVEN, 0); _msk = new TSisipho_mask(); _trasfile = NULL; _configfile = new TConfig("ps0544100a.ini", "TRASFERIMENTO"); return TSkeleton_application::create(); } bool TSisipho::destroy() { if (_trasfile) delete _trasfile; if (_configfile) delete _configfile; delete _msk; return TSkeleton_application::destroy(); } void TSisipho::main_loop() { TFilename filename = _configfile->get("NOMEFILE"); if (filename.exist()) remove(filename); while (_msk->run()!=K_QUIT) { _trasfile = new TSisipho_file(filename, "ps0544100.ini"); _trasfile->open(filename,'w'); _trasfile->force_record_separator(TRUE); _dataini = _msk->get_date(F_DATAINI); _datafin = _msk->get_date(F_DATAFIN); elabora_documenti(); _trasfile->close(); delete _trasfile; _trasfile = NULL; } } void TSisipho::elabora_documenti() { TSheet_field& sheet = _msk->sfield(F_SHEETDOC); TRelation doc_rel(LF_DOC); doc_rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); doc_rel.add(LF_COMUNI, "COM==COMCF", 1, LF_CLIFO); TRectype da(LF_DOC); TRectype a(LF_DOC); const long items = sheet.items(); if (items > 0) { bool ok = TRUE; TString16 codnum; TString filt_expr; da.put("DATADOC", _dataini); a.put("DATADOC", _datafin); filt_expr << "("; FOR_EACH_SHEET_ROW(sheet, r, row) { codnum = row->get(0); if (codnum.not_empty()) { filt_expr << "(CODNUM==\""; filt_expr << codnum << "\")||"; } } filt_expr.rtrim(2); filt_expr << ")"; doc_rel.lfile().set_curr(new TDocumento); _cur = new TCursor(&doc_rel,filt_expr,3,&da,&a); const long cur_items = _cur ->items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato _nrecords = cur_items; if (cur_items != 0) { // scrivo il record 01 testata bolla TRecord_text rech; rech.set_type("01"); _trasfile->autoload(rech, *_cur); _trasfile->write(rech); _cur->freeze(); for (*_cur = 0; _cur->pos() < cur_items; ++(*_cur)) { TRecord_text rec; rec.set_type("02"); _trasfile->autoload(rec, *_cur); _trasfile->write(rec); } TRecord_text recf; recf.set_type("03"); _trasfile->autoload(recf, *_cur); _trasfile->write(recf); } delete _cur; } } int ps0544100(int argc, char **argv) { TSisipho a; a.run(argc, argv, "Trasferimento a SISIPHO"); return 0; }