// 775100.cpp - Gestione archivio percipienti #include #include "77lib.h" #include "775100a.h" class TGestionePercipienti : public TRelation_application { private: TRelation* _rel; TMask* _msk; long _codditta; char _tipoa; long _codanagr; bool _auto_posiz, _deleted; int _anno_dic; protected: virtual void on_config_change(); virtual void init_query_mode(TMask& m); virtual void init_modify_mode(TMask& m); void init_mask(TMask& m); virtual bool user_create(); virtual bool user_destroy(); virtual TRelation* get_relation() const { return _rel; } virtual TMask* get_mask(int mode) { return _msk; } virtual bool changing_mask(int mode) { return FALSE; } virtual bool remove(); static bool codditta_handler(TMask_field& f, KEY k); public: TGestionePercipienti(const long codditta=0L, const char tipoa='\0', const long codanagr=0L); virtual ~TGestionePercipienti() {}; }; inline TGestionePercipienti& app() { return (TGestionePercipienti&) main_app(); } bool TGestionePercipienti::remove() { bool ok1 = FALSE, ok2 = FALSE, ha_schede = FALSE; int err; TPercipiente perc(_rel->curr()); ha_schede = perc.esiste_scheda(); if (ha_schede) ok1 = yesno_box("Esistono in archivio delle schede riguardanti il percipiente selezionato\nEliminare ugualmente?"); if (!ok1) return TRUE; err = _rel->remove(); // Non ri-compilare i dati in init_query_mode() _deleted = TRUE; if (err != NOERR) return TRUE; if (ha_schede) { ok2 = yesno_box("Eliminare anche le schede collegate?"); err = perc.elimina_schede(); } return TRUE; } void TGestionePercipienti::init_mask(TMask& m) { m.set(F_ANNODIC, _anno_dic); TString4 tipo; tipo << _tipoa; m.set(F_TIPOA, tipo); } void TGestionePercipienti::init_query_mode(TMask& m) { init_mask(m); if (_auto_posiz && !_deleted) { TString8 dit, tipo, coda; dit << _codditta; tipo << _tipoa; coda << _codanagr; m.set(F_CODDITTA, dit); m.set(F_TIPOA, tipo); m.set(F_CODANAGR, coda); m.send_key(K_AUTO_ENTER, 0); } } void TGestionePercipienti::init_modify_mode(TMask& m) { init_mask(m); } TGestionePercipienti::TGestionePercipienti(const long codditta, const char tipoa, const long codanagr) : _codditta(codditta), _tipoa(tipoa), _codanagr(codanagr), _auto_posiz(FALSE) { _auto_posiz = _codanagr != 0L; _deleted = FALSE; } void TGestionePercipienti::on_config_change() { TConfig conf(CONFIG_STUDIO); _anno_dic = (int)conf.get_long(ANNO_SEL, NULL); } bool TGestionePercipienti::codditta_handler(TMask_field& f, KEY k) { if (k == K_TAB && !(f.mask().is_running()) ) { TString8 codditta; codditta << app()._codditta; if (codditta != "0") { f.set(codditta); f.check(); } } return TRUE; } bool TGestionePercipienti::user_create() { _rel = new TRelation(LF_PERC); _msk = new TMask("775100a"); if (!_auto_posiz) _codditta = get_firm_770(); _msk->set_handler(F_CODDITTA, codditta_handler); set_search_field(F_CODANAGR); return true; } bool TGestionePercipienti::user_destroy() { delete _rel; delete _msk; return TRUE; } // 775 -0 10001 F 10 int GestPerc(int argc, char* argv[]) { long codditta = 0L; char tipoa = 'F'; long codanagr = 0L; if (argc >= 5) { codditta = atol(argv[2]); tipoa = *argv[3]; codanagr = atol(argv[4]); } TGestionePercipienti a(codditta, tipoa, codanagr); a.run(argc, argv, TR("Gestione percipienti")); return 0; }