#include #include #include #include #include #include #include #include #include "ba4.h" #include "ba4300.h" #include #include #include #define FLD_UL1_CODDITTA 133 #define FLD_UL1_CODDITTA_NDITTE_RAGSOC 100 #define FLD_AT1_CODDITTA 102 #define FLD_AT1_CODATTH 199 #define FLD_AT1_PROGD_NDITTE_RAGSOC 105 #define FLD_SC1_CODDITTA 143 #define FLD_SC1_CODANAGRSOH 147 #define FLD_SC1_CODDITTA_NDITTE_RAGSOC 144 #define FLD_UL1_CODULC 125 #define F_CODDITTA 142 #define F_ANNO 132 const char* TIPOA = "TIPOA"; const char* CODANAGR = "CODANAGR"; const char* COMRF = "COMRF"; const char* INDRF = "INDRF"; const char* CIVRF = "CIVRF"; const char* CAPRF = "CAPRF"; const char* COMRES = "COMRES"; const char* INDRES = "INDRES"; const char* CIVRES = "CIVRES"; const char* CAPRES = "CAPRES"; #define TABATT "%AIS" #define CODTAB "CODTAB" #define S0 "S0" class TDitte_application : public TRelation_application { TMask* _msk; TRelation *_rel; TString16 _oldattprev; protected: bool user_create() ; bool user_destroy() ; virtual TMask* get_mask(int) { return _msk;} virtual bool changing_mask(int) { return FALSE;} virtual void init_query_mode(TMask& m) ; virtual void init_insert_mode(TMask& m) ; void enable_reg(TMask& m) ; virtual void init_modify_mode(TMask& m) ; virtual bool protected_record(TRectype& rec) { return prefix().exist(rec.get_long("CODDITTA")); } void set_att_prev(const TMask& m); static bool email_handler(TMask_field& f, KEY k); public: TDitte_application(); virtual TRelation* get_relation() const { return _rel;} virtual int rewrite(const TMask& m); virtual int write(const TMask& m); virtual bool remove(); virtual ~TDitte_application() {} }; bool ba4300_handler(TMask& m, KEY k) { TDitte_application& app = (TDitte_application&)main_app(); if (k == (K_SHIFT+K_F12) && m.mode() == MODE_MOD) { m.enable(FLD_GD1_TIPOA); m.enable(FLD_GD1_CODANAGR); m.enable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); return TRUE; } if (k == (K_SHIFT+K_F7) && m.mode() == MODE_MOD) { m.enable(FLD_GD1_VALUTA); return TRUE; } if (k != K_F5 && k != K_F6 && k != K_F7 && k != K_F8 && k != K_F3) return TRUE; if (m.mode() == MODE_MOD || m.mode() == MODE_INS) { if (m.mode() == MODE_INS) { if (!m.check_fields()) return FALSE; if (app.write(m) != NOERR) return TRUE; m.stop_run(K_ESC); } TString appname; int fld = 0, fld1 = 0, fldbrowse = 0; if (k == K_F5) { appname = "ba4 -3"; fld = FLD_UL1_CODDITTA; fld1 = FLD_UL1_CODDITTA_NDITTE_RAGSOC; fldbrowse = FLD_UL1_CODULC; } if (k == K_F6) { appname = "ba4 -4"; fld = FLD_AT1_CODDITTA; fld1 = FLD_AT1_PROGD_NDITTE_RAGSOC; fldbrowse = FLD_AT1_CODATTH; } if (k == K_F7) { appname = "ba4 -5"; fld = FLD_SC1_CODDITTA; fld1 = FLD_SC1_CODDITTA_NDITTE_RAGSOC; fldbrowse = FLD_SC1_CODANAGRSOH; } if (k == K_F8) { appname = "ba3 -0 reg"; fld = 0;fldbrowse = 0;} if (k == K_F3) { appname = "ba5 -1"; fld = F_CODDITTA;fldbrowse = F_ANNO;} if (appname.not_empty()) { TString body(16); if (fldbrowse) body << fldbrowse << "|"; if (fld) body << fld << "=" << m.get(FLD_GD1_CODDITTA) ; if (fld1) body << "|" << fld1 << "=" ; if (fldbrowse || fld) { TMessage msg(appname, MSG_FS, body); TMailbox mb; mb.send(msg); } TExternal_app a(appname); const long oldditta = main_app().get_firm(); if (k == K_F8) main_app().set_firm(m.get_long(FLD_GD1_CODDITTA)); a.run(); if (k == K_F8) main_app().set_firm(oldditta); m.set_focus(); return FALSE; } } return TRUE; } TDitte_application::TDitte_application() {} bool TDitte_application::email_handler(TMask_field& f, KEY k) { if (k == K_SPACE) { const TMask& m = f.mask(); TToken_string key; key.add(m.get(FLD_GD1_TIPOA)); key.add(m.get(FLD_GD1_CODANAGR)); const TRectype& anag = cache().get(LF_ANAG, key); TMail_message msg(anag.get("MAIL")); msg.send(); } return TRUE; } bool TDitte_application::user_create() // initvar e arrmask { open_files(LF_NDITTE, LF_ANAG, LF_UNLOC, LF_ATTIV, LF_TABCOM, 0); _rel = new TRelation(LF_NDITTE); _msk = new TMask("ba4300a") ; _msk->set_handler(ba4300_handler); _msk->set_handler(DLG_EMAIL, email_handler); set_search_field(FLD_GD1_CODDITTA); return TRUE; } bool TDitte_application::user_destroy() // releasev e arrmask { delete _msk; delete _rel; return TRUE; } void TDitte_application::set_att_prev(const TMask& m) { const TString& attprev = m.get(FLD_GD1_CODATTPREV); if (_oldattprev == attprev) return; TRectype& ditte=_rel->curr(); const long codditta = ditte.get_long(ATT_CODDITTA); TLocalisamfile attiv(LF_ATTIV); if (_oldattprev.not_empty()) { attiv.put(ATT_CODDITTA, codditta) ; attiv.put(ATT_CODATT, _oldattprev); if (attiv.read(_isequal, _lock) == NOERR) { attiv.put(ATT_ATTPREV, false); if (attiv.rewrite() != NOERR) error_box(FR("Non posso aggiornare l'attivita' prevalente precedente : errore n. %d"), attiv.status()); } } attiv.zero() ; attiv.put(ATT_CODDITTA, codditta) ; attiv.put(ATT_CODATT, attprev) ; const bool itwas = attiv.read(_isequal, _lock) == NOERR; if (!itwas) { attiv.zero() ; attiv.put(ATT_CODDITTA, codditta) ; attiv.put(ATT_CODATT, attprev) ; const TRectype& tabatt = cache().get(TABATT, ditte.get(NDT_CODATTPREV)); attiv.put(ATT_DESCR, tabatt.get(S0)) ; } attiv.put(ATT_ATTPREV, true); if (itwas) { if (attiv.rewrite() != NOERR) error_box(FR("Impossibile aggiornare l'attivita' prevalente : errore n. %d"), attiv.status()); } else { if (attiv.write() != NOERR) error_box(FR("Impossibile creare l'attivita' prevalente : errore n. %d"), attiv.status()); } } int TDitte_application::write(const TMask& m) { const int err = TRelation_application::write(m); if (err == NOERR) { set_att_prev(m); TLocalisamfile anag(LF_ANAG); const TRectype& ditte = _rel->curr(); anag.zero() ; anag.put(TIPOA, ditte.get(TIPOA)); anag.put(CODANAGR, ditte.get(CODANAGR)); if (anag.read() == NOERR) { TLocalisamfile unloc(LF_UNLOC); unloc.put(ULC_CODDITTA, ditte.get(ATT_CODDITTA)) ; unloc.put(ULC_CODULC, 1); unloc.put(ULC_COMULC, anag.get(COMRES)); unloc.put(ULC_INDULC, anag.get(INDRES)); unloc.put(ULC_CIVULC, anag.get(CIVRES)); unloc.put(ULC_CAPULC, anag.get(CAPRES)); unloc.put(ULC_COMCCIAA, anag.get(COMRES)); unloc.put(ULC_COMTRIB, anag.get(COMRES)); unloc.write(); } } return err; } int TDitte_application::rewrite(const TMask& m) { const int err = TRelation_application::rewrite(m); if (err == NOERR) set_att_prev(m); return err; } bool TDitte_application::remove() { // Removes all activities const long firm = _msk->get_long(FLD_GD1_CODDITTA); TLocalisamfile attiv(LF_ATTIV); TRecfield att_firm(attiv.curr(),"CODDITTA"); att_firm = firm; for (attiv.read(_isgteq); attiv.good() && firm == (long)att_firm; attiv.next()) attiv.remove(); // Removes firm return TRelation_application::remove(); } void TDitte_application::init_query_mode(TMask& m) { if (filtered()) { m.show(FLD_GD1_CODDITTAH); m.show(FLD_GD1_RAGSOCH); m.hide(FLD_GD1_CODDITTA); m.hide(FLD_GD1_RAGSOC); } else { m.show(FLD_GD1_CODDITTA); m.show(FLD_GD1_RAGSOC); m.hide(FLD_GD1_CODDITTAH); m.hide(FLD_GD1_RAGSOCH); } init_insert_mode(m); } void TDitte_application::init_insert_mode(TMask& m) { if (!filtered()) { m.enable(FLD_GD1_TIPOA); m.enable(FLD_GD1_CODANAGR); m.enable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); m.show(FLD_GD1_CODDITTA); m.show(FLD_GD1_RAGSOC); m.hide(FLD_GD1_CODDITTAH); m.hide(FLD_GD1_RAGSOCH); } else { m.show(FLD_GD1_CODDITTAH); m.show(FLD_GD1_RAGSOCH); m.hide(FLD_GD1_CODDITTA); m.hide(FLD_GD1_RAGSOC); } m.disable(DLG_ATT); m.disable(DLG_ULC); m.disable(DLG_SOC); m.disable(DLG_REG); _oldattprev = ""; // La valuta si decide già in creazione: la valuta della prima ditta memorizzata TEdit_field& val = m.efield(FLD_GD1_VALUTA); TLocalisamfile& ditte = get_relation()->lfile(); if (ditte.first() == NOERR) { val.set(ditte.get("VALUTA")); val.disable(); } else val.enable(); } void TDitte_application::enable_reg(TMask& m) { const long codditta = m.get_long(FLD_GD1_CODDITTA); m.enable(DLG_REG, prefix().exist(codditta)); } void TDitte_application::init_modify_mode(TMask& m) { m.disable(FLD_GD1_TIPOA); m.disable(FLD_GD1_CODANAGR); m.disable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); m.disable(FLD_GD1_VALUTA); // La valuta si decide solo in creazione if (filtered()) { m.show(FLD_GD1_CODDITTAH); m.show(FLD_GD1_RAGSOCH); m.hide(FLD_GD1_RAGSOC); m.hide(FLD_GD1_CODDITTA); } else { m.show(FLD_GD1_CODDITTA); m.show(FLD_GD1_RAGSOC); m.hide(FLD_GD1_CODDITTAH); m.hide(FLD_GD1_RAGSOCH); } m.enable(DLG_ATT); m.enable(DLG_ULC); m.enable(DLG_SOC); enable_reg(m); _oldattprev = m.get(FLD_GD1_CODATTPREV); } int ba4300(int argc, char* argv[]) { TDitte_application a ; a.run(argc, argv, TR("Anagrafica Ditte")); return 0; }