1995-08-24 13:51:57 +00:00
# include <relapp.h>
1995-08-07 07:59:09 +00:00
# include "ve2300.h"
1995-08-24 13:51:57 +00:00
// !! verificare le disabilitazioni incrociate tra i campi e le loro relative riabilitazioni
// !! durante i cambi di chiave e dei campi con ricerche custom
1995-08-07 07:59:09 +00:00
1995-08-24 13:51:57 +00:00
class TRighe_condizioni_vendita : public TRelation_application {
TMask * _msk ; // maschera principale
TRelation * _rel ; // relazione principale
1995-08-07 07:59:09 +00:00
virtual bool user_create ( ) ;
virtual bool user_destroy ( ) ;
1995-08-24 13:51:57 +00:00
virtual TMask * get_mask ( int ) { return _msk ; }
virtual bool changing_mask ( int ) { return FALSE ; }
virtual TRelation * get_relation ( ) const { return _rel ; }
1995-08-07 07:59:09 +00:00
1995-08-24 13:51:57 +00:00
static bool handle_tiporiga ( TMask_field & , KEY ) ; // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
static bool handle_cod ( TMask_field & , KEY ) ; // handler del campo COD (codice listino, numero contratto, codice offerta)
virtual int write ( const TMask & ) ; // metodo usato per scrivere il record sul file
virtual int rewrite ( const TMask & ) ; // metodo usato per aggiornare il record sul file
virtual void init_query_mode ( TMask & ) ; // handler chiamato quando la maschera passa in modo ricerca
1995-08-07 07:59:09 +00:00
public :
1995-08-24 13:51:57 +00:00
TString16 _rcondven ; // stringa che indica il tipo di archivio
TBit_array _tohide ; // vettore degli identificatori di campi che devono essere nascosti
TBit_array _todisable ; // vettore degli identificatori di campi che devono essere disabilitati
1995-08-07 07:59:09 +00:00
1995-08-24 13:51:57 +00:00
TRighe_condizioni_vendita ( ) { }
virtual ~ TRighe_condizioni_vendita ( ) { }
1995-08-07 07:59:09 +00:00
} ;
1995-08-24 13:51:57 +00:00
TRighe_condizioni_vendita & app ( ) { // funzione che ritorna il riferimento alla classe principale dell'applicazione
return ( TRighe_condizioni_vendita & ) main_app ( ) ;
}
bool TRighe_condizioni_vendita : : user_create ( ) {
bool gotcha = FALSE ; // booleano di avvenuta inizializzazione
warning_box ( " Questa applicazione non <20> ancora stata definitivamente debuggata " ) ; // !! rimuovere la warning box a fine debugging
_rcondven = " * " ; // inizializzazione dell'indicatore del tipo di archivio
if ( argc ( ) > 2 ) { // se c'<27> , prende il tipo di archivio dalla linea di comando
TString temp ( argv ( 2 ) ) ;
_rcondven = temp . left ( 1 ) ; // prende solo il primo carattere
} else {
TMask choose ( " 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 = new TMask ( " VE2300X " ) ;
_tohide . reset ( ) ; // resetta il vettore dei campi da eliminare
switch ( _rcondven [ 0 ] ) {
case ' L ' : // listini
_tohide . set ( F_C_TIPOCF ) ; // settaggio dei campi da eliminare...
_tohide . set ( F_C_CODCF ) ;
_tohide . set ( F_C_COD ) ;
_tohide . set ( F_O_COD ) ;
_tohide . set ( F_C_RICERCA ) ;
_tohide . set ( F_O_RICERCA ) ;
_tohide . set ( F_CO_CODLOTTO ) ;
_tohide . set ( F_O_ARTES ) ;
set_search_field ( F_L_RICERCA ) ; // impostazione del campo di ricerca
_msk - > set_handler ( F_L_COD , handle_cod ) ; // impostazione dell'handler sul campo di controllo della testata
gotcha = TRUE ;
break ;
case ' C ' : // contratti
_tohide . set ( F_L_CATVEN ) ; // settaggio dei campi da eliminare...
_tohide . set ( F_L_COD ) ;
_tohide . set ( F_O_COD ) ;
_tohide . set ( F_LO_UM ) ;
_tohide . set ( F_L_RICERCA ) ;
_tohide . set ( F_O_RICERCA ) ;
_tohide . set ( F_O_ARTES ) ;
set_search_field ( F_C_RICERCA ) ; // impostazione del campo di ricerca
_msk - > set_handler ( F_C_COD , handle_cod ) ; // impostazione dell'handler sul campo di controllo della testata
gotcha = TRUE ;
break ;
case ' O ' : // offerte
_tohide . set ( F_L_CATVEN ) ; // settaggio dei campi da eliminare...
_tohide . set ( F_C_TIPOCF ) ;
_tohide . set ( F_C_CODCF ) ;
_tohide . set ( F_L_COD ) ;
_tohide . set ( F_C_COD ) ;
_tohide . set ( F_L_RICERCA ) ;
_tohide . set ( F_C_RICERCA ) ;
set_search_field ( F_O_RICERCA ) ; // impostazione del campo di ricerca
_msk - > set_handler ( F_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 = new TRelation ( LF_RCONDV ) ; // apre la relazione (un unico file)
_todisable . reset ( ) ; // inizializza il vettore dei campi da disabilitare
_msk - > set_handler ( F_TIPORIGA , handle_tiporiga ) ; // impostazione dell'handler sul campo di selezione del tipo della riga
}
return ( gotcha ) ;
}
bool TRighe_condizioni_vendita : : user_destroy ( ) {
delete _rel ;
delete _msk ;
1995-08-07 07:59:09 +00:00
return TRUE ;
}
1995-08-24 13:51:57 +00:00
bool TRighe_condizioni_vendita : : handle_tiporiga ( TMask_field & fld , KEY k ) {
if ( k = = K_TAB ) {
TBit_array & _todisable = app ( ) . _todisable ; // vettore per la disabilitazione dei campi, ricavato dalla propriet<65> dell'applicazione
TString & _rcondven = app ( ) . _rcondven ; // prende il riferimento alla stringa di indicazione del tipo di archivio
if ( ( fld . get ( ) ! = " A " ) & & ( _rcondven ! = " C " ) ) _todisable . set ( F_LO_UM ) ; // se il tipo riga <20> "Articolo" e non siamo sui contratti, l'unit<69> di misura deve essere disabilitata
}
1995-08-07 07:59:09 +00:00
return TRUE ;
}
1995-08-24 13:51:57 +00:00
bool TRighe_condizioni_vendita : : handle_cod ( TMask_field & fld , KEY k ) {
if ( k = = K_TAB ) {
TString & _rcondven = app ( ) . _rcondven ; // prende il riferimento alla stringa di indicazione del tipo di archivio
TMask & m = fld . mask ( ) ; // prende la maschera principale
TLocalisamfile condv ( LF_CONDV ) ; // apre il file della testata (condizioni di vendita)
condv . put ( " TIPO " , _rcondven ) ; // riempie il campo "TIPO"
switch ( _rcondven [ 0 ] ) {
case ' L ' : // riempie il resto della chiave dei listini
condv . put ( " CATVEN " , m . get ( F_L_CATVEN ) ) ;
condv . put ( " COD " , m . get ( F_L_COD ) ) ;
break ;
case ' C ' : // riempie il resto della chiave dei contratti
condv . put ( " TIPOCF " , m . get ( F_C_TIPOCF ) ) ;
condv . put ( " CODCF " , m . get ( F_C_CODCF ) ) ;
condv . put ( " COD " , m . get ( F_C_COD ) ) ;
break ;
case ' O ' : // riempie il resto della chiave delle offerte
condv . put ( " COD " , m . get ( F_O_COD ) ) ;
break ;
}
if ( condv . read ( ) = = NOERR ) { // se la lettura <20> andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata
TBit_array & _todisable = app ( ) . _todisable ; // vettore per la disabilitazione dei campi, ricavato dalla propriet<65> dell'applicazione
_todisable . reset ( ) ; // resetta il vettore dei campi da disabilitare
if ( ! condv . get_bool ( " GESTUM " ) ) _todisable . set ( F_LO_UM ) ; // mette nel vettore di dabilitazione il campo "unit<69> di misura" della maschera (campo chiave)
if ( ! condv . get_bool ( " GESTSCAGL " ) ) {
_todisable . set ( F_NSCAGL ) ; // mette nel vettore di dabilitazione il campo "n.ro scaglione" della maschera (campo chiave)
m . disable ( F_QLIM ) ; // disabilita il campo "quantit<69> limite scaglione"
}
if ( ! condv . get_bool ( " GESTSCO " ) ) {
m . disable ( F_SCONTO ) ; // disabilita il campo "sconto"
m . disable ( F_QOM ) ; // disabilita il campo "quantit<69> art. omaggio"
m . disable ( F_QBASE ) ; // disabilita il campo "quantit<69> base x sconto"
m . disable ( F_CODARTOM ) ; // disabilita il campo "codice articolo omaggio"
m . disable ( F_PROMAGGIO ) ; // disabilita il campo "prezzo omaggio"
m . disable ( F_UMOM ) ; // disabilita il campo "unit<69> di misura art. omaggio"
}
return TRUE ;
} else {
error_box ( " Non esiste una testata corrispondente alla chiave specificata " ) ;
return FALSE ;
}
} else return TRUE ;
}
int TRighe_condizioni_vendita : : write ( const TMask & m ) {
m . autosave ( _rel ) ; // scrive il contenuto della maschera nel record della relazione
if ( _rcondven ! = " C " ) { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile & f = _rel - > lfile ( ) ; // prende il file principale della relazione
TRectype & r = f . curr ( ) ; // prende il record corrente del file principale
f . zero ( " TIPOCF " ) ; // svuota il campo TIPOCF
}
_rel - > write ( ) ; // invoca la scrittura della relazione
return ( _rel - > status ( ) ) ; // ritorna lo stato della relazione
}
int TRighe_condizioni_vendita : : rewrite ( const TMask & m ) {
m . autosave ( _rel ) ; // scrive il contenuto della maschera nel record della relazione
if ( _rcondven ! = " C " ) { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile & f = _rel - > lfile ( ) ; // prende il file principale della relazione
TRectype & r = f . curr ( ) ; // prende il record corrente del file principale
f . zero ( " TIPOCF " ) ; // svuota il campo TIPOCF
}
_rel - > rewrite ( ) ; // invoca la riscrittura della relazione
return ( _rel - > status ( ) ) ; // ritorna lo stato della relazione
}
void TRighe_condizioni_vendita : : init_query_mode ( TMask & m ) {
for ( short i = ( short ) _tohide . first_one ( ) ; i < = ( short ) _tohide . last_one ( ) ; i + + ) { // ciclo sul vettore dei campi da eliminare
if ( _tohide [ i ] ) {
if ( _msk - > field ( i ) . is_edit ( ) ) _msk - > efield ( i ) . check_type ( CHECK_NONE ) ; // disabilita il checking sul campo se <20> editabile
_msk - > hide ( i ) ; // rende invisibile il campo
}
}
for ( i = ( short ) _todisable . first_one ( ) ; i < = ( short ) _todisable . last_one ( ) ; i + + ) { // ciclo sul vettore dei campi da disabilitare
if ( _todisable [ i ] ) {
if ( _msk - > field ( i ) . is_edit ( ) ) _msk - > efield ( i ) . check_type ( CHECK_NONE ) ; // disabilita il checking sul campo se <20> editabile
_msk - > disable ( i ) ; // disabilita il campo
}
}
_msk - > set ( F_TIPO , _rcondven ) ; // settaggio del campo di tipo archivio
}
int ve2300 ( int argc , char * argv [ ] ) {
TRighe_condizioni_vendita a ;
1995-08-07 07:59:09 +00:00
1995-08-24 13:51:57 +00:00
a . run ( argc , argv , " Righe condizioni vendita " ) ;
1995-08-07 07:59:09 +00:00
return 0 ;
}
1995-08-24 13:51:57 +00:00