// gestione anagrafica soci cooperative #include #include #include #include #include #include "co0600a.h" //////////////////////////////////////////////////////////////////////// //MASCHERA //////////////////////////////////////////////////////////////////////// class TCoop_soci_msk : public TAutomask { virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: void calcola_dati_nascita(const TString& cf, TDate& datanasc, TString8& comnasc); TCoop_soci_msk() : TAutomask("co0600a") {} }; void TCoop_soci_msk::calcola_dati_nascita(const TString& cf, TDate& datanasc, TString8& comnasc) { comnasc = ""; datanasc = TDate(NULLDATE); if (cf.not_empty()) { comnasc = cf.sub(11,15); int a = atoi(cf.sub(6,8)); a+=1900; char mc = cf[8]; int m = 0; switch (mc) { case 'A': m = 1; break; case 'B': m = 2; break; case 'C': m = 3; break; case 'D': m = 4; break; case 'E': m = 5; break; case 'H': m = 6; break; case 'L': m = 7; break; case 'M': m = 8; break; case 'P': m = 9; break; case 'R': m = 10; break; case 'S': m = 11; break; case 'T': m = 12; break; default: m = 0; break; } int g = atoi(cf.sub(9,11)); if (g > 40) g-=40; if (g > 0 && m > 0 && a > 0) { datanasc.set_day(g); datanasc.set_month(m); datanasc.set_year(a); } } } bool TCoop_soci_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_COFISOCIO: if (e == fe_modify || e == fe_init) { TMask& m = o.mask(); TString80 cf = m.get(F_COFISOCIO); TDate datanasc; TString8 comnasc; calcola_dati_nascita(cf, datanasc, comnasc); if (datanasc.ok()) { m.set(F_DATANASC, datanasc); m.set(F_COMNASC, comnasc); } } break; case F_DATALIC: if (e == fe_modify) { TMask& m = o.mask(); TString16 data = o.get(); if (data.full()) { TDate datalic(data); datalic.addyear(6); m.set(F_DATASCALIC, datalic); } else m.reset(F_DATASCALIC); } } return TRUE; } class TCoop_soci_application : public TRelation_application { TMask* _msk; TRelation* _rel; protected: virtual TMask* get_mask(int mode = MODE_QUERY) { CHECK(_msk, "Null mask"); return _msk; } virtual bool changing_mask(int mode) { return false; } virtual TRelation* get_relation() const { CHECK(_rel, "Null relation"); return _rel; } virtual void init_query_mode(TMask& m); virtual void init_query_insert_mode(TMask& m); virtual void init_insert_mode(TMask& m); virtual void init_modify_mode(TMask& m); void show_socio(TMask& m, const bool show = true); virtual bool user_create() ; virtual bool user_destroy() ; public: TCoop_soci_application() : _msk(NULL), _rel(NULL) { } virtual ~TCoop_soci_application() {} }; void TCoop_soci_application::show_socio(TMask& m, const bool show) { if (show) { m.show(-1); m.hide(-2); } else { m.show(-2); m.hide(-1); } } void TCoop_soci_application::init_query_mode(TMask& m) { show_socio(m); } void TCoop_soci_application::init_query_insert_mode(TMask& m) { show_socio(m, false); } void TCoop_soci_application::init_insert_mode(TMask& m) { show_socio(m, false); } void TCoop_soci_application::init_modify_mode(TMask& m) { show_socio(m); } bool TCoop_soci_application::user_create() { _rel = new TRelation(LF_SOCICOOP); _msk = new TCoop_soci_msk; TString title; _msk->get_caption(title); set_title(title); return true; } bool TCoop_soci_application::user_destroy() { if (_msk) delete _msk; if (_rel) delete _rel; return true; } int co0600(int argc, char* argv[]) { TCoop_soci_application a; a.run(argc, argv, TR("Anagrafica soci")); return 0; }