TString16_rcondven;// stringa che indica il tipo di archivio
bool_codlis_catven;// booleano di abilitazione del campo CATVEN
state_gest_um;// variabile di abilitazione delle unit<69> di misura
virtualbooluser_create();
virtualbooluser_destroy();
virtualTMask*get_mask(int){return_msk;}// punto d'aggancio tra la maschera della rel.app. e la maschera principale dell'applicazione
virtualboolchanging_mask(int){returnFALSE;}// ritorna il flag di cambio maschera a seconda dei modi di funzionamento, in questa applicazione la maschera <20> una sola quindi il flag <20> FALSE
virtualboolchanging_keys()const{returnTRUE;}// ritorna il flag di rigenerazione della lista delle chiavi ad ogni find(), in questa applicazione le chiavi cambiano continuamente quindi il flag <20> TRUE
virtualTRelation*get_relation()const{return_rel;}// punto d'aggancio tra la relazione della rel.app. e la relazione principale dell'applicazione
staticvoidhide_and_show_codriga(void);// procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
staticboolhandle_tiporiga(TMask_field&,KEY);// handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
staticboolhandle_cod(TMask_field&,KEY);// handler del campo COD (codice listino, numero contratto, codice offerta)
virtualintwrite(constTMask&);// metodo usato per scrivere il record sul file
virtualintrewrite(constTMask&);// metodo usato per aggiornare il record sul file
public:
TRighe_condizioni_vendita(){}
virtual~TRighe_condizioni_vendita(){}
};
TRighe_condizioni_vendita&app(){// funzione che ritorna il riferimento alla classe principale dell'applicazione
return(TRighe_condizioni_vendita&)main_app();
}
boolTRighe_condizioni_vendita::user_create(){
boolgotcha=FALSE;// booleano di avvenuta inizializzazione
_rcondven="*";// inizializzazione dell'indicatore del tipo di archivio
if(argc()>2){// se c'<27>, prende il tipo di archivio dalla linea di comando
TStringtemp(argv(2));
_rcondven=temp.left(1);// prende solo il primo carattere
}else{
TMaskchoose("VE2300");// istanzia la maschera di scelta del tipo di archivio
if(choose.run()==K_ENTER)_rcondven=choose.get(F_TIPORCV);// prende il tipo di archivio dalla maschera
}
_rcondven.upper();// rende la stringa upper-case
_msk=newTMask("VE2300X");
TConfigprassid(CONFIG_DITTA,"ve");// apre il file di configurazione della ditta corrente
switch(_rcondven[0]){
case'L':// listini
_gest_um=disactivated;// attiva di default la gestione delle unit<69> di misura pur lasciando il campo disabilitato
DESTROY(F_R_C_TIPOCF);// settaggio dei campi da eliminare...
DESTROY(F_R_C_CODCF);
DESTROY(F_R_C_COD);
DESTROY(F_R_O_COD);
_msk->hide(F_R_C_RICERCA);
_msk->hide(F_R_O_RICERCA);
_msk->hide(F_R_CO_CODLOTTO);
_msk->hide(F_R_O_ARTES);
_codlis_catven=prassid.get_bool("CodLisCV");// setta il booleano di abilitazione di CATVEN
if(!_codlis_catven)KILL(F_R_L_CATVEN);// disabilita condizionalmente le categorie di vendita
set_search_field(F_R_L_RICERCA);// impostazione del campo di ricerca
_msk->set_handler(F_R_L_COD,handle_cod);// impostazione dell'handler sul campo di controllo della testata
gotcha=TRUE;
break;
case'C':// contratti
_gest_um=hidden;// rimuove la gestione delle unit<69> di misura
DESTROY(F_R_L_CATVEN);// settaggio dei campi da eliminare...
DESTROY(F_R_L_COD);
DESTROY(F_R_O_COD);
DESTROY(F_R_LO_UM);
_msk->hide(F_R_L_RICERCA);
_msk->hide(F_R_O_RICERCA);
_msk->hide(F_R_O_ARTES);
set_search_field(F_R_C_RICERCA);// impostazione del campo di ricerca
_msk->set_handler(F_R_C_COD,handle_cod);// impostazione dell'handler sul campo di controllo della testata
gotcha=TRUE;
break;
case'O':// offerte
_gest_um=disactivated;// attiva di default la gestione delle unit<69> di misura pur lasciando il campo disabilitato
DESTROY(F_R_L_CATVEN);// settaggio dei campi da eliminare...
DESTROY(F_R_C_TIPOCF);
DESTROY(F_R_C_CODCF);
DESTROY(F_R_L_COD);
DESTROY(F_R_C_COD);
_msk->hide(F_R_L_RICERCA);
_msk->hide(F_R_C_RICERCA);
set_search_field(F_R_O_RICERCA);// impostazione del campo di ricerca
_msk->set_handler(F_R_O_COD,handle_cod);// impostazione dell'handler sul campo di controllo della testata
gotcha=TRUE;
break;
default:// messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if(gotcha){// se <20> stato selezionato correttamente un archivio completa l'inizializzazione
_rel=newTRelation(LF_RCONDV);// apre la relazione (un unico file)
_msk->set(F_R_TIPO,_rcondven);// settaggio del campo di tipo archivio
_msk->set_handler(F_R_TIPORIGA,handle_tiporiga);// impostazione dell'handler sul campo di selezione del tipo della riga
hide_and_show_codriga();// invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
TMask*_msk=app()._msk;// prende il puntatore alla maschera principale dell'applicazione
if(_msk->query_mode()){// se la maschera <20> in modo query procede con i controlli...
shortid_campi[3]={F_R_CODRIGA_A,F_R_CODRIGA_G,F_R_CODRIGA_R};// vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
chartag_campi[3]={'A','G','R'};// vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
state&_gest_um=app()._gest_um;// prende il riferimento al booleano di abilitazione delle unit<69> di misura
TString&_rcondven=app()._rcondven;// prende il riferimento alla stringa di tipo di archivio
chartag_campo=toupper(_msk->get(F_R_TIPORIGA)[0]);// prende il tag del campo da abilitare in TIPORIGA
for(inti=0;i<3;i++){// ciclo sui tre campi CODRIGA
if(tag_campo==tag_campi[i]){CREATE(id_campi[i]);}// il campo indicato con il tag viene reso visibile
else{DESTROY(id_campi[i]);}// i campi non corrispondenti al tag vengono resi invisibili
}
if((_gest_um!=hidden)&&(_gest_um!=disabled)){// se <20> abilitata (o abilitabile) la gestione delle unit<69> di misura ed <20> stata selezionata una riga di articoli...
if(tag_campo=='A')_gest_um=activated;// ...il campo "unit<69> di misura" viene abilitato...
else_gest_um=disactivated;// ...altrimenti viene disabilitato
}
switch(_gest_um){
casehidden:// se l'unit<69> di misura deve essere fuori dai piedi...
DESTROY(F_R_LO_UM);// ...il campo viene relativo soppresso
break;
casedisabled:// se l'unit<69> di misura deve essere tra i piedi (ma inutilizzabile)
casedisactivated:
CREATE(F_R_LO_UM);// ...il campo relativo viene rimesso al mondo...
KILL(F_R_LO_UM);// ...ma subito ucciso
break;
caseactivated:// se l'unit<69> di misura deve funzionare...
CREATE(F_R_LO_UM);// ...il campo relativo viene rimesso al mondo...