1995-11-07 11:39:13 +00:00
# include <relapp.h>
# include <config.h>
# include "ve2300.h"
1996-03-07 17:43:51 +00:00
# include "veconf.h"
1995-11-07 11:39:13 +00:00
1996-05-03 17:11:39 +00:00
static void key_hide ( TMask & m , short id , int key = 1 )
{
( ( TEditable_field & ) m . field ( id ) ) . reset_key ( key ) ;
m . hide ( id ) ;
}
static void key_show ( TMask & m , short id , int key = 1 )
{
( ( TEditable_field & ) m . field ( id ) ) . reset_key ( key ) ;
m . show ( id ) ;
}
static void key_disable ( TMask & m , short id , int key = 1 )
{
( ( TEditable_field & ) m . field ( id ) ) . reset_key ( key ) ;
m . disable ( id ) ;
}
static void key_enable ( TMask & m , short id , int key = 1 )
{
( ( TEditable_field & ) m . field ( id ) ) . reset_key ( key ) ;
m . enable ( id ) ;
}
1995-11-07 11:39:13 +00:00
# define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
# define CREATE(x) { _msk->field(x).set_key(1); _msk->show(x); }
# define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
# define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); }
class TRighe_condizioni_vendita : public TRelation_application {
TMask * _msk ; // maschera principale
TRelation * _rel ; // relazione principale
TString16 _rcondven ; // stringa che indica il tipo di archivio
bool _codlis_catven ; // booleano di abilitazione del campo CATVEN
bool _codcon_codcf ; // booleano di abilitazioni dei campi TIPOCF e CODCF
1996-03-07 17:43:51 +00:00
bool _um ; // booleano di abilitazione locale delle unit<69> di misura
bool _gest_um , _gest_sca , _gest_so ; // variabili di abilitazione deunit<69> di misura, scaglioni e sconti/omaggi
1995-11-07 11:39:13 +00:00
virtual bool user_create ( ) ;
virtual bool user_destroy ( ) ;
virtual TMask * get_mask ( int ) { return _msk ; } // punto d'aggancio tra la maschera della rel.app. e la maschera principale dell'applicazione
virtual bool changing_mask ( int ) { return FALSE ; } // 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
virtual bool changing_keys ( ) const { return TRUE ; } // ritorna il flag di rigenerazione della lista delle chiavi ad ogni find(), in questa applicazione le chiavi cambiano continuamente quindi il flag <20> TRUE
virtual TRelation * get_relation ( ) const { return _rel ; } // punto d'aggancio tra la relazione della rel.app. e la relazione principale dell'applicazione
static void hide_and_show_codriga ( void ) ; // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
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
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 ( ) ;
}
bool TRighe_condizioni_vendita : : user_create ( ) {
bool gotcha = 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
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 " ) ;
TConfig prassid ( CONFIG_DITTA , " ve " ) ; // apre il file di configurazione della ditta corrente
switch ( _rcondven [ 0 ] ) {
case ' L ' : // listini
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , F_R_C_TIPOCF ) ; // settaggio dei campi da eliminare...
key_hide ( * _msk , F_R_C_CODCF ) ;
key_hide ( * _msk , F_R_C_COD ) ;
key_hide ( * _msk , F_R_O_COD ) ;
1995-11-07 11:39:13 +00:00
_msk - > hide ( F_R_C_DESCF ) ;
_msk - > hide ( F_R_C_DES ) ;
_msk - > hide ( F_R_O_DES ) ;
_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 ( " GESLISCV " ) ; // setta il booleano di abilitazione di CATVEN
1996-05-03 17:11:39 +00:00
if ( ! _codlis_catven ) key_disable ( * _msk , F_R_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
1995-11-07 11:39:13 +00:00
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
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , F_R_L_CATVEN ) ; // settaggio dei campi da eliminare...
key_hide ( * _msk , F_R_L_COD ) ;
key_hide ( * _msk , F_R_O_COD ) ;
1995-11-07 11:39:13 +00:00
_msk - > hide ( F_R_L_DESVEN ) ;
_msk - > hide ( F_R_L_DES ) ;
_msk - > hide ( F_R_O_DES ) ;
_msk - > hide ( F_R_L_RICERCA ) ;
_msk - > hide ( F_R_O_RICERCA ) ;
_msk - > hide ( F_R_O_ARTES ) ;
_codcon_codcf = prassid . get_bool ( " GESCONCC " ) ; // setta il booleano di abilitazione di TIPOCF e CODCF
if ( ! _codcon_codcf ) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config.
1996-05-03 17:11:39 +00:00
key_disable ( * _msk , F_R_C_TIPOCF ) ;
key_disable ( * _msk , F_R_C_CODCF ) ;
1995-11-07 11:39:13 +00:00
}
1996-05-03 17:11:39 +00:00
_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
1995-11-07 11:39:13 +00:00
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
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , F_R_L_CATVEN ) ; // settaggio dei campi da eliminare...
key_hide ( * _msk , F_R_C_TIPOCF ) ;
key_hide ( * _msk , F_R_C_CODCF ) ;
key_hide ( * _msk , F_R_L_COD ) ;
key_hide ( * _msk , F_R_C_COD ) ;
1995-11-07 11:39:13 +00:00
_msk - > hide ( F_R_C_DESCF ) ;
_msk - > hide ( F_R_L_DESVEN ) ;
_msk - > hide ( F_R_L_DES ) ;
_msk - > hide ( F_R_C_DES ) ;
_msk - > hide ( F_R_L_RICERCA ) ;
_msk - > hide ( F_R_C_RICERCA ) ;
1996-05-03 17:11:39 +00:00
_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
1995-11-07 11:39:13 +00:00
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 = new TRelation ( 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
1996-05-03 17:11:39 +00:00
_um = _gest_um ; // abilita le unit<69> di misura in base alla configurazione
1995-11-07 11:39:13 +00:00
hide_and_show_codriga ( ) ; // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
}
return ( gotcha ) ;
}
bool TRighe_condizioni_vendita : : user_destroy ( ) {
delete _rel ;
delete _msk ;
return TRUE ;
}
void TRighe_condizioni_vendita : : hide_and_show_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...
short id_campi_1 [ 4 ] = { F_R_CODRIGA_A , F_R_CODRIGA_G , F_R_CODRIGA_S , F_R_CODRIGA_R } ; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
short id_campi_2 [ 4 ] = { F_R_DESRIGA_A , F_R_DESRIGA_G , F_R_DESRIGA_S , F_R_DESRIGA_R } ; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
char tag_campi [ 4 ] = { ' A ' , ' G ' , ' S ' , ' R ' } ; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
1996-03-07 17:43:51 +00:00
bool & _um = app ( ) . _um ; // prende il riferimento al booleano di abilitazione locale delle unit<69> di misura
1995-11-07 11:39:13 +00:00
TString & _rcondven = app ( ) . _rcondven ; // prende il riferimento alla stringa di tipo di archivio
char tag_campo = toupper ( _msk - > get ( F_R_TIPORIGA ) [ 0 ] ) ; // prende il tag del campo da abilitare in TIPORIGA
for ( int i = 0 ; i < 4 ; i + + ) { // ciclo sui quattro campi CODRIGA
if ( tag_campo = = tag_campi [ i ] ) { // il campo indicato con il tag viene reso visibile
1996-05-03 17:11:39 +00:00
key_show ( * _msk , id_campi_1 [ i ] ) ;
1995-11-07 11:39:13 +00:00
_msk - > show ( id_campi_2 [ i ] ) ;
} else { // i campi non corrispondenti al tag vengono resi invisibili
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , id_campi_1 [ i ] ) ;
1995-11-07 11:39:13 +00:00
_msk - > hide ( id_campi_2 [ i ] ) ;
}
}
1996-05-03 17:11:39 +00:00
if ( _um & & ( tag_campo = = ' A ' ) ) { key_enable ( * _msk , F_R_UM ) ; } // se la gest. delle u.m. <20> abilitata, il campo viene attivato se la riga <20> un articolo...
else { key_disable ( * _msk , F_R_UM ) ; } // ...altrimenti viene disattivato
1995-11-07 11:39:13 +00:00
}
}
bool TRighe_condizioni_vendita : : handle_tiporiga ( TMask_field & fld , KEY k ) {
if ( k = = K_SPACE ) hide_and_show_codriga ( ) ; // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
return TRUE ;
}
bool TRighe_condizioni_vendita : : handle_cod ( TMask_field & fld , KEY k ) {
if ( ( k = = K_TAB ) & & fld . get ( ) . not_empty ( ) ) {
bool & _gest_um = app ( ) . _gest_um ; // prende il riferimento al booleano di abilitazione delle unit<69> di misura
1996-03-07 17:43:51 +00:00
bool & _gest_so = app ( ) . _gest_so ; // prende il riferimento al booleano di abilitazione degli sconti/omaggi
bool & _gest_sca = app ( ) . _gest_sca ; // prende il riferimento al booleano di abilitazione degli scaglioni
bool & _um = app ( ) . _um ; // prende il riferimento al booleano di abilitazione locale delle unit<69> di misura
1995-11-07 11:39:13 +00:00
TString & _rcondven = app ( ) . _rcondven ; // prende il riferimento alla stringa di indicazione del tipo di archivio
TMask * _msk = app ( ) . _msk ; // prende il puntatore alla maschera principale dell'applicazione
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 " , _msk - > get ( F_R_L_CATVEN ) ) ;
condv . put ( " COD " , _msk - > get ( F_R_L_COD ) ) ;
break ;
case ' C ' : // riempie il resto della chiave dei contratti
condv . put ( " TIPOCF " , _msk - > get ( F_R_C_TIPOCF ) ) ;
condv . put ( " CODCF " , _msk - > get ( F_R_C_CODCF ) ) ;
condv . put ( " COD " , _msk - > get ( F_R_C_COD ) ) ;
break ;
case ' O ' : // riempie il resto della chiave delle offerte
condv . put ( " COD " , _msk - > get ( F_R_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
1996-03-07 17:43:51 +00:00
if ( _gest_um ) _um = condv . get_bool ( " GESTUM " ) ; // legge lo stato di abilitazione della gestione delle unit<69> di misura
1995-11-07 11:39:13 +00:00
hide_and_show_codriga ( ) ; // lancia la funzione che si occupa di abilitare/disabilitare il campo "unit<69> di misura"
1996-03-07 17:43:51 +00:00
if ( _gest_sca & & condv . get_bool ( " GESTSCAGL " ) ) {
1996-05-03 17:11:39 +00:00
key_enable ( * _msk , F_R_NSCAGL ) ; // abilita il campo "numero scaglione"
1995-11-07 11:39:13 +00:00
_msk - > enable ( F_R_QLIM ) ; // abilita il campo "quantit<69> limite scaglione"
1996-03-07 17:43:51 +00:00
} else {
1996-05-03 17:11:39 +00:00
key_disable ( * _msk , F_R_NSCAGL ) ; // disabilita il campo "numero scaglione"
1996-03-07 17:43:51 +00:00
_msk - > disable ( F_R_QLIM ) ; // disabilita il campo "quantit<69> limite scaglione"
1995-11-07 11:39:13 +00:00
}
1996-03-07 17:43:51 +00:00
if ( condv . get_bool ( " SCONST " ) | | ( _gest_um & & condv . get_bool ( " GESTSCO " ) ) ) _msk - > enable ( F_R_SCONTO ) ; // abilita il campo "sconto"
1996-05-03 17:11:39 +00:00
else _msk - > disable ( F_R_SCONTO ) ; // disabilita il campo "sconto"
1996-03-07 17:43:51 +00:00
if ( _gest_so & & condv . get_bool ( " GESTSCO " ) ) {
_msk - > enable ( F_R_QOM ) ; // abilita il campo "quantit<69> art. omaggio"
_msk - > enable ( F_R_QBASE ) ; // abilita il campo "quantit<69> base x sconto"
_msk - > enable ( F_R_CODARTOM ) ; // abilita il campo "codice articolo omaggio"
_msk - > enable ( F_R_PROMAGGIO ) ; // abilita il campo "prezzo omaggio"
if ( _gest_um ) _msk - > enable ( F_R_UMOM ) ; // abilita il campo "unit<69> di misura art. omaggio"
} else {
1995-11-07 11:39:13 +00:00
_msk - > disable ( F_R_QOM ) ; // disabilita il campo "quantit<69> art. omaggio"
_msk - > disable ( F_R_QBASE ) ; // disabilita il campo "quantit<69> base x sconto"
_msk - > disable ( F_R_CODARTOM ) ; // disabilita il campo "codice articolo omaggio"
_msk - > disable ( F_R_PROMAGGIO ) ; // disabilita il campo "prezzo omaggio"
_msk - > disable ( F_R_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 ) {
1996-05-03 17:11:39 +00:00
m . autosave ( * _rel ) ; // scrive il contenuto della maschera nel record della relazione
1995-11-07 11:39:13 +00:00
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 ) {
1996-05-03 17:11:39 +00:00
m . autosave ( * _rel ) ; // scrive il contenuto della maschera nel record della relazione
1995-11-07 11:39:13 +00:00
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
}
int ve2300 ( int argc , char * argv [ ] ) {
TRighe_condizioni_vendita a ;
a . run ( argc , argv , " Righe condizioni vendita " ) ;
return 0 ;
}