// gestione files Contabilita' Analitica: COMMESSE #include #include #include #include "calib01.h" #include "ca0600a.h" #include "commesse.h" //////////////////////////////////////////////////////////////////////// //MASCHERA //////////////////////////////////////////////////////////////////////// class TCms_anal_msk : public TSimple_anal_msk { protected: virtual int get_logicnum() const { return LF_COMMESSE; } public: TCms_anal_msk(); }; TCms_anal_msk::TCms_anal_msk() { read("ca0600a"); ca_create_fields(*this, 2, LF_CDC, 1, 1, F_CMS_CDC1, F_CMS_CDCDES1, 0x0, COMMESSE_CODCOSTO); const bool use_pdcc = ca_config().get_bool("UsePdcc"); const int nfields = ca_create_fields(*this, 3, use_pdcc ? LF_PCON : LF_PCONANA, 2, 2, F_CMSPDA1, F_CMSDES1, 0x0, COMMESSE_CODCONTO); int from = 1; for (int i = 0; i < nfields; i++) { TEdit_field & e = efield(F_CMSPDA1 + i); e.check_type(CHECK_NORMAL); TFieldref * fr = (TFieldref *) e.field(); if (fr != NULL) { fr->set_from(from); if (i < 2) from += 3; else from += 6; fr->set_to(from - 1); } } } //////////////////////////////////////////////////////////////////////// //APPLICAZIONE //////////////////////////////////////////////////////////////////////// // applicazione per la gestione delle commesse class TCms_app : public TAnal_app { int _maxlev; bool _has_filter; protected: virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM virtual bool filtered() const; virtual void init_modify_mode(TMask& mask); virtual void init_insert_mode(TMask& mask); virtual bool protected_record(TRectype& record); virtual TSimple_anal_msk* create_mask() const { return new TCms_anal_msk; } virtual bool user_create(); }; bool TCms_app::filtered() const { if (_has_filter) return true; return TAnal_app::filtered(); } //non si puņ eliminare una commessa se essa appare in un saldo analitico dell'anno in corso o dell'anno precedente bool TCms_app::protected_record(TRectype& record) { TString query; query << "USE SALDANA\nSELECT COMMESSA==#COMMESSA\nFROM ANNO=#ANNO\n"; const TString commessa = record.get(COMMESSE_CODCMS); const TDate today(TODAY); const long anno = today.year(); TISAM_recordset saldana_recset(query); saldana_recset.set_var("#COMMESSA", TVariant(commessa)); saldana_recset.set_var("#ANNO", TVariant(anno - 1)); const long items = saldana_recset.items(); return items > 0; } void TCms_app::init_modify_mode(TMask& mask) { const short id = ((TCms_anal_msk &)mask).get_field_id(_maxlev - 1 , 1); mask.enable(-1, mask.get(id).not_empty()); TAnal_app::init_modify_mode(mask); } void TCms_app::init_insert_mode(TMask& mask) { const short id = ((TCms_anal_msk &)mask).get_field_id(_maxlev - 1, 1); mask.enable(-1, mask.get(id).not_empty()); TAnal_app::init_insert_mode(mask); } bool TCms_app::user_create() { const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_COMMESSE); _maxlev = mci.levels(); if (_maxlev <= 0) return error_box(TR("Le commesse non sono state configurate")); //eventuali filtri per utente _has_filter = cache().get("%AUC", user(), "S0").full(); return TAnal_app::user_create(); } int ca0600(int argc, char* argv[]) { TCms_app a; a.run(argc, argv, TR("Commesse")); return 0; }