// 771233.cpp - distinta quadro G #include "771232.h" #include "quadrogd.h" #include "77qgd.h" #define LF_QUAGD 101 // lffiles.h inline TDistintaQuadroG& app() { return (TDistintaQuadroG&) main_app(); } TDistintaQuadroG::TDistintaQuadroG(): _rel(NULL), _mode(0) { _title = "Distinta quadro G"; _quadro = "GD"; _file = LF_QUAGD; } // Ricerca e output dell'ultimo nprog del percipiente scelto bool TDistintaQuadroG::setta_nprog(TMask_field& f) { long nprog = 0L; const char tipoa = f.mask().get(F_TIPOA)[0]; const long codanagr = atol(f.get()); const long codditta = get_firm_770(); TLocalisamfile quagd(app()._file); quagd.zero(); quagd.put(QGD_CODDITTA, codditta); quagd.put(QGD_TIPOA, tipoa); quagd.put(QGD_CODANAGR, codanagr); TRectype rec(quagd.curr()); quagd.read(); if (quagd.curr() > rec) { f.mask().set(F_NPROG, nprog+1); return TRUE; } for ( ; !quagd.eof(); quagd.next()) { if (quagd.curr() > rec) break; nprog = quagd.get_long("NPROG"); } f.mask().set(F_NPROG, nprog+1); return TRUE; } bool TDistintaQuadroG::codditta_hnd(TMask_field& f, KEY k) { if (k == K_TAB && !f.mask().is_running()) { TString16 codditta; codditta << get_firm_770(); if (codditta != "0") { f.set(codditta); f.check(); } } return TRUE; } bool TDistintaQuadroG::codanagr_handler(TMask_field& f, KEY k) { if (k == K_TAB && f.focusdirty()) { TString16 dummy(f.get()); if (dummy.not_empty()) setta_nprog(f); } return TRUE; } // Passa al modo inserimento/modifica. bool TDistintaQuadroG::nprog_handler(TMask_field& f, KEY key) { if (!f.mask().is_running()) return TRUE; if (key == K_CTRL+K_TAB) { f.set_dirty(); return TRUE; } if (key == K_TAB) { const int nprog = atoi(f.get()); if (nprog==0) return TRUE; // entra in modo modifica (se il record che ha chiave specificata esiste gia') oppure // inserimento (se trova che non esiste) // f.mask().stop_run(K_AUTO_ENTER); } return TRUE; } bool TDistintaQuadroG::scrivi_dati_per(TRectype& rec) { TLocalisamfile dati_per(LF_PERC); const long codditta = rec.get_long("CODDITTA"); char tipoa = rec.get_char("TIPOA"); const long codanagr = rec.get_long("CODANAGR"); dati_per.zero(); dati_per.put("CODDITTA", codditta); dati_per.put("TIPOA", tipoa); dati_per.put("CODANAGR", codanagr); const bool preesistente = (dati_per.read() == NOERR); if (!preesistente) { dati_per.zero(); dati_per.put("CODDITTA", codditta); dati_per.put("TIPOA", tipoa); dati_per.put("CODANAGR", codanagr); dati_per.write(); } return preesistente; } int TDistintaQuadroG::rewrite(const TMask& m) { m.autosave(*_rel); const int err = _rel->rewrite(); scrivi_dati_per(_rel->curr()); _registra = TRUE; return err; } int TDistintaQuadroG::write(const TMask& m) { m.autosave(*_rel); const int err = _rel->write(); scrivi_dati_per(_rel->curr()); _registra = TRUE; return err; } bool TDistintaQuadroG::remove() { _registra = TRUE; return TRelation_application::remove(); } bool TDistintaQuadroG::user_create() { _msk = new TMask("77qgda"); _msk->set_handler(F_CODDITTA, codditta_hnd); _msk->set_handler(F_NPROG, nprog_handler); _msk->set_handler(F_CODANAGRCOM, codanagr_handler); _msk->set_handler(F_CODANAGRPERC, codanagr_handler); _rel = new TRelation(LF_QUAGD); set_search_field(F_CODANAGRPERC); _registra = FALSE; return TRUE; } bool TDistintaQuadroG::user_destroy() { delete _msk; delete _rel; if (_registra) _rip.set(_quadro); return TRUE; } void TDistintaQuadroG::on_config_change() { TConfig conf(CONFIG_STUDIO); _anno_dic = (int)conf.get_long(ANNO_SEL, NULL); } void TDistintaQuadroG::init_query_mode(TMask& m) { m.set(F_ANNODIC, _anno_dic); // forza il ricalcolo dell'ultimo numero disponibile TString16 dummy(m.get(F_NPROG)); if (dummy.not_empty()) setta_nprog(m.field(F_NPROG)); m.hide(-1); // nasconde (hide) group 1 - Scelta ANAGR m.show(-2); // abilita (show) group 2 - Ricerca su DATI PERC } void TDistintaQuadroG::init_query_insert_mode(TMask& m) { m.set(F_ANNODIC, _anno_dic); m.hide(-2); // group 2 Nasconde ricerca su PERC m.show(-1); // group 1 Ricerca su ANAGR }