// Programma di gestione agenti #include #include "pr0.h" #include "pr0500a.h" #include "agenti.h" class TGestione_agenti_app:public TRelation_application { TMask *_msk; TRelation *_rel; protected: virtual bool user_create(); virtual bool user_destroy(); virtual TMask* get_mask(int mode) { return _msk; } virtual bool changing_mask(int mode) { return FALSE; } virtual TRelation* get_relation() const { return _rel; } static bool percfat_handler(TMask_field& f, KEY k); static bool codcapo_handler(TMask_field& f, KEY k); static bool seqalt_handler(TMask_field& f, KEY k); static bool codalt_handler(TMask_field& f, KEY k); public: // @cmember Disabilita la verifica del modulo in chiave virtual bool check_autorization() const {return FALSE;} TGestione_agenti_app() {}; ~TGestione_agenti_app() {}; }; static inline TGestione_agenti_app& app() { return (TGestione_agenti_app&) main_app(); } bool TGestione_agenti_app::percfat_handler(TMask_field& f, KEY k) { if (f.to_check(k,TRUE)) { const real p = CENTO - real(f.get()); f.mask().set(F_PERCPAG,p); } return TRUE; } bool TGestione_agenti_app::codcapo_handler(TMask_field& f, KEY k) { if (f.to_check(k) && k == K_ENTER) // Solo prima che prema il pulsante di registrazione { TLocalisamfile agenti(LF_AGENTI); TRecfield agente(agenti.curr(),AGE_CODAGE); TRecfield capo(agenti.curr(),AGE_CODCAPO); const TString& ag = f.mask().get(F_CODAGE); TString ca = f.get(); agente = ca; while (agenti.read() == NOERR) { ca = capo; if (ca == ag) break; if (ca.empty()) break; agente = ca; } if (agenti.good() && ca == ag) return f.error_box(TR("Il codice del capozona inserito non e' valido, in quanto e' stato rilevato nella catena un codice capozona corrispondente al presente codice agente.")); } return TRUE; } bool TGestione_agenti_app::seqalt_handler(TMask_field& f, KEY k) { if (f.to_check(k) && k == K_ENTER) // Solo prima che prema il pulsante di registrazione { if (f.get() == "A") { TMask& m = f.mask(); if (m.get(F_SEQRIC1) == "A" || m.get(F_SEQRIC2) == "A" || m.get(F_SEQRIC3) == "A" || m.get(F_SEQRIC4) == "A") return f.error_box(TR("La percentuale definita nell'agente non puo' essere usata nella indicazione " "di percentuale aggiuntiva se gia' utilizzata nella sequenza di ricerca della percentuale di provvigione")); } } return TRUE; } bool TGestione_agenti_app::codalt_handler(TMask_field& f, KEY k) { if (f.to_check(k) && k == K_ENTER) // Solo prima che prema il pulsante di registrazione { TString16 cod = f.get(); if (cod.not_empty()) { TMask& m = f.mask(); if (m.get(F_CODRICPR1) == cod || m.get(F_CODRICPR2) == cod || m.get(F_CODRICPR3) == cod || m.get(F_CODRICPR4) == cod) return f.error_box(FR("L'archivio provvigioni %s definito nella indicazione di percentuale aggiuntiva non puo' essere utilizzato " "se gia' impostato nella sequenza di ricerca della percentuale di provvigione"), (const char*)cod); } } return TRUE; } bool TGestione_agenti_app::user_create() { open_files(LF_AGENTI, LF_PROVV, LF_PERCPROV, 0); _msk = new TMask("pr0500a") ; _rel = new TRelation(LF_AGENTI); _msk->set_handler(F_CODCAPO,codcapo_handler); _msk->set_handler(F_SEQALT1,seqalt_handler); _msk->set_handler(F_SEQALT2,seqalt_handler); _msk->set_handler(F_SEQALT3,seqalt_handler); _msk->set_handler(F_SEQALT4,seqalt_handler); _msk->set_handler(F_CODALTPR1,codalt_handler); _msk->set_handler(F_CODALTPR2,codalt_handler); _msk->set_handler(F_CODALTPR3,codalt_handler); _msk->set_handler(F_CODALTPR4,codalt_handler); _msk->set_handler(F_PERCFATT,percfat_handler); return TRUE; } bool TGestione_agenti_app::user_destroy() { delete _msk; delete _rel; return TRUE; } int pr0500(int argc, char** argv) { TGestione_agenti_app a; a.run(argc,argv, TR("Gestione agenti")); return 0; }