// gestione files Contabilita' Analitica: FASI #include #include #include #include "calib01.h" #include "calibmsk.h" #include "ca0700a.h" #include "fasi.h" //////////////////////////////////////////////////////////////////////// //MASCHERA //////////////////////////////////////////////////////////////////////// class TFsc_anal_msk : public TSimple_anal_msk { protected: virtual int get_logicnum() const { return LF_FASI; } virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TFsc_anal_msk() { read("ca0700a"); } }; bool TFsc_anal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { const short id = o.dlg(); if (id > F_KEY4 && id <= F_KEY4+4) { const int level = id - F_KEY4 - 1; return ca_test_multilevel_field(efield(id), level); } return TSimple_anal_msk::on_field_event(o, e, jolly); } //////////////////////////////////////////////////////////////////////// //APPLICAZIONE //////////////////////////////////////////////////////////////////////// // applicazione per la gestione delle fasi class TFsc_app : public TAnal_app { bool _has_filter; protected: virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM virtual bool filtered() const; virtual bool protected_record(TRectype& record); virtual TSimple_anal_msk* create_mask() const { return new TFsc_anal_msk; } virtual bool user_create(); }; bool TFsc_app::filtered() const { if (_has_filter) return true; return TAnal_app::filtered(); } //non si puņ eliminare una fase se essa appare in un saldo analitico dell'anno in corso o dell'anno precedente bool TFsc_app::protected_record(TRectype& record) { TString query; query << "USE SALDANA\nSELECT (FASE==#FASE)"; //controlla se le fasi sono figlie delle commesse o dei centri di costo o semplici figlie di nessuno const TString& fath_fasi = ca_config().get("FathFasi"); if (fath_fasi == "CMS") query << "&&(COMMESSA==#COMMESSA)"; if (fath_fasi == "CDC") query << "&&(COSTO==#COSTO)"; query << "\nFROM ANNO=#ANNO"; const TString fase = record.get(FASI_CODFASE); const TDate today(TODAY); const long anno = today.year(); const TString codcmsfas = record.get(FASI_CODCMSFAS); TISAM_recordset saldana_recset(query); saldana_recset.set_var("#FASE", TVariant(fase)); saldana_recset.set_var("#ANNO", TVariant(anno - 1)); if (fath_fasi == "CMS") saldana_recset.set_var("#COMMESSA", TVariant(codcmsfas)); if (fath_fasi == "CDC") saldana_recset.set_var("#COSTO", TVariant(codcmsfas)); const long items = saldana_recset.items(); return items > 0; } bool TFsc_app::user_create() { const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_FASI); if (mci.levels() <= 0) return error_box(TR("Le fasi non sono state configurate")); //eventuali filtri per utente _has_filter = cache().get("%AUC", user(), "S0").full(); return TAnal_app::user_create(); } int ca0700(int argc, char* argv[]) { TFsc_app a; a.run(argc, argv, TR("Fasi")); return 0; }