#include #include #include "ve2100.h" class TTabelle_sconti: public TRelation_application { TMask *_msk; // maschera principale TRelation *_rel; // relazione principale char _sconti; // carattere che indica il tipo di tabella short _sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati bool _sci_k_enabled[4]; // vettore di abilitazione dei campi chiave per la maschera degli sconti incondizionati virtual bool user_create(); virtual bool user_destroy(); virtual TMask *get_mask(int) { return _msk; } virtual bool changing_mask(int) { return FALSE; } virtual TRelation *get_relation() const { return _rel; } virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca public: TTabelle_sconti() {} virtual ~TTabelle_sconti() {} }; bool TTabelle_sconti::user_create() { bool gotcha= FALSE; // booleano di avvenuta inizializzazione _sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando else { TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera } switch (_sconti) { case 'D': { // sconti documento _msk= new TMask("VE2100D"); // apre la maschera relativa gotcha= TRUE; break; } case 'R': { // sconti di riga _msk= new TMask("VE2100R"); // apre la maschera relativa set_search_field(F_R_RICERCA); // setta il campo di ricerca gotcha= TRUE; break; } case 'I': { // sconti incondizionati _msk= new TMask("VE2100I"); // apre la maschera relativa set_search_field(F_I_RICERCA); // setta il campo di ricerca TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta _sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente _sci_k_id[1]= F_I_SCCLIENTI; _sci_k_id[2]= F_I_ZONE; _sci_k_id[3]= F_I_CONDPAG; for (int i=0; i<4; i++) { if (prassid.get("K_SCONTI_INC", "ve", i).empty()) _sci_k_enabled[i]= FALSE; // se nel file di config. il campo non è abilitato, viene indicato nel vettore di abilitazione else _sci_k_enabled[i]= gotcha= TRUE; // se c'è almeno un campo abilitato "gotcha" esce TRUE dal ciclo } if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta"); break; } default: { // messaggio di errore se si indica una tabella non valida error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza"); break; } } if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file) return (gotcha); } bool TTabelle_sconti::user_destroy() { delete _rel; delete _msk; return TRUE; } void TTabelle_sconti::init_query_mode(TMask &m) { for (int i=0; i<4; i++) { if (_sci_k_enabled[i]) { // se il campo deve essere abilitato... m.enable(_sci_k_id[i]); // ...lo abilita... m.efield(_sci_k_id[i]).check_type(CHECK_REQUIRED); // ...e lo rende richiesto... } else { // ...altrimenti... m.disable(_sci_k_id[i]); // ...lo disabilita... m.efield(_sci_k_id[i]).check_type(CHECK_NORMAL); // ...e lo rende non richiesto } } } int ve2100(int argc, char* argv[]) { TTabelle_sconti a; a.run(argc, argv, "Tabella sconti "); return 0; }