TString16_condven;// stringa che indica il tipo di archivio
TBit_array_tohide;// vettore degli identificatori di campi che devono essere nascosti
bool_codlis_catven;// booleano di abilitazione della categoria di vendita nella chiave dei listini
bool_gest_val,_gest_um,_gest_sca,_gest_so;// booleani per l'abilitazione di valute, unit<69> di misura, scaglioni e sconti/omaggi
virtualbooluser_create();
virtualbooluser_destroy();
virtualTMask*get_mask(int){return_msk;}
virtualboolchanging_mask(int){returnFALSE;}
virtualTRelation*get_relation()const{return_rel;}
staticboolhandle_mask(TMask&,KEY);// handler custom della maschera (per il tasto di aggancio alle righe)
staticboolhandle_datacam(TMask_field&,KEY);// handler del campo DATACAM (data cambio)
staticboolhandle_valfin(TMask_field&,KEY);// handler del campo VALFIN (data fine validit<69>)
staticboolhandle_codsucc(TMask_field&,KEY);// handler del campo CODSUCC (codice successivo)
virtualintwrite(constTMask&);// metodo usato per scrivere il record sul file
virtualintrewrite(constTMask&);// metodo usato per aggiornare il record sul file
virtualboolremove();// metodo usato per cancellare il record sul file
public:
TCondizioni_vendita(){}
virtual~TCondizioni_vendita(){}
};
TCondizioni_vendita&app(){// funzione che ritorna il riferimento alla classe principale dell'applicazione
return(TCondizioni_vendita&)main_app();
}
boolTCondizioni_vendita::user_create(){
boolgotcha=FALSE;// booleano di avvenuta inizializzazione
_condven="*";// inizializzazione dell'indicatore del tipo di archivio
if(argc()>2)_condven=argv(2);// se c'<27>, prende il tipo di archivio dalla linea di comando
else{
TMaskchoose("VE2200");// istanzia la maschera di scelta del tipo di archivio
if(choose.run()==K_ENTER)_condven=choose.get(F_TIPOCV);// prende il tipo di archivio dalla maschera
}
_condven.upper();// rende la stringa upper-case
_msk=newTMask("VE2200X");
TConfigprassid(CONFIG_DITTA,"ve");// apre il file di configurazione della ditta corrente
switch(_condven[0]){
case'L':{// listini
if(!(prassid.get_bool("Ges",NULL,A_LISTINI)))error_box("L'archivio Listini non <20> abilititato");// controlla che l'archivio listini sia abilitato
else{
// eliminazione campi di altri archivi
DESTROY(F_C_COD);
DESTROY(F_O_COD);
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_OBBLIG);
set_search_field(F_L_COD);// impostazione del campo di ricerca
_msk->set_handler(F_LC_CODSUCC,handle_codsucc);// setta l'handler per il campo di codice successivo
_codlis_catven=prassid.get_bool("CodLisCV");// setta il booleano di abilitazione delle categoria di vendita
if(!_codlis_catven)KILL(F_L_CATVEN);// disabilita condizionalmente le categorie di vendita
_gest_um=prassid.get_bool("GesUM",NULL,A_LISTINI);// setta il booleano di abilitazione delle unit<69> di misura
_gest_sca=prassid.get_bool("GesSca",NULL,A_LISTINI);// setta il booleano di abilitazione degli scaglioni
_gest_so=prassid.get_bool("GesSO",NULL,A_LISTINI);// setta il booleano di abilitazione degli sconti/omaggi
gotcha=TRUE;
}
break;
}
case'C':// contratti
if(!(prassid.get_bool("Ges",NULL,A_CONTRATTI)))error_box("L'archivio Contratti non <20> abilititato");// controlla che l'archivio listini sia abilitato
else{
// settaggio dei campi da eliminare
DESTROY(F_L_COD);
DESTROY(F_O_COD);
DESTROY(F_L_CATVEN);
DESTROY(F_LC_CODSUCC);
set_search_field(F_C_COD);// impostazione del campo di ricerca
_gest_um=prassid.get_bool("GesUM",NULL,A_CONTRATTI);// setta il booleano di abilitazione delle unit<69> di misura
_gest_sca=prassid.get_bool("GesSca",NULL,A_CONTRATTI);// setta il booleano di abilitazione degli scaglioni
_gest_so=prassid.get_bool("GesSO",NULL,A_CONTRATTI);// setta il booleano di abilitazione degli sconti/omaggi
gotcha=TRUE;
}
break;
case'O':// offerte
if(!(prassid.get_bool("Ges",NULL,A_OFFERTE)))error_box("L'archivio Offerte non <20> abilititato");// controlla che l'archivio listini sia abilitato
else{
// settaggio dei campi da eliminare
DESTROY(F_L_COD);
DESTROY(F_C_COD);
DESTROY(F_L_CATVEN);
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_OBBLIG);
set_search_field(F_O_COD);// impostazione del campo di ricerca
_msk->set_handler(F_LC_CODSUCC,handle_codsucc);// setta l'handler per il campo di codice successivo
_gest_um=prassid.get_bool("GesUM",NULL,A_OFFERTE);// setta il booleano di abilitazione delle unit<69> di misura
_gest_sca=prassid.get_bool("GesSca",NULL,A_OFFERTE);// setta il booleano di abilitazione degli scaglioni
_gest_so=prassid.get_bool("GesSO",NULL,A_OFFERTE);// setta il booleano di abilitazione degli sconti/omaggi
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_CONDV);// apre la relazione (un unico file)
_msk->set(F_TIPO,_condven);// settaggio del campo di tipo archivio
_msk->set_handler(handle_mask);// imposta l'handler generale della maschera
_msk->set_handler(F_DATACAM,handle_datacam);// imposta l'handler per il campo della data del cambio
_msk->set_handler(F_VALFIN,handle_valfin);// imposta l'handler per il campo di fine validit<69>
if(!_gest_um)_msk->disable(F_GESTUM);// disabilita condizionalmente il booleano di gestione delle unit<69> di misura
if(!_gest_sca)_msk->disable(F_GESTSCAGL);// disabilita condizionalmente il booleano di gestione degli scaglioni
if(!_gest_so)_msk->disable(F_GESTSCO);// disabilita condizionalmente il booleano di gestione degli sconti/omaggi
_gest_val=prassid.get_bool("GesVal");// legge il booleano di abilitazione delle gastione delle valute
if(!_gest_val){// se la gestione delle valute <20> disabilitata i campi di gestione vengono disabilitati
TString&_condven=app()._condven;// prende il tipo di archivio dall'applicazione principale
TStringcodsucc(fld.get());// prende il codice successivo dal campo corrente
if(codsucc.not_empty()){
TMask&m=fld.mask();// prende la maschera principale
TStringcod;// istanzia la stringa per il codice corrente
switch(_condven[0]){
case'L':cod=m.get(F_L_COD);break;// prende il codice listino corrente dal campo della maschera
case'C':cod=m.get(F_C_COD);break;// prende il codice contratto dal campo della maschera
}
if(codsucc==cod){
error_box("Il codice successivo deve essere diverso dal codice corrente");
returnFALSE;
}
}
}
returnTRUE;
}
intTCondizioni_vendita::write(constTMask&m){
m.autosave(_rel);// scrive il contenuto della maschera nel record della relazione
TLocalisamfile&f=_rel->lfile();// prende il file principale della relazione
if(_condven!="C")f.zero("TIPOCF");// se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
_rel->write();// invoca la scrittura della relazione
return(_rel->status());// ritorna lo stato della relazione
}
intTCondizioni_vendita::rewrite(constTMask&m){
m.autosave(_rel);// scrive il contenuto della maschera nel record della relazione
TLocalisamfile&f=_rel->lfile();// prende il file principale della relazione
if(_condven!="C")f.zero("TIPOCF");// se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
_rel->rewrite();// invoca la riscrittura della relazione
return(_rel->status());// ritorna lo stato della relazione
}
boolTCondizioni_vendita::remove(){
TLocalisamfile&condv=_rel->lfile();// prende il file della testata dalla relazione principale
TLocalisamfilercondv(LF_RCONDV);// apre il file delle righe per ottenenre il record corrente
TRectypedelrec(rcondv.curr());// istanzia il record basato sul file delle righe, da usare come campione
delrec.zero();// svuota il record campione
delrec.put("TIPO",_condven);// setta il tipo di archivio
delrec.put("COD",condv.get("COD"));// setta il codice della testata
if((_condven=="L")&&_codlis_catven)delrec.put("CATVEN",condv.get("CATVEN"));// setta la categoria di vendita se <20> abilitata e siamo nei listini
if(_condven=="C"){
delrec.put("TIPOCF",condv.get("TIPOCF"));// setta i dati del cliente/fornitore se siamo nei contratti
delrec.put("CODCF",condv.get("CODCF"));
}
TRelationdelrel(LF_RCONDV);// istanzia una relazione sulle righe
TCursordelcur(&delrel,"",1,&delrec,&delrec);// istanzia il cursore di cancellazione sulla relazione delle righe
longn=delcur.items();// legge il numero di elementi del cursore
delcur.freeze();// congela il cursore al suo stato attuale
boolproceed=FALSE;// istanzia il booleano di conferma alla cancellazione
if(n==1)proceed=yesno_box("Esiste una riga collegata a questa testata: verr<72> anch'essa cancellata. Procedo?");// viene richiesta conferma alla cancellazione della riga...
if(n>1)proceed=yesno_box("Esistono %ld righe collegate a questa testata: verranno anch'esse cancellate. Procedo?",n);// ...o delle righe
if(proceed){// se si conferma le righe vengono cancellate
TLocalisamfile&delfile=delcur.file();// prende riferimento al file delle righe dal cursore
for(delcur=0;delcur.pos()<n;++delcur)delfile.remove();// ciclo sugli elementi del cursore, cancella i record del file delle righe
}elsereturnFALSE;
return(TRelation_application::remove());// viene invocata la funzione standard di cancellazione del record corrente