#include #include #include #include #include #include #include #include #include #include "ba4.h" #include "ba4300.h" #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* CODDITTA = "CODDITTA"; const char* CODATTPREV = "CODATTPREV"; const char* TIPOA = "TIPOA"; const char* CODANAGR = "CODANAGR"; const char* CODATT = "CODATT"; 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"; const char* CODULC = "CODULC"; const char* COMULC = "COMULC"; const char* INDULC = "INDULC"; const char* CIVULC = "CIVULC"; const char* CAPULC = "CAPULC"; const char* COMCCIAA = "COMCCIAA"; const char* COMTRIB = "COMTRIB"; #define TABATT "%ais" #define CODTAB "CODTAB" #define S0 "S0" #define DESCR "DESCR" class TDitte_application : public TRelation_application { TMask* _msk; TRelation *_rel; TString16 _oldattprev; bool _cespiti; 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 fax_handler(TMask_field& f, KEY k); 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() : _cespiti(FALSE) {} 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); _cespiti = has_module(CEAUT); _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 TString16 attprev(m.get(FLD_GD1_CODATTPREV)); if (_oldattprev == attprev) return; TRectype& ditte=_rel->curr(); TString codditta(ditte.get(CODDITTA)) ; TLocalisamfile attiv(LF_ATTIV); if (_oldattprev.not_empty()) { attiv.put(CODDITTA, codditta) ; attiv.put(CODATT, _oldattprev); if (attiv.read(_isequal, _lock) == NOERR) { attiv.put("ATTPREV", bool(FALSE)); if (attiv.rewrite() != NOERR) error_box(FR("Non posso aggiornare l'attivita' prevalente precedente : errore n. %d"), attiv.status()); } } attiv.zero() ; attiv.put(CODDITTA, codditta) ; attiv.put(CODATT, attprev) ; const bool itwas = attiv.read(_isequal, _lock) == NOERR; if (!itwas) { attiv.zero() ; attiv.put(CODDITTA, codditta) ; attiv.put(CODATT, attprev) ; const TRectype& tabatt = cache().get(TABATT, ditte.get(CODATTPREV)); attiv.put(DESCR, tabatt.get(S0)) ; } attiv.put("ATTPREV", bool(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(CODDITTA, ditte.get(CODDITTA)) ; unloc.put(CODULC, 1); unloc.put(COMULC, anag.get(COMRES)); unloc.put(INDULC, anag.get(INDRES)); unloc.put(CIVULC, anag.get(CIVRES)); unloc.put(CAPULC, anag.get(CAPRES)); unloc.put(COMCCIAA, anag.get(COMRES)); unloc.put(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); m.disable(DLG_REG1); _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, codditta > 0 && 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); m.enable(DLG_REG1, _cespiti); 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; }