#include #include //per definizione BAR_ITEM #include #include #include #include #include "ef0.h" #include "ef0101.h" #include "ef0400.h" ///////////////////////////////////////////////////////////////////////////// //Classe per l'eliminazione di effetti di effetti con selezione per gruppi // ///////////////////////////////////////////////////////////////////////////// class TEliminazione_effetti: public TApplication { TMask *_msk; TRelation *_rel; TLocalisamfile *_reff, *_cession; TRectype *_from, *_to; virtual bool create() ; virtual bool destroy() ; virtual bool menu(MENU_TAG); protected: static bool from_numero_handler(TMask_field& f, KEY k); static bool to_numero_handler(TMask_field& f, KEY k); static bool from_data_handler(TMask_field& f, KEY k); static bool to_data_handler(TMask_field& f, KEY k); static bool conferma_handler(TMask_field& f, KEY k); static bool annulla_handler(TMask_field& f, KEY k); static void elimina(); public: TEliminazione_effetti() {}; virtual ~TEliminazione_effetti() {}; }; // restituisce un riferimento all' applicazione inline TEliminazione_effetti& app(){return (TEliminazione_effetti&)main_app();} // crea l'applicazione bool TEliminazione_effetti::create() { _msk = new TMask("ef0400a"); _rel = new TRelation(LF_EFFETTI); _reff = new TLocalisamfile(LF_REFFETTI); _cession = new TLocalisamfile(LF_CESS); _rel->first(); _from = new TRectype(_rel->lfile().curr()); _rel->last(); _to = new TRectype(_rel->lfile().curr()); _msk->set_handler(F_DA_RIBA, from_numero_handler); _msk->set_handler(F_A_RIBA, to_numero_handler); _msk->set_handler(F_DA_DATA, from_data_handler); _msk->set_handler(F_A_DATA, to_data_handler); _msk->set_handler(DLG_OK, conferma_handler); _msk->set_handler(DLG_CANCEL, annulla_handler); dispatch_e_menu(BAR_ITEM(1)); return TRUE; } // distrugge l'applicazione bool TEliminazione_effetti::destroy() { delete _msk; delete _rel; delete _reff; delete _cession; delete _from; delete _to; return TRUE; } //Carica maschera eliminazione effetti bool TEliminazione_effetti::menu(MENU_TAG) { KEY key = K_ENTER; while (key != K_QUIT)//finchè non si chiude la maschera { _msk->reset(); key = _msk->run(); } return FALSE; } //Handler per la gestione della prima chiave (from) del cursore per numero bool TEliminazione_effetti::from_numero_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_TAB) { if (!f.get().empty())// se il campo non è vuoto { TRectype* from = app()._from; long num = m.get_long(F_DA_RIBA); from->put(EFF_NPROGTR, num); } } return TRUE; } //Handler per la gestione della seconda chiave (to) del cursore per numero bool TEliminazione_effetti::to_numero_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_TAB) { if (!f.get().empty())// se il campo non è vuoto { TRectype* to = app()._to; long num = m.get_long(F_A_RIBA); to->put(EFF_NPROGTR, num); } } return TRUE; } //Handler per la gestione della prima chiave (from) del cursore per data bool TEliminazione_effetti::from_data_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_TAB) { if (!f.get().empty())// se il campo non è vuoto { TRectype* from = app()._from; TDate data = m.get(F_DA_DATA); long num = m.get_long(F_DA_RIBA); from->put(EFF_NPROGTR, num); from->put(EFF_DATASCAD, data); } } return TRUE; } //Handler per la gestione della seconda chiave (to) del cursore per numero bool TEliminazione_effetti::to_data_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_TAB) { if (!f.get().empty())// se il campo non è vuoto { TRectype* to = app()._to; TDate data = m.get(F_A_DATA); long num = m.get_long(F_A_RIBA); to->put(EFF_NPROGTR, num); to->put(EFF_DATASCAD, data); } } return TRUE; } // Si effettua l'istanziazione del cursore e si eliminano gli effetti che vi // appartengono void TEliminazione_effetti::elimina() { const TRectype *from = app()._from; const TRectype *to = app()._to; TMask *m = app()._msk; TRelation *rel = app()._rel; const char* filter; int key; char op1 = m->get(F_TIPOSEL)[0]; char op2 = m->get(F_TIPOCANC)[0]; switch (op1) //scelgo la chiave per il cursore { case 'N': //selezione effetti per numero key = 1; break; case 'D': //selezione effetti per data key = 3; break; } switch (op2) //scelgo il filtro per il cursore { case 'S': //cancello effetti stampati filter = "EFFSTAMP=\"X\""; break; case 'C': //cancello effetti contabilizzati filter = "EFFCONT=\"X\""; break; default : //cancello tutti gli effetti filter = ""; break; } TCursor cur(rel,filter,key,from,to); // istanzio il cursore TLocalisamfile& delfile = cur.file();// prendo un riferimento al file long n = cur.items();// prendo il numero di elementi del cursore cur.freeze();// congelo lo stato del cursore for (cur=0; cur.pos() < n; ++cur)// scandisco tutti gli elementi del cursore { TEffetto eff(delfile.curr());// istanzio un effetto eff.remove(delfile); // e lo cancello } } //Handler per gestire la conferma della cancellazione degli effetti bool TEliminazione_effetti::conferma_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_SPACE) { if (yesno_box("Vuoi veramete eliminare gli effetti selezionati")) elimina(); } return TRUE; } // Handler per gestire la conferma dell'annullamento dei dati // inseriti nella maschera bool TEliminazione_effetti::annulla_handler(TMask_field& f, KEY k) { TMask &m = f.mask(); if (k == K_SPACE) { if (yesno_box("Vuoi veramete annullare i dati inseriti")) m.reset(); } return TRUE; } int ef0400(int argc, char* argv[]) { TEliminazione_effetti a ; a.run(argc, argv, "Eliminazione Effetti"); return 0; }