#include "cglib04.h" #include "cg2803.h" HIDDEN TVis_ric& app() { return (TVis_ric &) main_app(); } const char* TVis_ric::riconverti (TString& data_PC) { TP = data_PC.mid(8,2); TP << data_PC.mid(3,2); TP << data_PC.mid(0,2); return TP; } bool TVis_ric::create() { TApplication::create(); _tab_tra = new TTable ("%TRA"); _registra = FALSE; _ftrasfer = TRUE; dispatch_e_menu (BAR_ITEM(1)); return TRUE; } bool TVis_ric::destroy() { delete _tab_tra; return TApplication::destroy(); } bool TVis_ric::baipassa(TMask& m, KEY k) { if (k == K_SHIFT+K_F12) { m.enable(F_NULTRAS); m.enable(F_DATAULTRAS); m.enable(F_STD); m.enable(F_USELAB); m.enable(F_STATO); m.enable(F_AGGCAUSALI); m.enable(F_AGGCLIFO); m.enable(F_AGGPCON); m.enable(F_AGGIVD); m.enable(F_FATTEM); m.enable(F_FATTRIC); app()._registra = TRUE; } return TRUE; } bool TVis_ric::stato_hnd (TMask_field& f, KEY k) { if (k == K_ENTER) { TString std = f.get(); TString uselab = f.mask().get(F_USELAB); TString chiave = f.mask().get(F_STATO); if (!app()._ftrasfer) //_ftrasfer dice se esiste il file trasfer o il suo record di controllo { if (std != "" && std != "*") return warning_box("Valore non valido per stato ultima ricezione"); } else { if (std != "" && std != "T" && std != "C" && std != "M" && std != "*") return warning_box("Valore non valido per stato ultima ricezione"); if (uselab != "" && (std == "" || std == "C" || std == "*") ) return warning_box("Valore non valido per stato ultima ricezione"); if (chiave != "" && (std == "" || std == "C" || std == "*") ) return warning_box("Valore non valido per stato ultima ricezione"); } } return TRUE; } bool TVis_ric::uselab_hnd (TMask_field& f, KEY k) { if (k == K_ENTER) { TString std = f.mask().get(F_STD); TString uselab = f.get(); if (std == "" && uselab != "") return warning_box("Lo stato ultima ricezione non e' significativo: la sigla ultimo file elaborato non puo' essere significativa"); } return TRUE; } bool TVis_ric::chiave_hnd (TMask_field& f, KEY k) { if (k == K_ENTER) { TString std = f.mask().get(F_STD); TString uselab = f.mask().get(F_USELAB); TString chiave = f.get(); if (std == "" && chiave != "") return warning_box("Lo stato ultima ricezione non e' significativo: la chiave ultimo file elaborato non puo' essere significativa"); if (uselab == "" && chiave != "") return warning_box("La sigla ultimo file elaborato non e' significativa: la chiave ultimo file elaborato non puo' essere significativa"); } return TRUE; } bool TVis_ric::video() { TDate dataultras; if (!esegui_controlli()) return FALSE; TMask msk ("cg2803a"); KEY tasto; ditta_ricevente(); setta_campi_video(msk); msk.set_handler(baipassa); msk.set_handler(F_STD, stato_hnd); msk.set_handler(F_USELAB, uselab_hnd); msk.set_handler(F_STATO, chiave_hnd); tasto = msk.run(); if (tasto != K_ENTER) return FALSE; registra(msk); return FALSE; } void TVis_ric::setta_campi_video(TMask& msk) { if (_ftrasfer) { msk.set(F_CODDITTARIC, _dittaric); msk.set(F_RAGSOC, _ragsoc_dittar); msk.set(F_NULTRAS, _nultras); if (_nultras != 0) { TString data1 = _dataultras.string(); msk.set(F_DATAULTRAS, data1); } msk.set(F_USELAB, _uselab); msk.set(F_STATO, _key); msk.set(F_AGGCAUSALI, _agg_cau); msk.set(F_AGGCLIFO, _agg_clifo); msk.set(F_AGGPCON, _agg_pcon); msk.set(F_AGGIVD, _agg_IVdir); msk.set(F_FATTEM, _riatt_att); msk.set(F_FATTRIC, _riatt_pas); } msk.set(F_STD, _std); msk.disable(F_CODDITTARIC); msk.disable(F_RAGSOC); msk.disable(F_NULTRAS); msk.disable(F_DATAULTRAS); msk.disable(F_STD); msk.disable(F_USELAB); msk.disable(F_STATO); msk.disable(F_AGGCAUSALI); msk.disable(F_AGGCLIFO); msk.disable(F_AGGPCON); msk.disable(F_AGGIVD); msk.disable(F_FATTEM); msk.disable(F_FATTRIC); } void TVis_ric::registra(TMask& m) { if (_registra) { TString str; str = m.get(F_NULTRAS); TString nultras = format("%03s", (const char*) str); str = m.get(F_DATAULTRAS); TString datault = riconverti(str); char agg_cau = m.get(F_AGGCAUSALI)[0]; char agg_clf = m.get(F_AGGCLIFO)[0]; char agg_pco = m.get(F_AGGPCON)[0]; char agg_IV = m.get(F_AGGIVD)[0]; char riat_at = m.get(F_FATTEM)[0]; char riat_pa = m.get(F_FATTRIC)[0]; TString flags (7); flags[0] = agg_IV; flags[1] = agg_cau; flags[2] = agg_clf; flags[3] = agg_pco; flags[4] = riat_at; flags[5] = riat_pa; flags[6] = '\0'; TString uselab = m.get(F_USELAB); if (uselab == "") uselab = " "; str = m.get(F_STATO); TString chiave = format("%-15s", (const char*) str); _control_rec.overwrite(nultras,29); _control_rec.overwrite(datault,32); _control_rec.overwrite(flags,234); _control_rec.overwrite(uselab,240); _control_rec.overwrite(chiave,241); const int size = 256; _tras_file.write_control_rec(_control_rec, size); TString std = m.get(F_STD); setta_std(std); } } void TVis_ric::setta_std(const TString& flag) { TConfig conf (CONFIG_DITTA); conf.set("FlStTra", flag); } void TVis_ric::ditta_ricevente() { TLocalisamfile nditte (LF_NDITTE); nditte.setkey(1); nditte.zero(); nditte.put(NDT_CODDITTA, _dittaric); if (nditte.read() == NOERR) _ragsoc_dittar = nditte.get(NDT_RAGSOC); } long TVis_ric::leggi_tabella_tras() { TString dep; long ditta = 0; _tab_tra->zero(); dep = format("%10s%05d", (const char*) _nomeid, _dittainv); _tab_tra->put("CODTAB", (const char*) dep); if (_tab_tra->read() == NOERR) ditta = _tab_tra->get_long("I0"); return ditta; } bool TVis_ric::leggi_trasfer() { TString data,tmp; _trasf = _tras_file.path(_dittaric); _trasf << "\\trasfer"; _tras_file.open(_trasf); if (_tras_file.exist()) { if (_tras_file.read_control_rec()) { _control_rec = _tras_file.record(); _nomeid = _control_rec.sub(15,25); _dittainv = _control_rec.sub(25,29); _nultras = _tras_file.nultras(); _dataultras = _tras_file.dataultras(); _uselab = _tras_file.ult_file(); _key = _tras_file.key(); _agg_cau = _control_rec.sub(235,236); _agg_clifo = _control_rec.sub(236,237); _agg_pcon = _control_rec.sub(237,238); _agg_IVdir = _control_rec.sub(234,235); _riatt_att = _control_rec.sub(238,239); _riatt_pas = _control_rec.sub(239,240); } else _ftrasfer = FALSE; } else _ftrasfer = FALSE; return TRUE; } bool TVis_ric::esegui_controlli() { TConfig conf(CONFIG_DITTA); _std = conf.get("FlStTra"); _dittaric = get_firm(); if (!prefix().exist(_dittaric)) return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); if (!leggi_trasfer()) return FALSE; return TRUE; } bool TVis_ric::menu(MENU_TAG m) { if (m == BAR_ITEM(1)) return video(); return FALSE; }