2000-10-03 13:45:12 +00:00
# include <automask.h>
1995-09-25 15:36:30 +00:00
# include <config.h>
2007-03-07 11:36:57 +00:00
# include <expr.h>
1995-09-25 15:36:30 +00:00
# include <execp.h>
2000-10-03 13:45:12 +00:00
# include <mailbox.h>
# include <progind.h>
# include <relapp.h>
2007-03-07 11:36:57 +00:00
# include <recarray.h>
2010-10-04 14:02:18 +00:00
# include <recset.h>
2000-10-03 13:45:12 +00:00
# include <tabutil.h>
1995-09-25 15:36:30 +00:00
# include <utility.h>
# include "ve2200.h"
# include "ve2300x.h" // include anche il file dei campi della maschera delle righe
# include "veconf.h"
2004-03-17 14:07:27 +00:00
# include "condv.h"
# include "rcondv.h"
# include "../mg/umart.h"
1995-09-25 15:36:30 +00:00
1998-05-04 09:54:49 +00:00
// nome dell'applicazione di gestione delle righe
# define RCONDVEN_APP "ve2 -2 "
1995-09-25 15:36:30 +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 ) ;
}
1995-09-25 15:36:30 +00:00
1996-05-03 17:11:39 +00:00
static void key_disable ( TMask & m , short id , int key = 1 )
{
( ( TEditable_field & ) m . field ( id ) ) . reset_key ( key ) ;
m . disable ( id ) ;
}
1995-09-25 15:36:30 +00:00
2004-03-17 14:07:27 +00:00
class TCondizioni_vendita : public TRelation_application
{
1996-05-03 17:11:39 +00:00
TMask * _msk ; // maschera principale
TRelation * _rel ; // relazione principale
1995-09-25 15:36:30 +00:00
1996-05-03 17:11:39 +00:00
TString16 _condven ; // stringa che indica il tipo di archivio
TBit_array _tohide ; // vettore degli identificatori di campi che devono essere nascosti
1995-09-25 15:36:30 +00:00
bool _codlis_catven ; // booleano di abilitazione della categoria di vendita nella chiave dei listini
1996-05-03 17:11:39 +00:00
bool _codcon_codcf ; // booleano di abilitazioni dei campi TIPOCF e CODCF
1995-09-25 15:36:30 +00:00
bool _gest_val , _gest_um , _gest_sca , _gest_so ; // booleani per l'abilitazione di valute, unit<69> di misura, scaglioni e sconti/omaggi
2011-03-31 00:04:32 +00:00
virtual bool has_filtered_cursor ( ) const { return _condven . full ( ) ; }
virtual bool user_create ( ) ;
1996-05-03 17:11:39 +00:00
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 ; }
1995-09-25 15:36:30 +00:00
1996-05-03 17:11:39 +00:00
static bool handle_mask ( TMask & , KEY ) ; // handler custom della maschera (per il tasto di aggancio alle righe)
static bool handle_datacam ( TMask_field & , KEY ) ; // handler del campo DATACAM (data cambio)
static bool handle_valfin ( TMask_field & , KEY ) ; // handler del campo VALFIN (data fine validit<69> )
static bool handle_codsucc ( TMask_field & , KEY ) ; // handler del campo CODSUCC (codice successivo)
2000-10-03 13:45:12 +00:00
static bool handle_copy ( TMask_field & , KEY ) ; // handler del bottone copia
1995-09-25 15:36:30 +00:00
2000-10-03 13:45:12 +00:00
virtual void init_query_mode ( TMask & m ) ;
virtual void init_insert_mode ( TMask & m ) ;
virtual void init_modify_mode ( TMask & m ) ;
1996-08-08 17:22:33 +00:00
virtual int read ( TMask & ) ; // metodo usato per leggere il record dal file
1996-05-03 17:11:39 +00:00
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 bool remove ( ) ; // metodo usato per cancellare il record sul file
2010-10-04 14:02:18 +00:00
virtual void mask2ini ( const TMask & m , TConfig & ini ) ;
1995-09-25 15:36:30 +00:00
public :
2002-02-26 16:20:19 +00:00
bool codlis_catven ( ) { return _codlis_catven ; }
1998-01-23 09:57:34 +00:00
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization ( ) const { return FALSE ; }
1996-05-03 17:11:39 +00:00
TCondizioni_vendita ( ) { }
virtual ~ TCondizioni_vendita ( ) { }
1995-09-25 15:36:30 +00:00
} ;
2000-10-03 13:45:12 +00:00
class TMask_copy : public TAutomask
{
public :
virtual bool on_field_event ( TOperable_field & o , TField_event e , long jolly ) ;
2002-02-26 16:20:19 +00:00
TMask_copy ( const TMask & m , const bool enable_catven ) ;
2000-10-03 13:45:12 +00:00
} ;
1995-09-25 15:36:30 +00:00
2000-10-03 13:45:12 +00:00
bool TMask_copy : : on_field_event ( TOperable_field & o , TField_event e , long jolly )
{
return TRUE ;
}
2002-02-26 16:20:19 +00:00
TMask_copy : : TMask_copy ( const TMask & m , const bool enable_catven ) : TAutomask ( " ve2200c " )
2000-10-03 13:45:12 +00:00
{
2002-02-26 16:20:19 +00:00
enable ( F_L_CATVEN , enable_catven ) ;
2000-10-03 13:45:12 +00:00
set ( F_TIPO , m . get ( F_TIPO ) ) ;
}
2004-04-28 22:04:10 +00:00
static TCondizioni_vendita & app ( )
2004-03-17 14:07:27 +00:00
{ // funzione che ritorna il riferimento alla classe principale dell'applicazione
1995-09-25 15:36:30 +00:00
return ( TCondizioni_vendita & ) main_app ( ) ;
}
2000-10-03 13:45:12 +00:00
void TCondizioni_vendita : : init_query_mode ( TMask & m )
{
m . disable ( BTN_RIGHE ) ;
m . disable ( BTN_COPIA ) ;
}
void TCondizioni_vendita : : init_insert_mode ( TMask & m )
{
init_query_mode ( m ) ;
}
void TCondizioni_vendita : : init_modify_mode ( TMask & m )
{
m . enable ( BTN_RIGHE ) ;
m . enable ( BTN_COPIA ) ;
}
2001-07-24 13:28:55 +00:00
bool TCondizioni_vendita : : user_create ( )
{
1996-05-03 17:11:39 +00:00
bool gotcha = FALSE ; // booleano di avvenuta inizializzazione
_condven = " * " ; // inizializzazione dell'indicatore del tipo di archivio
2001-09-19 14:52:11 +00:00
2001-07-24 13:28:55 +00:00
if ( argc ( ) > 2 )
{
TFilename trans = argv ( 2 ) ;
if ( trans . len ( ) = = 1 )
_condven = trans ;
else
{
trans . ltrim ( 2 ) ;
if ( trans . exist ( ) )
{
TConfig ini ( trans , " 52 " ) ;
_condven = ini . get ( " TIPO " ) ;
}
}
}
if ( _condven = = " * " )
{
2003-07-01 11:17:17 +00:00
TMask choose ( " ve2200 " ) ; // istanzia la maschera di scelta del tipo di archivio
2001-07-24 13:28:55 +00:00
if ( choose . run ( ) = = K_ENTER )
_condven = choose . get ( F_TIPOCV ) ; // prende il tipo di archivio dalla maschera
1996-05-03 17:11:39 +00:00
}
_condven . upper ( ) ; // rende la stringa upper-case
_msk = new TMask ( " VE2200X " ) ;
TConfig prassid ( CONFIG_DITTA , " ve " ) ; // apre il file di configurazione della ditta corrente
switch ( _condven [ 0 ] ) {
case ' L ' : { // listini
2003-07-01 11:17:17 +00:00
if ( prassid . get_bool ( " GES " , NULL , A_LISTINI ) ) // controlla che l'archivio listini sia abilitato
{
1996-05-03 17:11:39 +00:00
// eliminazione campi di altri archivi
1996-06-27 09:39:03 +00:00
_msk - > set_caption ( " Archivio listini " ) ;
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , F_C_COD ) ;
key_hide ( * _msk , F_O_COD ) ;
key_hide ( * _msk , F_C_TIPOCF ) ;
key_hide ( * _msk , F_C_CODCF ) ;
key_hide ( * _msk , F_C_OBBLIG ) ;
key_hide ( * _msk , F_C_DESCF ) ;
set_search_field ( F_L_COD ) ; // impostazione del campo di ricerca
_msk - > set_handler ( F_L_CODSUCC , handle_codsucc ) ; // setta l'handler per il campo di codice successivo
_codlis_catven = prassid . get_bool ( " GESLISCV " ) ; // setta il booleano di abilitazione delle categoria di vendita
if ( ! _codlis_catven ) key_disable ( * _msk , 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 ;
}
2003-07-01 11:17:17 +00:00
else
error_box ( " L'archivio Listini non <20> abilititato " ) ;
1996-05-03 17:11:39 +00:00
break ;
}
case ' C ' : // contratti
2004-11-30 22:02:59 +00:00
if ( prassid . get_bool ( " GES " , NULL , A_CONTRATTI ) ) // controlla che l'archivio contratti sia abilitato
2003-07-01 11:17:17 +00:00
{
1996-05-03 17:11:39 +00:00
// settaggio dei campi da eliminare
1996-06-27 09:39:03 +00:00
_msk - > set_caption ( " Archivio contratti " ) ;
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , F_L_COD ) ;
key_hide ( * _msk , F_O_COD ) ;
key_hide ( * _msk , F_L_CATVEN ) ;
key_hide ( * _msk , F_L_DESVEN ) ;
key_hide ( * _msk , F_L_CODSUCC ) ;
key_hide ( * _msk , F_L_DESSUCC ) ;
_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.
key_disable ( * _msk , F_C_TIPOCF ) ;
1996-08-08 17:22:33 +00:00
TList_field & l = ( TList_field & ) _msk - > field ( F_C_TIPOCF ) ;
l . replace_items ( " | " , " | " ) ;
1996-05-03 17:11:39 +00:00
key_disable ( * _msk , F_C_CODCF ) ;
}
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 ;
}
2003-07-01 11:17:17 +00:00
else
error_box ( " L'archivio Contratti non <20> abilititato " ) ;
1996-05-03 17:11:39 +00:00
break ;
case ' O ' : // offerte
2004-11-30 22:02:59 +00:00
if ( prassid . get_bool ( " GES " , NULL , A_OFFERTE ) ) // controlla che l'archivio offerte sia abilitato
2003-07-01 11:17:17 +00:00
{
1996-05-03 17:11:39 +00:00
// settaggio dei campi da eliminare
1996-06-27 09:39:03 +00:00
_msk - > set_caption ( " Archivio offerte " ) ;
1996-05-03 17:11:39 +00:00
key_hide ( * _msk , F_L_COD ) ;
key_hide ( * _msk , F_C_COD ) ;
key_hide ( * _msk , F_L_CATVEN ) ;
key_hide ( * _msk , F_C_TIPOCF ) ;
key_hide ( * _msk , F_C_CODCF ) ;
key_hide ( * _msk , F_C_DESCF ) ;
key_hide ( * _msk , F_L_DESVEN ) ;
key_hide ( * _msk , F_C_OBBLIG ) ;
key_hide ( * _msk , F_L_CODSUCC ) ;
key_hide ( * _msk , F_L_DESSUCC ) ;
set_search_field ( F_O_COD ) ; // impostazione del campo di ricerca
_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 ;
}
2003-07-01 11:17:17 +00:00
else
error_box ( " L'archivio Offerte non <20> abilititato " ) ;
1996-05-03 17:11:39 +00:00
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_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>
2000-10-03 13:45:12 +00:00
_msk - > set_handler ( BTN_COPIA , handle_copy ) ; // imposta l'handler per il bottone Copia
1996-05-03 17:11:39 +00:00
if ( ! _gest_um ) _msk - > disable ( F_GESTUM ) ; // disabilita condizionalmente il booleano di gestione delle unit<69> di misura
1998-11-04 18:04:26 +00:00
if ( ! _gest_sca )
{
_msk - > disable ( F_GESTSCAGL ) ; // disabilita condizionalmente il booleano di gestione degli scaglioni
_msk - > disable ( F_DECIMALI ) ; // disabilita il numero di decimali significativi in qta limite scaglione
}
1996-05-03 17:11:39 +00:00
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
_msk - > disable ( F_CODVAL ) ;
_msk - > disable ( F_CAMBIO ) ;
_msk - > disable ( F_DATACAM ) ;
}
}
2003-07-01 11:17:17 +00:00
return gotcha ;
1995-09-25 15:36:30 +00:00
}
2004-03-17 14:07:27 +00:00
bool TCondizioni_vendita : : user_destroy ( )
{
1995-09-25 15:36:30 +00:00
delete _rel ;
delete _msk ;
return TRUE ;
}
2004-03-17 14:07:27 +00:00
bool TCondizioni_vendita : : handle_mask ( TMask & m , KEY k )
{
1996-05-03 17:11:39 +00:00
if ( k = = K_F5 ) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing
TString & _condven = app ( ) . _condven ; // prende l'indicatore del tipo di archivio
bool & _codlis_catven = app ( ) . _codlis_catven ; // prende il booleano di attivazione del campo CATVEN
TString appname ( RCONDVEN_APP ) ; // istanzia e inizializza la stringa con il nome dell'applicazione da lanciare
TString body ; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera)
switch ( _condven [ 0 ] ) {
case ' L ' : // listini
body < < F_R_L_RICERCA < < " | " ; // appende l'id del campo di ricerca
body < < F_R_TIPO < < " = " < < _condven < < " | " ; // appende il filtro sul tipo
body < < F_R_L_CATVEN < < " = " < < ( ( _codlis_catven ) ? ( m . get ( F_L_CATVEN ) ) : ( " " ) ) < < " | " ; // appende il filtro sulla categoria di vendita
body < < F_R_L_COD < < " = " < < m . get ( F_L_COD ) ; // appende il filtro sul campo codice
break ;
case ' C ' : // contratti
body < < F_R_C_RICERCA < < " | " ; // appende l'id del campo di ricerca
body < < F_R_TIPO < < " = " < < _condven < < " | " ; // appende il filtro sul tipo
body < < F_R_C_TIPOCF < < " = " < < m . get ( F_C_TIPOCF ) < < " | " ; // appende il filtro sul campo tipo cliente/fornitore
body < < F_R_C_CODCF < < " = " < < m . get ( F_C_CODCF ) < < " | " ; // appende il filtro sul campo codice cliente/fornitore
body < < F_R_C_COD < < " = " < < m . get ( F_C_COD ) ; // appende il filtro sul campo codice
break ;
case ' O ' : // offerte
body < < F_R_O_RICERCA < < " | " ; // appende l'id del campo di ricerca
body < < F_R_TIPO < < " = " < < _condven < < " | " ; // appende il filtro sul tipo
body < < F_R_O_COD < < " = " < < m . get ( F_O_COD ) ; // appende il filtro sul campo codice
break ;
}
appname < < _condven ; // aggiunge al lancio dell'applicazione la selezione del tipo di archivio
TMessage msg ( cmd2name ( appname ) , MSG_FS , ( const char * ) body ) ; // istanzia il messaggio per l'applicazione
msg . send ( ) ; // invia il messaggio all'applicazione
TExternal_app ve2_2 ( appname ) ; // istanzia l'applicazione esterna...
ve2_2 . run ( ) ; // ...la lancia e rimane in attesa del suo termine
}
return TRUE ;
1995-09-25 15:36:30 +00:00
}
2004-03-17 14:07:27 +00:00
bool TCondizioni_vendita : : handle_datacam ( TMask_field & fld , KEY k )
{
if ( k = = K_TAB )
{ // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
1996-05-03 17:11:39 +00:00
TString datacam ( fld . get ( ) ) ; // legge la data di cambio nel campo corrente
if ( datacam . not_empty ( ) ) {
TMask & m = fld . mask ( ) ; // prende la maschera principale
TString codval ( m . get ( F_CODVAL ) ) ; // prende il codice della valuta
if ( codval . not_empty ( ) ) {
TTable cam ( " CAM " ) ; // apre la tabella cambi
cam . put ( " CODTAB " , codval < < datacam ) ; // riempie la chiave
if ( cam . read ( ) = = NOERR ) m . set ( F_CAMBIO , cam . get ( " R10 " ) ) ; // se la lettura riesce il valore del cambio viene posto nel campo CAMBIO della maschera
}
}
}
return TRUE ;
1995-09-25 15:36:30 +00:00
}
2004-03-17 14:07:27 +00:00
bool TCondizioni_vendita : : handle_valfin ( TMask_field & fld , KEY k )
{
if ( k = = K_TAB )
{
if ( fld . get ( ) . not_empty ( ) )
{
1996-05-03 17:11:39 +00:00
TMask & m = fld . mask ( ) ; // prende la maschera principale
2004-03-17 14:07:27 +00:00
if ( m . get ( F_VALIN ) . not_empty ( ) )
{
1996-05-03 17:11:39 +00:00
TDate valfin ( fld . get ( ) ) ; // prende la data di fine validit<69>
TDate valin ( m . get ( F_VALIN ) ) ; // prende la data di inizio validit<69>
2004-03-17 14:07:27 +00:00
if ( valfin < valin )
return error_box ( " La data di inizio validit<69> deve essere minore della data di fine " ) ;
1996-05-03 17:11:39 +00:00
}
}
}
return TRUE ;
1995-09-25 15:36:30 +00:00
}
2004-03-17 14:07:27 +00:00
bool TCondizioni_vendita : : handle_codsucc ( TMask_field & fld , KEY k )
{
if ( k = = K_TAB )
{
1996-05-03 17:11:39 +00:00
TString & _condven = app ( ) . _condven ; // prende il tipo di archivio dall'applicazione principale
TString codsucc ( fld . get ( ) ) ; // prende il codice successivo dal campo corrente
2004-03-17 14:07:27 +00:00
if ( codsucc . not_empty ( ) )
{
1996-05-03 17:11:39 +00:00
TMask & m = fld . mask ( ) ; // prende la maschera principale
TString cod ; // istanzia la stringa per il codice corrente
2004-03-17 14:07:27 +00:00
switch ( _condven [ 0 ] )
{
1996-05-03 17:11:39 +00:00
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
}
2004-03-17 14:07:27 +00:00
if ( codsucc = = cod )
return error_box ( " Il codice successivo deve essere diverso dal codice corrente " ) ;
1996-05-03 17:11:39 +00:00
}
}
return TRUE ;
1995-09-25 15:36:30 +00:00
}
2004-03-17 14:07:27 +00:00
int TCondizioni_vendita : : read ( TMask & m )
{
1996-08-08 17:22:33 +00:00
m . enable ( BTN_RIGHE ) ;
return ( TRelation_application : : read ( m ) ) ;
}
2004-03-17 14:07:27 +00:00
int TCondizioni_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
TLocalisamfile & f = _rel - > lfile ( ) ; // prende il file principale della relazione
2004-03-17 14:07:27 +00:00
if ( _condven ! = " C " )
f . zero ( " TIPOCF " ) ; // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
1995-09-25 15:36:30 +00:00
_rel - > write ( ) ; // invoca la scrittura della relazione
return ( _rel - > status ( ) ) ; // ritorna lo stato della relazione
}
2004-03-17 14:07:27 +00:00
int TCondizioni_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
TLocalisamfile & f = _rel - > lfile ( ) ; // prende il file principale della relazione
2004-03-17 14:07:27 +00:00
if ( _condven ! = " C " )
f . zero ( " TIPOCF " ) ; // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
1995-09-25 15:36:30 +00:00
_rel - > rewrite ( ) ; // invoca la riscrittura della relazione
return ( _rel - > status ( ) ) ; // ritorna lo stato della relazione
}
2004-03-17 14:07:27 +00:00
bool TCondizioni_vendita : : remove ( )
{
1996-05-03 17:11:39 +00:00
TLocalisamfile & condv = _rel - > lfile ( ) ; // prende il file della testata dalla relazione principale
1995-09-25 15:36:30 +00:00
TLocalisamfile rcondv ( LF_RCONDV ) ; // apre il file delle righe per ottenenre il record corrente
TRectype delrec ( rcondv . curr ( ) ) ; // istanzia il record basato sul file delle righe, da usare come campione
delrec . zero ( ) ; // svuota il record campione
2004-03-17 14:07:27 +00:00
delrec . put ( RCONDV_TIPO , _condven ) ; // setta il tipo di archivio
delrec . put ( RCONDV_COD , condv . get ( " COD " ) ) ; // setta il codice della testata
if ( ( _condven = = " L " ) & & _codlis_catven )
delrec . put ( RCONDV_CATVEN , condv . get ( CONDV_CATVEN ) ) ; // setta la categoria di vendita se <20> abilitata e siamo nei listini
if ( _condven = = " C " )
{
delrec . put ( RCONDV_TIPOCF , condv . get ( CONDV_TIPOCF ) ) ; // setta i dati del cliente/fornitore se siamo nei contratti
delrec . put ( RCONDV_CODCF , condv . get ( CONDV_CODCF ) ) ;
1996-05-03 17:11:39 +00:00
}
1995-09-25 15:36:30 +00:00
TRelation delrel ( LF_RCONDV ) ; // istanzia una relazione sulle righe
TCursor delcur ( & delrel , " " , 1 , & delrec , & delrec ) ; // istanzia il cursore di cancellazione sulla relazione delle righe
long n = delcur . items ( ) ; // legge il numero di elementi del cursore
delcur . freeze ( ) ; // congela il cursore al suo stato attuale
bool proceed = FALSE ; // istanzia il booleano di conferma alla cancellazione
2004-03-17 14:07:27 +00:00
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
1996-05-03 17:11:39 +00:00
TLocalisamfile & delfile = delcur . file ( ) ; // prende riferimento al file delle righe dal cursore
2004-03-17 14:07:27 +00:00
for ( delcur = 0 ; delcur . pos ( ) < n ; + + delcur )
delfile . remove ( ) ; // ciclo sugli elementi del cursore, cancella i record del file delle righe
1996-06-27 09:39:03 +00:00
}
1996-05-03 17:11:39 +00:00
return ( TRelation_application : : remove ( ) ) ; // viene invocata la funzione standard di cancellazione del record corrente
1995-09-25 15:36:30 +00:00
}
2010-10-04 14:02:18 +00:00
void TCondizioni_vendita : : mask2ini ( const TMask & m , TConfig & ini )
{
TRelation_application : : mask2ini ( m , ini ) ;
TString query ;
query < < " USE RCONDV " ;
query < < " \n FROM TIPO=#TIPO CATVEN=#CATVEN TIPOCF=#TCF CODCF=#CODCF COD=#COD " ;
query < < " \n TO TIPO=#TIPO CATVEN=#CATVEN TIPOCF=#TCF CODCF=#CODCF COD=#COD " ;
TISAM_recordset rcondv ( query ) ;
const TString & tipo = m . get ( CONDV_TIPO ) ;
rcondv . set_var ( " #TIPO " , tipo ) ;
if ( tipo = = " L " )
rcondv . set_var ( " #CATVEN " , m . get ( CONDV_CATVEN ) ) ;
else
rcondv . set_var ( " #CATVEN " , " " ) ;
if ( tipo = = " C " )
{
rcondv . set_var ( " #TCF " , m . get ( CONDV_TIPOCF ) ) ;
rcondv . set_var ( " #CODCF " , m . get ( CONDV_CODCF ) ) ;
}
else
{
rcondv . set_var ( " #TCF " , " " ) ;
rcondv . set_var ( " #CODCF " , " " ) ;
}
rcondv . set_var ( " #COD " , m . get ( CONDV_COD ) ) ;
const long items = rcondv . items ( ) ;
TString16 paragraph ;
int j = 0 ;
for ( bool ok = rcondv . move_first ( ) ; ok ; ok = rcondv . move_next ( ) )
{
paragraph . format ( " %d,%d " , LF_RCONDV , + + j ) ;
ini . set_paragraph ( paragraph ) ;
const TRectype & rec = rcondv . cursor ( ) - > curr ( ) ;
const int nfields = rec . items ( ) ;
for ( int i = 0 ; i < nfields ; i + + )
{
const char * field_name = rec . fieldname ( i ) ;
ini . set ( field_name , rec . get ( field_name ) ) ;
}
}
}
2000-10-03 13:45:12 +00:00
bool TCondizioni_vendita : : handle_copy ( TMask_field & b , KEY k )
{
if ( k = = K_SPACE )
{
2004-03-17 14:07:27 +00:00
TMask & msk = b . mask ( ) ; //maschera principale
2002-02-26 16:20:19 +00:00
TMask_copy m ( msk , app ( ) . codlis_catven ( ) ) ; // gli passo la maschera del bottone copia (cio<69> la maschera principale ve2200x)
2000-10-03 13:45:12 +00:00
if ( m . run ( ) = = K_ENTER )
{
TRelation rel ( LF_RCONDV ) ; // creo un relazione sul file delle righe delle condizioni di vendita
2004-03-17 14:07:27 +00:00
TRectype & rec = rel . curr ( ) ; // creo il record che usa nel filtro; case in base al tipo documentovendita
2000-10-03 13:45:12 +00:00
rec . put ( " TIPO " , m . get ( F_TIPO ) ) ;
2007-03-07 11:36:57 +00:00
rel . add ( LF_ANAMAG , " CODART==CODRIGA " ) ;
2000-10-03 13:45:12 +00:00
TString16 newcode ; //var stringa in cui mettere il nuovo codice del listino/contratto/offerta
2004-11-30 22:02:59 +00:00
const bool overwrite = m . get_bool ( F_OVERWRITE ) ; //deve sovrascrivere le righe doc gia' esistenti?
2007-03-07 11:36:57 +00:00
const TString & source = m . get ( F_PERC ) ;
const bool multiply = source . full ( ) ;
TExpression e ( source ) ;
TArray v ;
2004-03-17 14:07:27 +00:00
const char tipo = m . get ( F_TIPO ) [ 0 ] ;
2007-03-07 11:36:57 +00:00
for ( int i = 0 ; i < e . numvar ( ) ; i + + )
{
const TString name ( e . varname ( i ) ) ;
v . add ( new TFieldref ( name , 0 ) ) ;
}
switch ( tipo )
2000-10-03 13:45:12 +00:00
{
2003-07-01 11:17:17 +00:00
case ' L ' :
2004-03-17 14:07:27 +00:00
rec . put ( RCONDV_CATVEN , m . get ( F_L_CATVEN ) ) ;
rec . put ( RCONDV_COD , m . get ( F_L_COD ) ) ;
2000-10-03 13:45:12 +00:00
newcode = msk . get ( F_L_COD ) ;
break ;
2003-07-01 11:17:17 +00:00
case ' C ' :
2004-03-17 14:07:27 +00:00
rec . put ( RCONDV_TIPOCF , m . get ( F_C_TIPOCF ) ) ;
rec . put ( RCONDV_CODCF , m . get ( F_C_CODCF ) ) ;
rec . put ( RCONDV_COD , m . get ( F_C_COD ) ) ;
2000-10-03 13:45:12 +00:00
newcode = msk . get ( F_C_COD ) ;
break ;
2003-07-01 11:17:17 +00:00
case ' O ' :
2004-03-17 14:07:27 +00:00
rec . put ( RCONDV_COD , m . get ( F_O_COD ) ) ;
2000-10-03 13:45:12 +00:00
newcode = msk . get ( F_O_COD ) ;
break ;
2007-03-07 11:36:57 +00:00
default :
2003-07-01 11:17:17 +00:00
break ;
2000-10-03 13:45:12 +00:00
}
2004-03-17 14:07:27 +00:00
if ( tipo = = ' L ' & & m . get ( F_L_COD ) . blank ( ) ) //genera listino da umart
{
TRelation rel_umart ( LF_UMART ) ; //relazione su umart da cui prendo codici e prezzi
TRectype & rec_umart = rel_umart . curr ( ) ;
2004-03-17 14:47:22 +00:00
TString filtro ;
2004-11-30 22:02:59 +00:00
const bool gestum = msk . get_bool ( F_GESTUM ) ;
const bool gestscagl = msk . get_bool ( F_GESTSCAGL ) ;
2007-03-07 11:36:57 +00:00
rel_umart . add ( LF_ANAMAG , " CODART==CODART " ) ;
2004-11-30 22:02:59 +00:00
if ( ! gestum )
2004-03-17 14:47:22 +00:00
filtro = " NRIGA==1 " ;
2007-03-07 11:36:57 +00:00
TRectype from ( LF_UMART ) ;
TRectype to ( LF_UMART ) ;
2007-12-13 15:47:12 +00:00
const TString & codf = m . get ( F_FROMCOD ) ;
if ( codf . full ( ) )
from . put ( UMART_CODART , codf ) ;
const TString & codt = m . get ( F_TOCOD ) ;
if ( codt . full ( ) )
to . put ( UMART_CODART , codt ) ;
2007-03-07 11:36:57 +00:00
TCursor curs ( & rel_umart , filtro , 1 , from . empty ( ) ? NULL : & from , to . empty ( ) ? NULL : & to ) ;
2004-03-17 14:07:27 +00:00
const long items = curs . items ( ) ; // metto in items il numero di elementi del cursore
2007-03-07 11:36:57 +00:00
TProgind bar ( items , " Scansione articoli " , FALSE , TRUE ) ; //barra di avanzamento
curs . freeze ( ) ;
for ( curs = 0 ; curs . pos ( ) < items ; + + curs )
2004-03-17 14:07:27 +00:00
{
bar . addstatus ( 1 ) ;
//riempie le righe del nuovo listino generato da umart
rec . put ( RCONDV_TIPO , ' L ' ) ;
rec . put ( RCONDV_CATVEN , msk . get ( F_L_CATVEN ) ) ;
rec . put ( RCONDV_COD , newcode ) ;
rec . put ( RCONDV_TIPORIGA , ' A ' ) ;
rec . put ( RCONDV_CODRIGA , rec_umart . get ( UMART_CODART ) ) ;
2004-11-30 22:02:59 +00:00
if ( gestum )
rec . put ( RCONDV_UM , rec_umart . get ( UMART_UM ) ) ;
else
rec . zero ( RCONDV_UM ) ;
if ( gestscagl )
rec . put ( RCONDV_NSCAGL , 1 ) ;
else
rec . zero ( RCONDV_NSCAGL ) ;
2007-03-07 11:36:57 +00:00
real prezzo = rec_umart . get_real ( UMART_PREZZO ) ;
2006-12-13 16:22:33 +00:00
2007-03-07 11:36:57 +00:00
if ( multiply )
{
FOR_EACH_ARRAY_ITEM ( v , j , obj )
{
const TFieldref * f = ( const TFieldref * ) obj ;
e . setvar ( j , f - > read ( rel_umart ) ) ;
}
prezzo * = ( CENTO + e . as_real ( ) ) / CENTO ;
}
2006-12-13 16:22:33 +00:00
rec . put ( RCONDV_PREZZO , prezzo ) ;
2004-03-17 14:07:27 +00:00
int err = rel . write ( ) ;
2004-11-30 22:02:59 +00:00
if ( err = = _isreinsert & & overwrite )
2004-03-17 14:07:27 +00:00
rel . rewrite ( ) ;
}
}
else
2000-10-03 13:45:12 +00:00
{
2007-03-07 11:36:57 +00:00
TRectype from ( rec ) ;
TRectype to ( rec ) ;
const TString & codf = m . get ( F_FROMCOD ) ;
if ( codf . full ( ) )
{
from . put ( RCONDV_TIPORIGA , " A " ) ;
from . put ( RCONDV_CODRIGA , codf ) ;
}
const TString & codt = m . get ( F_TOCOD ) ;
if ( codt . full ( ) )
{
to . put ( RCONDV_TIPORIGA , " A " ) ;
to . put ( RCONDV_CODRIGA , codt ) ;
}
TCursor curs ( & rel , " " , 1 , & from , & to ) ; //creo anche il cursore della relazione, con chiave 1(codice) e record iniz. e fin. uguali nel filtro
2004-03-17 14:07:27 +00:00
const long items = curs . items ( ) ; // metto in items il numero di elementi del cursore
curs . freeze ( ) ;
TProgind bar ( items , " Scansione righe di origine " , FALSE , TRUE ) ; //barra di avanzamento
for ( curs = 0 ; curs . pos ( ) < items ; + + curs )
{
2007-03-07 11:36:57 +00:00
real prezzo = rec . get_real ( RCONDV_PREZZO ) ;
if ( multiply )
{
FOR_EACH_ARRAY_ITEM ( v , j , obj )
{
const TFieldref * f = ( const TFieldref * ) obj ;
e . setvar ( j , f - > read ( rel ) ) ;
}
prezzo * = ( CENTO + e . as_real ( ) ) / CENTO ;
}
bar . addstatus ( 1 ) ;
2004-03-17 14:07:27 +00:00
rec . put ( RCONDV_COD , newcode ) ;
2006-12-13 16:22:33 +00:00
rec . put ( RCONDV_PREZZO , prezzo ) ;
2004-03-17 14:07:27 +00:00
int err = rel . write ( ) ;
2004-11-30 22:02:59 +00:00
if ( err = = _isreinsert & & overwrite )
2004-03-17 14:07:27 +00:00
rel . rewrite ( ) ;
}
}
2000-10-03 13:45:12 +00:00
}
}
2007-03-07 11:36:57 +00:00
return true ;
2000-10-03 13:45:12 +00:00
}
2003-07-01 11:17:17 +00:00
int ve2200 ( int argc , char * argv [ ] )
{
1995-09-25 15:36:30 +00:00
TCondizioni_vendita a ;
2003-07-01 11:17:17 +00:00
a . run ( argc , argv , " Condizioni di vendita " ) ;
1995-09-25 15:36:30 +00:00
return 0 ;
}