diff --git a/ve/batbmag.uml b/ve/batbmag.uml index bc18ac64f..d4e66f725 100755 --- a/ve/batbmag.uml +++ b/ve/batbmag.uml @@ -1,4 +1,4 @@ -#include "BATBMAG.h" +#include "batbmag.h" #include #include @@ -286,7 +286,7 @@ END BOOLEAN F_GESTGIA BEGIN - PROMPT 2 4 "Gestione giacenze in più depositi " + PROMPT 2 4 "Gestione giacenze in piu' depositi " FIELD MAG->B0 END diff --git a/ve/batbspp.uml b/ve/batbspp.uml index 92cc8cf22..c5d25b8f1 100755 --- a/ve/batbspp.uml +++ b/ve/batbspp.uml @@ -201,8 +201,8 @@ BEGIN PROMPT 38 8 "" FIELD SPP->S4 USE LF_PCON - INPUT GRUPPO F_GRUPPO - INPUT CONTO F_CONTO + INPUT GRUPPO F_GRUPPO SELECT + INPUT CONTO F_CONTO SELECT INPUT SOTTOCONTO F_SOTTO DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO diff --git a/ve/batbtip.uml b/ve/batbtip.uml index 04d8dae43..c7c37bcfb 100755 --- a/ve/batbtip.uml +++ b/ve/batbtip.uml @@ -38,10 +38,9 @@ END USE %TIP KEY 2 CHECKTYPE REQUIRED INPUT S0 F_DESNUM - DISPLAY "Codice" CODTAB DISPLAY "Descrizione@40" S0 - OUTPUT F_CODTAB CODTAB - OUTPUT F_DESNUM S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_CODTAB KEY 2 END @@ -49,14 +48,14 @@ END BEGIN PROMPT 2 8 "Profilo documento " FIELD S4 - FLAG "U" + CHECKTYPE REQUIRED END STRING F_PSTAMPA 8 BEGIN PROMPT 2 10 "Profilo stampa documento " FIELD S5 - FLAG "U" + CHECKTYPE REQUIRED END ENDPAGE diff --git a/ve/batbtri.uml b/ve/batbtri.uml index 589079a14..7cc86cfd8 100755 --- a/ve/batbtri.uml +++ b/ve/batbtri.uml @@ -1,13 +1,9 @@ +#include "batbtri.h" TOOLBAR "" 0 20 60 2 #include "toolbar.h" ENDPAGE - -#define F_CODICE 101 -#define F_DESCR 102 -#define F_PROFILO 103 - PAGE "Tipo di riga" -1 -1 60 14 GROUPBOX DLG_NULL 75 7 @@ -15,7 +11,7 @@ PAGE "Tipo di riga" -1 -1 60 14 PROMPT 1 0 "" FLAGS "R" END - + STRING F_CODICE 4 BEGIN PROMPT 2 2 "Codice " @@ -43,7 +39,7 @@ PAGE "Tipo di riga" -1 -1 60 14 KEY 2 END - STRING f_PROFILO 8 + STRING F_PROFILO 8 BEGIN PROMPT 2 8 "Profilo " CHECKTYPE REQUIRED diff --git a/ve/righedoc.cpp b/ve/righedoc.cpp index bf32311b3..5b3721dbf 100755 --- a/ve/righedoc.cpp +++ b/ve/righedoc.cpp @@ -6,12 +6,12 @@ #include "ve0100.h" #endif -#ifndef __VE0100C_H -#include "ve0100c.h" +#ifndef __VERIG_H +#include "verig.h" #endif -#ifndef __VEUML2_H -#include "veuml2.h" +#ifndef __VE0100C_H +#include "ve0100c.h" #endif #ifndef __SCONTI_H @@ -55,9 +55,9 @@ static bool riga_art_handler( TMask_field& f, KEY key ) // Se qualcuno cerca di modificare la maschera if ( key == K_TAB ) // && m.is_running( ) ) { - TSconto_riga r( app( ).clifo( ), &( app( ).edit_mask( ) ), &( f.mask( ) ) ); + TSconto_riga r( app( ).clifo( ), &app( ).edit_mask( ), &m ); r.calcola( ); - f.mask( ).set( FS_SCONTO, r.get( ) ); + f.mask( ).set( FR_SCONTO, r.get( ) ); } return TRUE; } @@ -65,32 +65,26 @@ static bool riga_art_handler( TMask_field& f, KEY key ) void TRiga::load( TToken_string& row ) { - _data.put( "CODNUM", row.get( FS_CODNUM - 101 ) ); - _data.put( "ANNO", row.get( FS_ANNO - 101 ) ); - _data.put( "PROVV", row.get( FS_PROVV - 101 ) ); - _data.put( "NDOC", row.get( FS_NDOC - 101 ) ); - _data.put( "STATORIGA", row.get( FS_STATORIGA - 101 ) ); - _data.put( "TIPORIGA", row.get( FS_TIPORIGA - 101 ) ); - _data.put( "PROFRIGA", row.get( FS_PROFRIGA - 101 ) ); - _data.put( "CODMAG", row.get( FS_CODMAG - 101 ) ); - _data.put( "CODART", row.get( FS_CODART - 101 ) ); - _data.put( "DESCR", row.get( FS_DESCR - 101 ) ); - _data.put( "DESCLUNGA", row.get( FS_DESCLUNGA - 101 ) ); - _data.put( "PREZZO", row.get( FS_PREZZO - 101 ) ); - _data.put( "UMQTA", row.get( FS_UMQTA - 101 ) ); - _data.put( "QTA", row.get( FS_QTA - 101 ) ); - _data.put( "QTAEVASA", row.get( FS_QTAEVASA - 101 ) ); - _data.put( "RIGAEVASA", row.get( FS_RIGAEVASA - 101 ) ); - _data.put( "TARA", row.get( FS_TARA - 101 ) ); - _data.put( "PNETTO", row.get( FS_PNETTO - 101 ) ); - _data.put( "NCOLLI", row.get( FS_NCOLLI - 101 ) ); - _data.put( "DAEVADERE", row.get( FS_DAEVADERE - 101 ) ); - _data.put( "SCONTO", row.get( FS_SCONTO - 101 ) ); - _data.put( "PERCPROV", row.get( FS_PERCPROV - 101 ) ); - _data.put( "IMPFISSO", row.get( FS_IMPFISSO - 101 ) ); - _data.put( "CODIVA", row.get( FS_CODIVA - 101 ) ); - _data.put( "ADDIVA", row.get( FS_ADDIVA - 101 ) ); - _data.put( "ASPBENI", row.get( FS_ASPBENI - 101 ) ); + _data.put( "STATORIGA", row.get( FR_STATORIGA - 101 ) ); + _data.put( "TIPORIGA", row.get( FR_TIPORIGA - 101 ) ); + _data.put( "CODMAG", row.get( FR_CODMAG - 101 ) ); + _data.put( "CODART", row.get( FR_CODART - 101 ) ); + _data.put( "DESCR", row.get( FR_DESCR - 101 ) ); + _data.put( "PREZZO", row.get( FR_PREZZO - 101 ) ); + _data.put( "UMQTA", row.get( FR_UMQTA - 101 ) ); + _data.put( "QTA", row.get( FR_QTA - 101 ) ); + _data.put( "QTAEVASA", row.get( FR_QTAEVASA - 101 ) ); + _data.put( "RIGAEVASA", row.get( FR_RIGAEVASA - 101 ) ); + _data.put( "TARA", row.get( FR_TARA - 101 ) ); + _data.put( "PNETTO", row.get( FR_PNETTO - 101 ) ); + _data.put( "NCOLLI", row.get( FR_NCOLLI - 101 ) ); + _data.put( "DAEVADERE", row.get( FR_DAEVADERE - 101 ) ); + _data.put( "SCONTO", row.get( FR_SCONTO - 101 ) ); + _data.put( "PERCPROV", row.get( FR_PERCPROV - 101 ) ); + _data.put( "IMPFISSO", row.get( FR_IMPFISSO - 101 ) ); + _data.put( "CODIVA", row.get( FR_CODIVA - 101 ) ); + _data.put( "ADDIVA", row.get( FR_ADDIVA - 101 ) ); + _data.put( "ASPBENI", row.get( FR_ASPBENI - 101 ) ); carica_profilo( ); _piede.destroy( ); somma( _piede ); @@ -98,47 +92,27 @@ void TRiga::load( TToken_string& row ) void TRiga::save( TToken_string& row ) { - row.add( _data.get( "CODNUM" ), FS_CODNUM - 101 ); - row.add( _data.get( "ANNO" ), FS_ANNO - 101 ); - row.add( _data.get( "PROVV" ), FS_PROVV - 101 ); - row.add( _data.get( "NDOC" ), FS_NDOC - 101 ); - row.add( _data.get( "STATORIGA" ), FS_STATORIGA - 101 ); - row.add( _data.get( "TIPORIGA" ), FS_TIPORIGA - 101 ); - row.add( _data.get( "PROFRIGA" ), FS_PROFRIGA - 101 ); - row.add( _data.get( "CODMAG" ), FS_CODMAG - 101 ); - row.add( _data.get( "CODART" ), FS_CODART - 101 ); - row.add( _data.get( "DESCR" ), FS_DESCR - 101 ); - row.add( _data.get( "DESCLUNGA" ), FS_DESCLUNGA - 101 ); - row.add( _data.get( "PREZZO" ), FS_PREZZO - 101 ); - row.add( _data.get( "UMQTA" ), FS_UMQTA - 101 ); - row.add( _data.get( "QTA" ), FS_QTA - 101 ); - row.add( _data.get( "QTAEVASA" ), FS_QTAEVASA - 101 ); - row.add( _data.get( "RIGAEVASA" ), FS_RIGAEVASA - 101 ); - row.add( _data.get( "TARA" ), FS_TARA - 101 ); - row.add( _data.get( "PNETTO" ), FS_PNETTO - 101 ); - row.add( _data.get( "NCOLLI" ), FS_NCOLLI - 101 ); - row.add( _data.get( "DAEVADERE" ), FS_DAEVADERE - 101 ); - row.add( _data.get( "SCONTO" ), FS_SCONTO - 101 ); - row.add( _data.get( "PERCPROV" ), FS_PERCPROV - 101 ); - row.add( _data.get( "IMPFISSO" ), FS_IMPFISSO - 101 ); - row.add( _data.get( "CODIVA" ), FS_CODIVA - 101 ); - row.add( _data.get( "ADDIVA" ), FS_ADDIVA - 101 ); - row.add( _data.get( "ASPBENI" ), FS_ASPBENI - 101 ); - row.add( _piede.string( ), FS_G1 - 101 ); -} - -void TRiga::carica_maschera( ) -{ - _mask = new TMask( _pro->get( "MSK", "MAIN" ) ); - int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" ); - for( int i = 1; i <= numhandler; i ++ ) - { - TString chiave; - chiave.format( "%d", i ); - TToken_string riga = _pro->get( chiave, "HANDLERS" ); - row_set_handler( *_mask, riga.get_int( 0 ), riga.get_int( 1 ) ); - } - // _mask->set_handler( FS_CODART, riga_art_handler ); + row.add( _data.get( "STATORIGA" ), FR_STATORIGA - 101 ); + row.add( _data.get( "TIPORIGA" ), FR_TIPORIGA - 101 ); + row.add( _data.get( "CODMAG" ), FR_CODMAG - 101 ); + row.add( _data.get( "CODART" ), FR_CODART - 101 ); + row.add( _data.get( "DESCR" ), FR_DESCR - 101 ); + row.add( _data.get( "UMQTA" ), FR_UMQTA - 101 ); + row.add( _data.get( "PREZZO" ), FR_PREZZO - 101 ); + row.add( _data.get( "QTA" ), FR_QTA - 101 ); + row.add( _data.get( "QTAEVASA" ), FR_QTAEVASA - 101 ); + row.add( _data.get( "RIGAEVASA" ), FR_RIGAEVASA - 101 ); + row.add( _data.get( "TARA" ), FR_TARA - 101 ); + row.add( _data.get( "PNETTO" ), FR_PNETTO - 101 ); + row.add( _data.get( "NCOLLI" ), FR_NCOLLI - 101 ); + row.add( _data.get( "DAEVADERE" ), FR_DAEVADERE - 101 ); + row.add( _data.get( "SCONTO" ), FR_SCONTO - 101 ); + row.add( _data.get( "PERCPROV" ), FR_PERCPROV - 101 ); + row.add( _data.get( "IMPFISSO" ), FR_IMPFISSO - 101 ); + row.add( _data.get( "CODIVA" ), FR_CODIVA - 101 ); + row.add( _data.get( "ADDIVA" ), FR_ADDIVA - 101 ); + row.add( _data.get( "ASPBENI" ), FR_ASPBENI - 101 ); +// row.add( _piede.string( ), FR_G1 - 101 ); rimettere } void TRiga::load( const TRectype& rec ) @@ -150,14 +124,15 @@ void TRiga::load( const TRectype& rec ) void TRiga::save( TRectype& rec ) { rec = _data; - rec.put( "G1", _piede.string( ) ); +// rec.put( "G1", _piede.string( ) ); } void TRiga::carica_profilo( ) { if( _pro ) - delete _pro; - TFilename proname( _data.get( "PROFRIGA" ) ); + delete _pro; + TFilename proname("verig"); + proname << _data.get("TIPORIGA"); proname.ext( "ini" ); _pro = new TConfig( proname ); } @@ -173,7 +148,7 @@ void TRiga::configura_sheet( TSheet_field& f, int numriga ) TString16 chiave; chiave.format( "%d", i ); int coltoenable = _pro->get_int( chiave, "COLUMNS" ); - f.enable_cell ( numriga, coltoenable - 1 ); + f.enable_cell ( numriga, coltoenable); } } @@ -246,12 +221,22 @@ void TRiga::sottrai( TPiede_documento& piede ) piede.sottrai( temp_piede ); } -TMask& TRiga::getmask( ) -{ - if( !_mask) - carica_maschera( ); - _mask->set_handler( FS_DESCR, riga_des_handler ); - return *_mask; +TMask * TRiga::getmask( ) +{ + + TString16 msk("verig"); + msk << _data.get("TIPORIGA"); + TMask * mask = new TMask( msk ); + int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" ); + for( int i = 1; i <= numhandler; i ++ ) + { + TString chiave; + chiave.format( "%d", i ); + TToken_string riga = _pro->get( chiave, "HANDLERS" ); + row_set_handler( *mask, riga.get_int( 0 ), riga.get_int( 1 ) ); + } + mask->set_handler( FR_DESCR, riga_des_handler ); + return mask; } @@ -287,8 +272,6 @@ TRiga::~TRiga( ) { if( _pro ) delete _pro; - if( _mask ) - delete _mask; } @@ -352,8 +335,8 @@ real& TPiede_documento::get( TString16& piede ) if( is_key( piede ) ) { - return ( real& ) find( piede ); + return ( real& ) find( piede ); } else - return zero; + return zero; } \ No newline at end of file diff --git a/ve/righedoc.h b/ve/righedoc.h index 5847e8b4c..8342e89dd 100755 --- a/ve/righedoc.h +++ b/ve/righedoc.h @@ -1,8 +1,6 @@ #ifndef __RIGHEDOC_H #define __RIGHEDOC_H // Numero di colonne presenti sullo sheet totale -#define MAX_COLUMNS 27 - #ifndef __ASSOC_H #include "assoc.h" #endif @@ -31,11 +29,6 @@ #include "msksheet.h" #endif -#ifndef __VEUML2_H -#include "veuml2.h" -#endif - - class TPiede_documento : public TAssoc_array { public: @@ -46,7 +39,7 @@ class TPiede_documento : public TAssoc_array void sottrai( TPiede_documento& tosum ){ somma( tosum, FALSE ); }; void somma( TString16& piede, const real& importo ); void sottrai( TString16& piede, const real& importo ){ somma( piede, -importo ); }; - real& get( TString16& piede ); + real& get( TString16& piede ); }; class TRiga : public TObject @@ -60,7 +53,6 @@ class TRiga : public TObject TConfig* _pro; // Maschera per la riga - TMask* _mask; TPiede_documento _piede; @@ -75,7 +67,7 @@ class TRiga : public TObject // Setta il numero della riga void set_numero( int r ) { _data.put( "NRIGA", r ); } int numero( ) { return _data.get_int( "NRIGA" ); } - const TString& profilo( ) { return _data.get( "PROFRIGA" ); } + const TString & tipo( ) const { return _data.get( "TIPORIGA" ); } // Carica la riga dalla riga dello sheet void load( TToken_string& row ); // Registra la riga sullo sheet @@ -93,13 +85,11 @@ class TRiga : public TObject // Gestisce la modifica/cancellazione della riga sul piede // documento indicato. Va chiamata negli handler degli sheet void edit_keys( const KEY key, TPiede_documento& nuovo ); - // Ritorna la maschera della riga per la editazione - TMask& getmask( ); - - void carica_maschera( ); + // Costruisce e Ritorna la maschera della riga per la editazione + TMask * getmask(); // Costruttorino standard - TRiga( ) : _data( LF_RIGHEDOC ), _pro( NULL ), _mask( NULL ) { } + TRiga( ) : _data( LF_RIGHEDOC ), _pro( NULL ) { } virtual ~TRiga( ); }; diff --git a/ve/sconti.cpp b/ve/sconti.cpp index b9b38cfd1..2e9214d5e 100755 --- a/ve/sconti.cpp +++ b/ve/sconti.cpp @@ -6,8 +6,8 @@ #include "veuml.h" #endif -#ifndef __VEUML2_H -#include "veuml2.h" +#ifndef __VERIG_H +#include "verig.h" #endif #ifndef __TCLIFOR_H @@ -142,12 +142,12 @@ TSconto_riga::TSconto_riga( TCliFor& clifo, TMask * testa, TMask * riga ) : _con bool TSconto_riga::cerca_condv( int tiporicerca ) { TString s1 = _anamag.get( "CODART" ); - TString s2 = riga( ).get( FS_CODART ); + TString s2 = riga( ).get( FR_CODART ); if( s1 != s2 ) { _anamag.setkey( 1 ); _anamag.zero( ); - _anamag.put( "CODART", riga( ).get( FS_CODART ) ); + _anamag.put( "CODART", riga( ).get( FR_CODART ) ); int ret = _anamag.read( ); CHECK( ret == NOERR, "Articolo non trovato in anagrafica di magazzino!" ); } @@ -213,7 +213,7 @@ bool TSconto_riga::cerca_condv( int tiporicerca ) _rcondv.put( "CODCF", _condv.get( "CODCF" ) ); if( _condv.get_bool( "GESTUM" ) ) { - _rcondv.put( "UM", riga( ).get( FS_UMQTA ) ); + _rcondv.put( "UM", riga( ).get( FR_UMQTA ) ); } else { @@ -221,7 +221,7 @@ bool TSconto_riga::cerca_condv( int tiporicerca ) } if( _condv.get_bool( "GESTSCA" ) ) { - _rcondv.put( "QLIM", riga( ).get( FS_QTA ) ); + _rcondv.put( "QLIM", riga( ).get( FR_QTA ) ); } else { @@ -305,7 +305,7 @@ void TSconto_riga::calcola( ) } if( _ditta.get_bool( "GESSCORIGAUM", "ve" ) ) { - _sconti.put( "UM", riga( ).get( FS_UMQTA ) ); + _sconti.put( "UM", riga( ).get( FR_UMQTA ) ); } if( _sconti.read( ) == NOERR ) // Bravo, hai vinto una bambolina diff --git a/ve/tclifor.cpp b/ve/tclifor.cpp index 777fafaae..9987f34d5 100755 --- a/ve/tclifor.cpp +++ b/ve/tclifor.cpp @@ -56,7 +56,7 @@ int TCliFor::write_occas( ) if( !occasionale( ) ) return NOERR; TRelation occas( LF_OCCAS ); - occas_mask( ).autosave( &occas ); + occas_mask( ).autosave( occas ); return occas.write( ); } @@ -83,11 +83,11 @@ void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi ) occrel.curr( ).zero( ); occrel.curr( ).put( "CFPI", ocfpi ); occrel.read( ); - occas_mask( ).autoload( &occrel ); + occas_mask( ).autoload( occrel ); } } -void TCliForVendite::update_mask( TVariable_mask& m, bool onload ) +void TCliForVendite::update_mask( TMask& m, bool onload ) { TString16 stato; @@ -189,7 +189,7 @@ bool TCliFor::occas_code_handler(TMask_field& f, KEY key) occas.lfile().put("CFPI", code); if (occas.read(_isequal) == NOERR) { - f.mask().autoload(&occas); + f.mask().autoload(occas); f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni f.mask().send_key(K_TAB, O_COMUNENAS); } @@ -198,7 +198,7 @@ bool TCliFor::occas_code_handler(TMask_field& f, KEY key) return TRUE; } -void TCliForVendite::imposta_dati_comune( TVariable_mask& m ) +void TCliForVendite::imposta_dati_comune( TMask& m ) { TLocalisamfile comuni(LF_COMUNI); comuni.setkey( 1 ); @@ -217,7 +217,7 @@ void TCliForVendite::imposta_dati_comune( TVariable_mask& m ) m.set( F_PROVCOM, comuni.get( "PROVCOM" ) ); } -void TCliForVendite::imposta_indirizzo_spedizione( TVariable_mask& m ) +void TCliForVendite::imposta_indirizzo_spedizione( TMask& m ) { TString16 stato; if( occasionale( ) ) @@ -276,7 +276,7 @@ void TCliForVendite::imposta_indirizzo_spedizione( TVariable_mask& m ) m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) ); } -void TCliForVendite::imposta_sconto_testa( TVariable_mask& m ) +void TCliForVendite::imposta_sconto_testa( TMask& m ) { TConfig ditta( CONFIG_DITTA ); TString16 codsconto; @@ -349,7 +349,7 @@ void TCliForVendite::imposta_sconto_testa( TVariable_mask& m ) } } -void TCliForVendite::imposta_valuta( TVariable_mask& m ) +void TCliForVendite::imposta_valuta( TMask& m ) { TConfig ditta( CONFIG_DITTA ); diff --git a/ve/tclifor.h b/ve/tclifor.h index ed9db26d1..ad09ea22f 100755 --- a/ve/tclifor.h +++ b/ve/tclifor.h @@ -32,7 +32,7 @@ public: int get_int( const int file, const TString& fieldname ); long get_long( const int file, const TString& fieldname ); bool get_bool( const int file, const TString& fieldname ); - void set( TVariable_mask& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); }; + void set( TMask& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); }; }; class TCliFor : public TData_picker @@ -65,11 +65,11 @@ class TCliForVendite : public TCliFor public: - void update_mask( TVariable_mask& m, bool onload = FALSE ); - void imposta_dati_comune( TVariable_mask& m ); - void imposta_valuta( TVariable_mask& m ); - void imposta_indirizzo_spedizione( TVariable_mask& m ); - void imposta_sconto_testa( TVariable_mask& m ); + void update_mask( TMask& m, bool onload = FALSE ); + void imposta_dati_comune( TMask& m ); + void imposta_valuta( TMask& m ); + void imposta_indirizzo_spedizione( TMask& m ); + void imposta_sconto_testa( TMask& m ); }; diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index 6b0fabb7e..eecfcd89e 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -1,9 +1,44 @@ #ifndef __VE0100_H #include "ve0100.h" -#endif +#endif +// babbalone #3-4 I can't show these, because they are in the mask + +TTipo_documento::TTipo_documento(const char * tipodoc) + : _tipodoc(tipodoc), _mask(NULL) +{ + TTable t("%TIP"); + + t.zero(); + t.put("CODTAB", _tipodoc); + if (t.bad()) + fatal_box("Non esiste il tipo documento %s", _tipodoc); + _profile = t.get("S4"); + _profile_file = _profile; + _profile_file.ext("ini"); + + TConfig * p = create_profile(); + + _mask = new TVariable_mask( p->get( "MSKFILE", "MAIN" ) ); + delete p; +} + +TTipo_documento::~TTipo_documento() + +{ + if (_mask != NULL) + delete _mask; +} TMotore_application& app( ) { return ( TMotore_application& ) main_app( ); } +void TMotore_application::init_query_mode( TMask& m ) +{ + _msk->set( F_CODNUM, _codnum ); + _msk->check_field(F_CODNUM); + _msk->set( F_PROFILO, _profilo ); + _msk->set( F_TIPODOC, _tipodoc ); +} + void TMotore_application::init_insert_mode( TMask& m ) { TString tipocf( "A" ); @@ -12,7 +47,7 @@ void TMotore_application::init_insert_mode( TMask& m ) m.set( F_DATAINSC, m.get( F_DATADOC ) ); m.set( F_TIPOCF, tipocf ); clifo( ).occas_mask( ).reset( ); - int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); + int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof for( int i = 1; i <= ndefaults; i++ ) { TString16 chiave; @@ -43,7 +78,6 @@ int TMotore_application::user_function( int index ) TMask *TMotore_application::ss_getmask( int numriga, TMask& fullmask, bool destroy ) { static TRiga* r = NULL; - static TMask* m = NULL; if ( destroy ) { @@ -55,18 +89,24 @@ TMask *TMotore_application::ss_getmask( int numriga, TMask& fullmask, bool destr { TSheet_field* ss = fullmask.get_sheet( ); TToken_string& riga = ss->row( numriga ); - TString16 profilo( riga.get( FS_PROFRIGA - 101 ) ); - if ( profilo.blank( ) ) return &fullmask; - if( r && ( r->profilo( ) == profilo ) ) - { - return( m ); - } + const TString tipo(riga.get( FR_TIPORIGA - 101 )); + + if ( tipo.blank() ) return &fullmask; if ( !r ) r = new TRiga; - r->load( riga ); - m = &(r->getmask( )); - m->set_sheet( ss ); - return( m ); + if(r->tipo() != tipo) + { + r->load( riga ); + } + TAssoc_array & row_masks = app()._row_masks; + TMask * row_mask = (TMask *) row_masks.objptr(tipo); + if (row_mask == NULL) + { + row_mask = r->getmask(); + row_mask->set_sheet( ss ); + row_masks.add(tipo, row_mask); + } + return( row_mask ); } } @@ -94,9 +134,10 @@ void TMotore_application::user_set_handler( int fieldid, int index, TMask* m ) } bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key ) + { - static TRiga* riga; - + static TRiga * riga = NULL; + if ( key == K_SPACE ) // Inizio modifica { TPiede_documento& piede = app( ).piede( ); @@ -104,9 +145,10 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key ) } if ( key == K_TAB ) // Mi posiziono su di una riga nello sheet { - if ( riga ) + if ( riga ) delete riga; riga = new TRiga; + riga->load( ss.row( r ) ); } if ( key == K_CTRL + K_TAB ) // Lascio una riga nello sheet @@ -123,20 +165,28 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key ) // app( ).edit_mask( ).field( F_MEMORIGA ).autosave( &rdoc ); // rdoc.write( ); } - if ( key == K_INS ) // Inserimento + if ( key == K_INS ) // Inserimento { - TTable tabtr( "%TRI" ); + TMask & emask = app().edit_mask(); +/* + TTable tabtr( "%TRI" ); + tabtr.zero( ); tabtr.put( "CODTAB", app( ).edit_mask( ).get( F_LBTIPORIGA ) ); tabtr.read( ); +*/ TToken_string& tsr = ss.row( r ); - tsr.add( app( ).edit_mask( ).get( F_ANNO ), FS_ANNO - 101 ); - tsr.add( app( ).edit_mask( ).get( F_PROVV ), FS_PROVV - 101 ); - tsr.add( app( ).edit_mask( ).get( F_NDOC ), FS_NDOC - 101 ); - tsr.add( app( ).edit_mask( ).get( F_CODNUM ), FS_CODNUM - 101 ); - tsr.add( app( ).edit_mask( ).get( F_LBTIPORIGA ), FS_TIPORIGA - 101 ); - // tsr.add( app( ).edit_mask( ).get( F_PROFILO ), FS_PROFRIGA - 101 ); - tsr.add( tabtr.get( "S4" ), FS_PROFRIGA - 101 ); +/* + tsr.add(emask.get( F_ANNO ), FR_ANNO - 101 ); + tsr.add(emask.get( F_PROVV ), FR_PROVV - 101 ); + tsr.add(emask.get( F_NDOC ), FR_NDOC - 101 ); + tsr.add(emask.get( F_CODNUM ), FR_CODNUM - 101 ); +*/ + tsr.add(emask.get( F_LBTIPORIGA ), FR_TIPORIGA - 101 ); + tsr.add("", FR_STATORIGA - 101 ); +/* + tsr.add( tabtr.get( "S4" ), FR_PROFRIGA - 101 ); +*/ if ( riga ) delete riga; riga = new TRiga; @@ -146,6 +196,8 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key ) if ( key == K_CTRL + K_INS ) // Dopo inserimento { riga->configura_sheet( ss, r ); + ss.force_update(); + ss.select(r); app( ).curr_mask( ).send_key( K_ROWEDIT, F_SHEET ); return TRUE; } @@ -242,7 +294,7 @@ bool TMotore_application::val_handler( TMask_field& f, KEY key ) // m.set( F_CAMBIO, "" ); // m.set( F_DATACAMBIO, "" ); - app( ).clifo( ).imposta_valuta( ( TVariable_mask& ) m ); + app( ).clifo( ).imposta_valuta( m ); return TRUE; } @@ -286,15 +338,15 @@ bool TMotore_application::occas_handler( TMask_field& f, KEY key ) bool TMotore_application::tip_handler( TMask_field& f, KEY key ) { TMask& m = f.mask( ); - if ( key == K_TAB && m.is_running( ) ) + if ( key == K_TAB && m.is_running( ) && m.get(F_TIPODOC).not_empty()) { - const TString16 value( m.get( F_TIPODOC ) ); - if ( value.blank( ) ) - { +// const TString16 value( m.get( F_TIPODOC ) ); +// if (value.blank()) +// { // Pulisce il profilo - m.set( F_PROFILO, "" ); - return TRUE; - } +// m.set( F_PROFILO, "" ); +// return TRUE; +// } TString tipi_consentiti( m.get( F_TIPIDOCS ) ); TString16 tipo( f.get( ) ); tipo.trim( ); @@ -315,12 +367,6 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key ) f.set( "" ); return FALSE; } - TTable tabtip( "%TIP" ); - tabtip.zero( ); - tabtip.put( "CODTAB", tipo ); - tabtip.read( ); - m.set( F_DESTIPODOC, tabtip.get( "S0" ) ); - m.set( F_PROFILO, tabtip.get( "S4" ) ); } if ( key == K_ENTER && m.is_running( ) ) { TString tipo( f.get( ) ); @@ -348,11 +394,12 @@ bool TMotore_application::ndoc_handler( TMask_field& f, KEY key ) if ( doc.read( ) == NOERR ) { m.set( F_TIPODOC, doc.get( "TIPODOC" ) ); + m.send_key(K_TAB, F_TIPODOC); m.set( F_STATO, doc.get( "STATO" ) ); - TTable tabtip( "%TIP" ); - tabtip.put( "CODTAB", doc.get( "TIPODOC" ) ); - tabtip.read( ); - m.set( F_PROFILO, tabtip.get( "S4" ) ); +// TTable tabtip( "%TIP" ); +// tabtip.put( "CODTAB", doc.get( "TIPODOC" ) ); +// tabtip.read( ); +// m.set( F_PROFILO, tabtip.get( "S4" ) ); m.stop_run( K_AUTO_ENTER ); } } @@ -400,7 +447,7 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) if ( f.focusdirty( ) ) { app( ).clifo( ).load( cf, atol( f.get( ) ), "" ); - app( ).clifo( ).update_mask( ( TVariable_mask& ) m ); + app( ).clifo( ).update_mask( m ); if( f.mask( ).id2pos( F_OCCASEDIT ) > 0 ) { if ( app( ).clifo( ).occasionale( ) && app( ).clifo( ).occas_mask( ).get( O_CODICE ).empty( ) ) @@ -413,7 +460,7 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) void TMotore_application::carica_piedi( ) { - TToken_string s( pro( ).get( "PROGPIEDE", "MAIN" ) ); + TToken_string s( pro( ).get( "PROGPIEDE", "MAIN" ) ); // prof TString s1 = s.get( ); TTable ppd( "PPD" ); while( !s1.blank( ) ) @@ -456,26 +503,30 @@ bool TMotore_application::changing_mask( int mode ) void TMotore_application::configura_sheet( TSheet_field& sheet, TConfig& config ) { - int marker[MAX_COLUMNS + 1]; + TBit_array to_delete(MAX_COLUMNS); + to_delete.set(); int ncols = config.get_int( "NCOLS", "SHEET" ); - for ( int i = 1; i <= MAX_COLUMNS; i ++ ) marker[ i ] = 0; - for ( i = 1; i <= ncols; i ++ ) + for ( int i = 1; i <= ncols; i ++ ) { TString col; col.format( "%d", i ); TToken_string sheet_col( config.get( col, "SHEET" ) ); - const TString descr( sheet_col.get( 1 ) ); - if ( ! descr.blank( ) ) - sheet.set_column_header( i, descr ); - TString size( sheet_col.get( 2 ) ); - if ( ! size.blank( ) ) - sheet.set_column_width( i, sheet_col.get_int( 2 ) ); - int coltomove = sheet_col.get_int( 0 ) - 1; - marker[coltomove] = 1; - // sheet.move_column( coltomove, i ); + const int field_id = sheet_col.get_int(0); + const int coltomove = field_id - FIRST_FIELD; + to_delete.reset(coltomove); + + const TString descr(sheet_col.get( 1 )); + + if (descr.not_empty() ) + sheet.set_column_header( field_id, descr); + + const int size( sheet_col.get_int(2)); + + if (size != 0) + sheet.set_column_width( field_id, size); } - for ( i = 1; i <= MAX_COLUMNS; i ++ ) - if( !marker[ i ] ) sheet.delete_column( i ); + for ( i = MAX_COLUMNS - 1; i >= 0; i-- ) + if( to_delete[i] ) sheet.delete_column( i + FIRST_FIELD); } void TMotore_application::get_edit_mask( const char * profilo ) @@ -484,7 +535,6 @@ void TMotore_application::get_edit_mask( const char * profilo ) // query_mask( ).enable( DLG_NEWREC ); fn.ext( "ini" ); - fn.upper( ); if ( _pro ) { if ( ( *_proname ) == fn ) @@ -494,79 +544,84 @@ void TMotore_application::get_edit_mask( const char * profilo ) _pro = new TConfig( fn ); _proname = new TFilename( fn ); _proname->upper( ); - if ( _msk1 ) delete _msk1; - _msk1 = new TVariable_mask( pro( ).get( "MSKFILE", "MAIN" ) ); - // edit_mask( ).set( F_PROFILO, query_mask( ).get( F_PROFILO ) ); - // edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) ); + TVariable_mask * _msk1 = (TVariable_mask *) _doc_masks.objptr(_tipodoc); + const bool newmask = _msk1 == NULL; + + if (newmask) + { + _msk1 = new TVariable_mask( pro( ).get( "MSKFILE", "MAIN" ) ); // prof + _doc_masks.add(_tipodoc, _msk1); + } _sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET ); sheet( ).set_notify( ss_handler ); - TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); + TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof app( ).tipocf( tipocf[ 0 ] ); - configura_sheet( *_sheet, *_pro ); - TList_field& listbox = ( TList_field& ) _msk1->field( F_LBTIPORIGA ); - const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); - TTable tabtr( "%TRI" ); - TToken_string keys( "" ), descrs( "" ); - for ( int i = 1; i <= numtr; i ++ ) - { - TString chiave; - TToken_string item; - chiave.format( "%d", i ); - tabtr.zero( ); - TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); - tabtr.put( "CODTAB", tiporiga ); - if ( tabtr.read( ) == NOERR ) + if (newmask) + { + TList_field& listbox = ( TList_field& ) _msk1->field( F_LBTIPORIGA ); + const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); //prof + TTable tabtr( "%TRI" ); + TToken_string keys( "" ), descrs( "" ); + for ( int i = 1; i <= numtr; i ++ ) { - keys.add( tabtr.get( "CODTAB" ) ); - descrs.add( tabtr.get( "S0" ) ); + TString chiave; + TToken_string item; + chiave.format( "%d", i ); + tabtr.zero( ); + TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); // pro + tabtr.put( "CODTAB", tiporiga ); + if ( tabtr.read( ) == NOERR ) + { + keys.add( tabtr.get( "CODTAB" ) ); + descrs.add( tabtr.get( "S0" ) ); + } + else + yesnofatal_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga ); } - else - { - yesnofatal_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga ); + listbox.replace_items( keys, descrs ); + configura_sheet( *_sheet, *_pro ); + ((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask ); + int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof + for ( i = 1; i <= numhandler; i ++ ) + { + TString chiave; + chiave.format( "%d", i ); + TToken_string riga = pro( ).get( chiave, "HANDLERS" ); + user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) ); } } - listbox.replace_items( keys, descrs ); - ((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask ); - int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); - for ( i = 1; i <= numhandler; i ++ ) - { - TString chiave; - chiave.format( "%d", i ); - TToken_string riga = pro( ).get( chiave, "HANDLERS" ); - user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) ); - } // _msk1->set( F_MEMORIGA, "Riga1" ); } TMask* TMotore_application::get_mask( int mode ) -{ - TString profilo( query_mask( ).get( F_PROFILO ) ); +{ switch ( mode ) { case MODE_INS: case MODE_MOD: - if( !_msk ) - delete _msk; - get_edit_mask( profilo ); - if ( edit_mask( ).id2pos( F_OCCASEDIT ) > 0 ) - edit_mask( ).set_handler( F_OCCASEDIT, occas_handler ); - if ( edit_mask( ).id2pos( F_CODVAL ) > 0 ) - edit_mask( ).set_handler( F_CODVAL, val_handler ); - edit_mask( ).set_handler( F_CODCF, clifo_handler ); - edit_mask( ).set_handler( F_CODPAG, condpag_hndl ); - edit_mask( ).set_handler( F_DATAINSC, condpag_hndl ); + { + _profilo = _msk->get( F_PROFILO ); + _codnum = _msk->get( F_CODNUM ); + _tipodoc = _msk->get( F_TIPODOC ); + _anno = _msk->get_int(F_ANNO); + _tiponum = _msk->get(F_PROVV); + _numdoc = _msk->get_long(F_NDOC); + get_edit_mask( _profilo ); + TMask & emask = edit_mask(); + if (emask.id2pos( F_OCCASEDIT ) > 0 ) + emask.set_handler( F_OCCASEDIT, occas_handler ); + if ( emask.id2pos( F_CODVAL ) > 0 ) + emask.set_handler( F_CODVAL, val_handler ); + emask.set_handler( F_CODCF, clifo_handler ); + emask.set_handler( F_CODPAG, condpag_hndl ); + emask.set_handler( F_DATAINSC, condpag_hndl ); // edit_mask( ).set_handler( 99, elabora_handler ); - return( _msk1 ); - break; + return( &emask ); + break; + } default: - if( !_msk ) - { - _msk = new TMask( "ve1000a" ); - } - if( !_msk1 ) - { - delete _msk1; - } + if( _msk == NULL) + _msk = new TMask( "ve1000a" ); return _msk; break; } @@ -591,8 +646,8 @@ const char* TMotore_application::get_next_key( ) TToken_string key; TMask& m = curr_mask( ); - TString value = m.get( F_CODNUM ); - if ( value.blank( ) ) + const TString value = m.get( F_CODNUM ); + if (value.empty()) return NULL; TTable tabnum( "NUM" ); tabnum.zero( ); @@ -634,28 +689,28 @@ int TMotore_application::read( TMask& m ) int err = TRelation_application::read( m ); if ( err == NOERR ) { - edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) ); - edit_mask( ).set( F_DESTIPODOC, query_mask( ).get( F_DESTIPODOC ) ); +// edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) ); +// edit_mask( ).set( F_DESTIPODOC, query_mask( ).get( F_DESTIPODOC ) ); const char tipocf = m.get( F_TIPOCF )[ 0 ]; clifo( ).load( tipocf, m.get_int( F_CODCF ), rel( ).curr( ).get( "OCFPI" ) ); clifo( ).update_mask( ( TVariable_mask& ) m, TRUE ); TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC ); - TRectype r = rdoc.curr( ); - TRectype& trec = get_relation( )->curr( ); + TRectype r(rdoc.curr( )); r.zero( ); - r.put( "CODNUM", trec.get( "CODNUM" ) ); - r.put( "PROVV", trec.get( "PROVV" ) ); - r.put( "ANNO", trec.get( "ANNO" ) ); - r.put( "NDOC", trec.get_long( "NDOC" ) ); + r.put( "CODNUM", _codnum); + r.put( "PROVV", _tiponum); + r.put( "ANNO", _anno); + r.put( "NDOC", _numdoc); _righe_rec->read( r ); TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET ); f.destroy( ); int last = _righe_rec->last_row( ); - TRiga currentrow; for ( int i = 1; i <= last; i ++ ) { TToken_string& srow = f.row( i - 1 ); TRectype& rec = _righe_rec->row( i, FALSE ); + TRiga currentrow; + currentrow.load( rec ); currentrow.save( srow ); currentrow.configura_sheet( f, i - 1 ); @@ -676,16 +731,12 @@ bool TMotore_application::check_key( TLocalisamfile& rdoc, TString16 codnum, boo int TMotore_application::write( const TMask& m ) { - int err; - if ( esegui_procedura( OP_NUOVO ) != NOERR ) + int err = NOERR; + if (esegui_procedura(OP_NUOVO) != NOERR ) return FALSE; - m.field( F_STATO ).set( _pro->get( "STATOFINALE", "INSERIMENTO" ) ); - err = NOERR; // avanza_numero( m.get_bool( F_PROVV ) ); - if ( err == NOERR ) - { - if ( m.id2pos( F_OCCASEDIT) > 0 ) - err = app( ).clifo( ).write_occas( ); - } + m.field(F_STATO).set( _pro->get( "STATOFINALE", "INSERIMENTO" ) ); + if ( m.id2pos( F_OCCASEDIT) > 0 ) + err = app( ).clifo( ).write_occas( ); if ( err == NOERR ) { err = TRelation_application::write( m ); @@ -693,8 +744,13 @@ int TMotore_application::write( const TMask& m ) { TSheet_field& f = ss( ); _righe_rec->destroy_rows( ); - if ( m.insert_mode( ) ) - _righe_rec->renum_key( "NRIGA", 1 ); + TRectype * rec = new TRectype(_righe_rec->key()); + TRelation * rel = get_relation(); + rec->put("CODNUM", rel->lfile().get("CODNUM")); + rec->put("ANNO", rel->lfile().get("ANNO")); + rec->put("PROVV", rel->lfile().get("PROVV")); + rec->put("NDOC", rel->lfile().get("NDOC")); + _righe_rec->set_key(rec); for ( int i = 0; i < f.items( ); i ++ ) { TToken_string& t = f.row( i ); @@ -712,10 +768,8 @@ int TMotore_application::rewrite( const TMask& m ) int err = NOERR; if ( ! valida_operazione( OP_MODIFICA ) ) return FALSE; - if ( err == NOERR ) - { + if ( m.id2pos( F_OCCASEDIT) > 0 ) err = app( ).clifo( ).write_occas( ); - } if ( err == NOERR ) { err = TRelation_application::rewrite( m ); @@ -723,8 +777,13 @@ int TMotore_application::rewrite( const TMask& m ) { TSheet_field& f = ss( ); _righe_rec->destroy_rows( ); - if ( m.insert_mode( ) ) - _righe_rec->renum_key( "NRIGA", 1 ); + TRectype * rec = new TRectype(_righe_rec->key()); + TRelation * rel = get_relation(); + rec->put("CODNUM", rel->lfile().get("CODNUM")); + rec->put("ANNO", rel->lfile().get("ANNO")); + rec->put("PROVV", rel->lfile().get("PROVV")); + rec->put("NDOC", rel->lfile().get("NDOC")); + _righe_rec->set_key(rec); for ( int i = 0; i < f.items( ); i ++ ) { TToken_string& t = f.row( i ); @@ -830,6 +889,13 @@ void TMotore_application::store_riga( TSheet_field& f, int numrig, TRectype& r ) bool TMotore_application::user_create( ) { + // Metto in relazione testata e righe + _rel = new TRelation( LF_DOC ); // babbalone #5 creava file dopo maschera che la conteneva + rel( ).add( LF_RIGHEDOC,"CODNUM=CODNUM|ANNO=ANNO|PROVV=PROVV|NDOC=NDOC" ); + + // Inizializzo il Record_array + _righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 ); + TConfig ditta( CONFIG_DITTA ); // Controllo se sono cambiate le impostazioni delle vendite. @@ -843,36 +909,17 @@ bool TMotore_application::user_create( ) } _clifor = new TCliForVendite( ); azzera_piedi( ); - _msk = new TMask( "VE1000A" ); + _msk = new TMask( "ve1000a" ); query_mask( ).set_handler( F_NDOC, ndoc_handler ); query_mask( ).set_handler( F_CODNUM, num_handler ); query_mask( ).set_handler( F_TIPODOC, tip_handler ); TConfig utente( CONFIG_USER ); - TString16 codnum( utente.get( "CODNUM", "ve" ) ); - if ( !codnum.blank( ) ) - { - query_mask( ).set( F_CODNUM, codnum ); - query_mask( ).set( F_DESNUM, utente.get( "DESNUM", "ve" ) ); - // } - // TString16 tipodoc( utente.get( "TIPODOC", "ve" ) ); - // if ( !tipodoc.blank( ) ) - // { - TString16 profilo( utente.get( "PROFILO", "ve" ) ); - query_mask( ).set( F_TIPODOC, utente.get( "TIPODOC", "ve" ) ); - query_mask( ).set( F_DESTIPODOC, utente.get( "DESTIPODOC", "ve" ) ); - query_mask( ).set( F_PROFILO, profilo ); - } + _codnum = utente.get( "CODNUM", "ve" ); + if (!_codnum.blank( )) + _tipodoc = utente.get( "TIPODOC", "ve" ); // La maschera di inserimento/modifica per ora non la so! // Viene letta dal profilo non appena trovato il record - _msk1 = NULL; - // Metto in relazione testata e righe - _rel = new TRelation( LF_DOC ); - rel( ).add( LF_RIGHEDOC,"CODNUM=CODNUM|ANNO=ANNO|PROVV=PROVV|NDOC=NDOC" ); - - // Inizializzo il Record_array - _righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 ); - return TRUE; } @@ -880,16 +927,15 @@ bool TMotore_application::user_destroy( ) { // Registro l'ultimo tipo documento e l'ultima numerazione TConfig utente( CONFIG_USER ); - utente.set( "CODNUM", query_mask( ).get( F_CODNUM ), "ve" ); - utente.set( "TIPODOC", query_mask( ).get( F_TIPODOC ), "ve" ); - utente.set( "DESNUM", query_mask( ).get( F_DESNUM ), "ve" ); - utente.set( "DESTIPODOC", query_mask( ).get( F_DESTIPODOC ), "ve" ); - utente.set( "PROFILO", query_mask( ).get( F_PROFILO ), "ve" ); - // Se è ancora allocata, distruggo la maschera di modifica - if ( _msk1 ) delete _msk1; + utente.set( "CODNUM", _codnum, "ve" ); + utente.set( "TIPODOC", _tipodoc, "ve" ); +// utente.set( "DESNUM", query_mask( ).get( F_DESNUM ), "ve" ); +// utente.set( "DESTIPODOC", query_mask( ).get( F_DESTIPODOC ), "ve" ); +// utente.set( "PROFILO", _profilo, "ve" ); // Distruggo la maschera di modifica - delete _msk; + if ( _msk != NULL ) + delete _msk; // Distruggo la relazione delete _rel; diff --git a/ve/ve0100.h b/ve/ve0100.h index 7366beba9..198ed5719 100755 --- a/ve/ve0100.h +++ b/ve/ve0100.h @@ -76,8 +76,8 @@ #include "veuml1.h" #endif -#ifndef __VEUML2_H -#include "veuml2.h" +#ifndef __VERIG_H +#include "verig.h" #endif #ifndef __SHEET_H @@ -124,6 +124,26 @@ #include "sconti.h" #endif +class TTipo_documento : public TObject + +{ + TString16 _tipodoc; + TString16 _profile; + TFilename _profile_file; + TMask * _mask; + protected: + const char * profile_name() {return _profile; } + const char * profile_file() {return _profile_file; } + + public: + + const char * tipodoc() { return _tipodoc;} + TConfig * create_profile() { return new TConfig(_profile_file);} + TMask & mask() { return *_mask;} + TTipo_documento(const char * tipodoc); + virtual ~TTipo_documento(); +}; + // Definizione della classe dell'applicazione motore class TMotore_application : public TRelation_application { @@ -143,7 +163,7 @@ class TMotore_application : public TRelation_application TMask* _msk; // Puntatore alla maschera di modifica/inserimento ( dipende dal profilo ) - TVariable_mask* _msk1; + // TVariable_mask* _msk1; // puntatore alla relazione TRelation* _rel; @@ -157,12 +177,28 @@ class TMotore_application : public TRelation_application // Indica se il documento ha come soggetto un liente o un ornitore char _tipocf; + TString16 _profilo; + TString16 _codnum; + TString16 _tipodoc; + int _anno; + TString16 _tiponum; + long _numdoc; + + // Array di maschere documento + + TAssoc_array _doc_masks; + + // Array di maschere righe + + TAssoc_array _row_masks; + // Ridefinizione dei metodi virtuali virtual bool user_create( ); virtual bool user_destroy( ); virtual TMask* get_mask( int mode ); virtual bool changing_mask( int mode ); virtual TRelation* get_relation( ) const { return _rel;} + virtual void init_query_mode(TMask& m); virtual void init_insert_mode( TMask& m ); virtual int read( TMask& m ); virtual bool remove( void ); @@ -245,7 +281,7 @@ public: TConfig& pro( ) { CHECK( _pro, "Profilo del documento nullo!" ); return *_pro; } TFilename& proname( ) { CHECK( _proname, "Nome del profilo nullo!" ); return *_proname; } TMask& query_mask( ) { CHECK( _msk, "Maschera di ricerca nulla!" ); return *_msk; } - TMask& edit_mask( ) { CHECK( _msk1, "Maschera di modifica nulla!" ); return *_msk1; } + TMask& edit_mask( ) { return (TMask &) _doc_masks[_tipodoc]; } TRelation& rel( ) { CHECK( _rel, "Relazione nulla!" ); return *_rel; } TSheet_field& sheet( ) { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; } TCliForVendite& clifo( ) { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; } diff --git a/ve/ve0300.cpp b/ve/ve0300.cpp index ba7c8cdb8..8966284af 100755 --- a/ve/ve0300.cpp +++ b/ve/ve0300.cpp @@ -1356,6 +1356,7 @@ void TMask_generator::genera( const TString& profilo ) // dal motore, nascondo e adatto le colonne. // Generazione maschera dello sheet +/* _m->_out << "PA \"Pagina 1\" 8 5 64 13\n"; id( 101 ); @@ -1364,7 +1365,9 @@ void TMask_generator::genera( const TString& profilo ) _m->end( ); _m->end( ); _m->endmask( ); +*/ delete _m; + fcopy("verig00.msk", _mskname, TRUE); delete _pro; } diff --git a/ve/ve2100.cpp b/ve/ve2100.cpp index 4929e1530..9baf7d7fc 100755 --- a/ve/ve2100.cpp +++ b/ve/ve2100.cpp @@ -4,18 +4,25 @@ #include "ve2100.h" -#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); } -#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); } - +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); +} class TTabelle_sconti: public TRelation_application { TMask *_msk; // maschera principale TRelation *_rel; // relazione principale - char _sconti; // carattere che indica il tipo di tabella - bool _catven; // abilitazione della gestione della categoria di vendita - TString _gessco; // indicatore di abilitazione degli sconti incondizionati + char _sconti; // carattere che indica il tipo di tabella + bool _catven; // abilitazione della gestione della categoria di vendita + TString _gessco; // indicatore di abilitazione degli sconti incondizionati virtual bool user_create(); virtual bool user_destroy(); @@ -31,56 +38,56 @@ public: bool TTabelle_sconti::user_create() { - bool gotcha= FALSE; // booleano di avvenuta inizializzazione - short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati - int i; // indice di ciclo - - _sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella - if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando - else { - TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella - if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera - } - TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta - switch (_sconti) { - case 'D': // sconti documento - _msk= new TMask("VE2100D"); // apre la maschera relativa - set_search_field(F_D_CODCAT); // setta il campo di ricerca - gotcha= TRUE; - break; - case 'R': // sconti di riga - _msk= new TMask("VE2100R"); // apre la maschera relativa - set_search_field(F_R_RICERCA); // setta il campo di ricerca - _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita - if (!_catven) KILL(F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo - gotcha= TRUE; - break; - case 'I': // sconti incondizionati - _gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti + bool gotcha= FALSE; // booleano di avvenuta inizializzazione + short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati + int i; // indice di ciclo + + _sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella + if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando + else { + TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella + if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera + } + TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta + switch (_sconti) { + case 'D': // sconti documento + _msk= new TMask("VE2100D"); // apre la maschera relativa + set_search_field(F_D_CODCAT); // setta il campo di ricerca + gotcha= TRUE; + break; + case 'R': // sconti di riga + _msk= new TMask("VE2100R"); // apre la maschera relativa + set_search_field(F_R_RICERCA); // setta il campo di ricerca + _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita + if (!_catven) key_disable(*_msk, F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo + gotcha= TRUE; + break; + case 'I': // sconti incondizionati + _gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti if (_gessco=="A") { - _msk= new TMask("VE2100I"); // apre la maschera relativa - set_search_field(F_I_RICERCA); // setta il campo di ricerca - sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente - sci_k_id[1]= F_I_SCCLIENTI; - sci_k_id[2]= F_I_ZONE; - sci_k_id[3]= F_I_CONDPAG; - for (i=0; i<4; i++) { - if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato... - REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera... - gotcha= TRUE; // ...e viene settato il flag di ok - } else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera - } - _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita - if (!_catven) KILL(sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo - if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta"); - } else error_box("Gli sconti incondizionati non sono abilitati nella configurazione"); - break; - default: // messaggio di errore se si indica una tabella non valida - error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza"); - break; - } - if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file) - return (gotcha); + _msk= new TMask("VE2100I"); // apre la maschera relativa + set_search_field(F_I_RICERCA); // setta il campo di ricerca + sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente + sci_k_id[1]= F_I_SCCLIENTI; + sci_k_id[2]= F_I_ZONE; + sci_k_id[3]= F_I_CONDPAG; + for (i=0; i<4; i++) { + if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato... + key_enable(*_msk, sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera... + gotcha= TRUE; // ...e viene settato il flag di ok + } else key_disable(*_msk, sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera + } + _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita + if (!_catven) key_disable(*_msk, sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo + if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta"); + } else error_box("Gli sconti incondizionati non sono abilitati nella configurazione"); + break; + default: // messaggio di errore se si indica una tabella non valida + error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza"); + break; + } + if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file) + return (gotcha); } bool TTabelle_sconti::user_destroy() { diff --git a/ve/ve2100r.uml b/ve/ve2100r.uml index 7d7ad83ff..318021747 100755 --- a/ve/ve2100r.uml +++ b/ve/ve2100r.uml @@ -7,6 +7,12 @@ ENDPAGE PAGE "Archivio sconti di riga " 11 60 14 +GROUPBOX DLG_NULL 75 10 +BEGIN + PROMPT 0 0 "" + FLAG "R" +END + STRING F_R_RICERCA 1 BEGIN PROMPT 100 100 "" @@ -27,18 +33,19 @@ BEGIN OUTPUT F_R_SCONTO SCONTO END -LISTA F_R_TIPO 1 +LIST F_R_TIPO 1 BEGIN PROMPT 100 100 "" - FIELD LF_SCONTI->TIPO - FLAG "H" + FIELD TIPO + FLAGS "D" + KEY 1 ITEM "R|Sconti di riga" END STRING F_R_CODCAT 2 BEGIN PROMPT 2 2 "Cat. vendita " - FIELD LF_SCONTI->CODCAT + FIELD CODCAT FLAG "U" KEY 1 USE %CVE @@ -47,7 +54,8 @@ BEGIN DISPLAY "Descrizione@50" S0 OUTPUT F_R_CODCAT CODTAB OUTPUT F_R_DESCAT S0 - VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART + CHECKTYPE REQUIRED +// VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART END STRING F_R_DESCAT 50 @@ -59,7 +67,7 @@ END STRING F_R_CODART 20 BEGIN PROMPT 2 4 "Cod. articolo " - FIELD LF_SCONTI->CODART + FIELD CODART FLAG "U" KEY 1 USE LF_ANAGR @@ -68,13 +76,16 @@ BEGIN DISPLAY "Descrizione@50" DESCR OUTPUT F_R_CODART CODART OUTPUT F_R_DESART DESCR - VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART + CHECKTYPE SEARCH + VALIDATE REQIF_FUNC 1 F_R_UM + WARNING "Il codice articolo e' necessario se si specifica l'unita' di misura" +// VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART END STRING F_R_UM 2 BEGIN PROMPT 50 4 "U.M. " - FIELD LF_SCONTI->UM + FIELD UM FLAG "U" KEY 1 USE LF_UMART KEY 2 @@ -84,7 +95,7 @@ BEGIN DISPLAY "U.M." UM DISPLAY "Desccrizione@50" %UMS->S0 OUTPUT F_R_UM UM - VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART +// VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART END STRING F_R_DESART 50 @@ -93,16 +104,11 @@ BEGIN FLAG "D" END -GROUPBOX DLG_NULL 75 10 -BEGIN - PROMPT 0 0 "" - FLAG "R" -END STRING F_R_SCONTO 25 BEGIN PROMPT 2 12 "Sconto " - FIELD LF_SCONTI->SCONTO + FIELD SCONTO END ENDPAGE diff --git a/ve/ve2200.cpp b/ve/ve2200.cpp index b420fbf73..835f559fe 100755 --- a/ve/ve2200.cpp +++ b/ve/ve2200.cpp @@ -11,39 +11,47 @@ #include "veconf.h" #define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe -#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); } -#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); } +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_disable(TMask & m, short id, int key = 1) +{ + ((TEditable_field &)m.field(id)).reset_key(key); + m.disable(id); +} class TCondizioni_vendita: public TRelation_application { - TMask *_msk; // maschera principale - TRelation *_rel; // relazione principale + TMask *_msk; // maschera principale + TRelation *_rel; // relazione principale - TString16 _condven; // stringa che indica il tipo di archivio - TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti + 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 _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF + bool _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi - virtual bool user_create(); - 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; } + virtual bool user_create(); + 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; } - 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à) - static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo) + 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à) + static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo) - 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 + 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 public: - TCondizioni_vendita() {} - virtual ~TCondizioni_vendita() {} + TCondizioni_vendita() {} + virtual ~TCondizioni_vendita() {} }; @@ -55,103 +63,103 @@ TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe bool TCondizioni_vendita::user_create() { - bool gotcha= FALSE; // booleano di avvenuta inizializzazione - - _condven= "*"; // inizializzazione dell'indicatore del tipo di archivio - if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando - else { - TMask choose("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= new TMask("VE2200X"); - TConfig prassid(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 è 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); - DESTROY(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) 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à 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 è 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_L_DESVEN); - DESTROY(F_L_CODSUCC); - DESTROY(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. - KILL(F_C_TIPOCF); - KILL(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à 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 è 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_DESCF); - DESTROY(F_L_DESVEN); - DESTROY(F_C_OBBLIG); - DESTROY(F_L_CODSUCC); - DESTROY(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à 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 è 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à - if (!_gest_um) _msk->disable(F_GESTUM); // disabilita condizionalmente il booleano di gestione delle unità 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 è disabilitata i campi di gestione vengono disabilitati - _msk->disable(F_CODVAL); - _msk->disable(F_CAMBIO); - _msk->disable(F_DATACAM); - } - } - return (gotcha); + bool gotcha= FALSE; // booleano di avvenuta inizializzazione + + _condven= "*"; // inizializzazione dell'indicatore del tipo di archivio + if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando + else { + TMask choose("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= new TMask("VE2200X"); + TConfig prassid(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 è abilititato"); // controlla che l'archivio listini sia abilitato + else { + // eliminazione campi di altri archivi + 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à 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 è abilititato"); // controlla che l'archivio listini sia abilitato + else { + // settaggio dei campi da eliminare + 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); + 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à 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 è abilititato"); // controlla che l'archivio listini sia abilitato + else { + // settaggio dei campi da eliminare + 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à 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 è 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à + if (!_gest_um) _msk->disable(F_GESTUM); // disabilita condizionalmente il booleano di gestione delle unità 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 è disabilitata i campi di gestione vengono disabilitati + _msk->disable(F_CODVAL); + _msk->disable(F_CAMBIO); + _msk->disable(F_DATACAM); + } + } + return (gotcha); } bool TCondizioni_vendita::user_destroy() { @@ -161,111 +169,111 @@ bool TCondizioni_vendita::user_destroy() { } bool TCondizioni_vendita::handle_mask(TMask &m, KEY k) { - 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; + 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; } 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 - 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; + if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso + 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; } bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k) { - if (k==K_TAB) { - if (fld.get().not_empty()) { - TMask &m= fld.mask(); // prende la maschera principale - if (m.get(F_VALIN).not_empty()) { - TDate valfin(fld.get()); // prende la data di fine validità - TDate valin(m.get(F_VALIN)); // prende la data di inizio validità - if (valfinlfile(); // 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 + 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 } int TCondizioni_vendita::rewrite(const TMask &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 + 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 } bool TCondizioni_vendita::remove() { - TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale + TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale 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 @@ -273,9 +281,9 @@ bool TCondizioni_vendita::remove() { 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 è 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")); - } + delrec.put("TIPOCF", condv.get("TIPOCF")); // setta i dati del cliente/fornitore se siamo nei contratti + delrec.put("CODCF", condv.get("CODCF")); + } 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 @@ -284,10 +292,10 @@ bool TCondizioni_vendita::remove() { if (n==1) proceed= yesno_box("Esiste una riga collegata a questa testata: verrà 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()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); } @@ -66,10 +91,10 @@ bool TRighe_condizioni_vendita::user_create() { TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente switch (_rcondven[0]) { case 'L': // listini - 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); + 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); _msk->hide(F_R_C_DESCF); _msk->hide(F_R_C_DES); _msk->hide(F_R_O_DES); @@ -78,18 +103,18 @@ bool TRighe_condizioni_vendita::user_create() { // _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 - if (!_codlis_catven) KILL(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à 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 + 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à 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 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 - DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare... - DESTROY(F_R_L_COD); - DESTROY(F_R_O_COD); + 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); _msk->hide(F_R_L_DESVEN); _msk->hide(F_R_L_DES); _msk->hide(F_R_O_DES); @@ -98,31 +123,31 @@ bool TRighe_condizioni_vendita::user_create() { _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. - KILL(F_R_C_TIPOCF); - KILL(F_R_C_CODCF); + key_disable(*_msk, F_R_C_TIPOCF); + key_disable(*_msk, F_R_C_CODCF); } - _gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità 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 + _gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità 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 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 - 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); + 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); _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); - _gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità 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 + _gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità 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 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; @@ -135,7 +160,7 @@ bool TRighe_condizioni_vendita::user_create() { _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 - _um= _gest_um; // abilita le unità di misura in base alla configurazione + _um= _gest_um; // abilita le unità di misura in base alla configurazione hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA } return (gotcha); @@ -158,15 +183,15 @@ void TRighe_condizioni_vendita::hide_and_show_codriga() { 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 - CREATE(id_campi_1[i]); + key_show(*_msk, id_campi_1[i]); _msk->show(id_campi_2[i]); } else { // i campi non corrispondenti al tag vengono resi invisibili - DESTROY(id_campi_1[i]); + key_hide(*_msk, id_campi_1[i]); _msk->hide(id_campi_2[i]); } } - if (_um && (tag_campo=='A')) { REVIVE(F_R_UM); } // se la gest. delle u.m. è abilitata, il campo viene attivato se la riga è un articolo... - else { KILL(F_R_UM); } // ...altrimenti viene disattivato + if (_um && (tag_campo=='A')) { key_enable(*_msk, F_R_UM); } // se la gest. delle u.m. è abilitata, il campo viene attivato se la riga è un articolo... + else { key_disable(*_msk, F_R_UM); } // ...altrimenti viene disattivato } } @@ -203,14 +228,14 @@ bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) { if (_gest_um) _um= condv.get_bool("GESTUM"); // legge lo stato di abilitazione della gestione delle unità di misura hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura" if (_gest_sca && condv.get_bool("GESTSCAGL")) { - REVIVE(F_R_NSCAGL); // abilita il campo "numero scaglione" + key_enable(*_msk, F_R_NSCAGL); // abilita il campo "numero scaglione" _msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione" } else { - KILL(F_R_NSCAGL); // disabilita il campo "numero scaglione" + key_disable(*_msk, F_R_NSCAGL); // disabilita il campo "numero scaglione" _msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione" } if (condv.get_bool("SCONST") || (_gest_um && condv.get_bool("GESTSCO"))) _msk->enable(F_R_SCONTO); // abilita il campo "sconto" - else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto" + else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto" if (_gest_so && condv.get_bool("GESTSCO")) { _msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio" _msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto" @@ -233,7 +258,7 @@ bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) { } int TRighe_condizioni_vendita::write(const TMask &m) { - m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione + 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 @@ -244,7 +269,7 @@ int TRighe_condizioni_vendita::write(const TMask &m) { } int TRighe_condizioni_vendita::rewrite(const TMask &m) { - m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione + 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 diff --git a/ve/verig.h b/ve/verig.h new file mode 100755 index 000000000..c3a6e399a --- /dev/null +++ b/ve/verig.h @@ -0,0 +1,48 @@ +#ifndef __VERIG_H +#define __VERIG_H + + +#define FR_STATORIGA 101 +#define FR_TIPORIGA 102 +#define FR_CODMAG 103 +#define FR_CODDEP 104 +// CODART CODSPV CODSPQ CODSPP alternativi definirne uno solo +#define FR_CODART 105 +#define FR_CODSPV 105 +#define FR_CODSPQ 105 +#define FR_CODSPP 105 +// DESCR DESCRSPV DESCPSPQ DESCRSPP alternativi definirne uno solo +#define FR_DESCR 106 +#define FR_DESCRSPV 106 +#define FR_DESCRSPQ 106 +#define FR_DESCRSPP 106 +// UMQTA UMQTASP alternativi definirne uno solo +#define FR_UMQTA 107 +#define FR_UMQTASP 107 +// QTA PERCSP alternativi definirne uno solo +#define FR_QTA 108 +#define FR_PERCSP 108 +// PREZZO VALORE alternativi definirne uno solo +#define FR_PREZZO 109 +#define FR_VALORE 109 +#define FR_QTAEVASA 110 +#define FR_RIGAEVASA 111 +#define FR_TARA 112 +#define FR_PNETTO 113 +#define FR_NCOLLI 114 +#define FR_DAEVADERE 115 +#define FR_SCONTO 116 +#define FR_PERCPROV 117 +#define FR_IMPFISUN 118 +#define FR_IMPFISSO 119 +#define FR_CODIVA 120 +#define FR_ADDIVA 121 +#define FR_ASPBENI 122 +#define FR_END 123 +#define MAX_COLUMNS FR_END-FR_STATORIGA + +#define FR_DESMAG 150 +#define FR_DESDEP 151 +#define FR_DESIVA 152 +#define FR_DESASP 153 +#endif diff --git a/ve/verig.uml b/ve/verig.uml new file mode 100755 index 000000000..aa367d76f --- /dev/null +++ b/ve/verig.uml @@ -0,0 +1,596 @@ +#ifdef FULL_SCREEN +TOOLBAR "" 0 20 0 2 +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_DELREC 9 2 +BEGIN + PROMPT -33 -1 "Elimina" + MESSAGE EXIT,K_DEL +END +ENDPAGE +#endif + +#ifndef MASK_WIDTH +#define MASK_WIDTH 74 +#endif + +#ifndef MASK_HEIGHT +#define MASK_HEIGHT 19 +#endif + +#ifndef MASK_TITLE1 +#define MASK_TITLE1 "" +#endif + +PAGE MASK_TITLE1 -1 -1 MASK_WIDTH MASK_HEIGHT + +STRING FR_STATORIGA 2 +BEGIN + PROMPT 0 0 "" + FLAGS "H" +END + +STRING FR_TIPORIGA 2 +BEGIN + PROMPT 0 0 "" + FLAGS "H" +END + +IFDEF(F_CODMAG) +STRING FR_CODMAG 3 +BEGIN +IFDEF(X_CODMAG) + PROMPT X_CODMAG Y_CODMAG PR_CODMAG +ELSEIF + PROMPT 2 3 "Magazzino " +ENDIF + USE MAG SELECT CODTAB ? "???" + INPUT CODTAB[1,3] FR_CODMAG + DISPLAY "Codice" CODTAB[1,3] + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODMAG CODTAB[1,3] + OUTPUT FR_DESMAG S0 +IFDEF(CH_CODMAG) + CHECKTYPE CH_CODMAG +ELSEIF + CHECKTYPE NORMAL +ENDIF + FLAGS "U" +IFDEF(FL_CODMAG) + FLAGS FL_CODMAG +ENDIF + KEY 1 +END +ENDIF + +IFDEF(F_DESMAG) +STRING FR_DESMAG 50 +BEGIN +IFDEF(X_DESMAG) + PROMPT X_DESMAG Y_DESMAG PR_DESMAG +ELSEIF + PROMPT 22 3 "" +ENDIF +IFDEF(FL_DESMAG) + FLAGS FL_DESMAG +ENDIF + FLAGS "D" +END +ENDIF + +IFDEF(F_CODDEP) +STRING FR_CODDEP 2 +BEGIN +IFDEF(X_DESMAG) + PROMPT X_DESMAG Y_DESMAG PR_DESMAG +ELSEIF + PROMPT 2 4 "Deposito " +ENDIF + USE MAG SELECT (CODTAB[1,3]==#FR_CODMAG) && (CODTAB ? "?????") + IN CODTAB[1,3] FR_CODMAG + IN CODTAB[4,5] FR_CODDEP + DISPLAY "Codice mag." CODTAB[1,3] + DISPLAY "Codice dep." CODTAB[4,5] + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODMAG CODTAB[1,3] + OUTPUT FR_CODDEP CODTAB[4,5] + OUTPUT FR_DESDEP S0 + MESSAGE DIRTY,FR_CODMAG|K_TAB,FR_CODMAG +IFDEF(CH_CODDEP) + CHECKTYPE CH_CODDEP +ELSEIF + CHECKTYPE NORMAL +ENDIF +IFDEF(FL_CODDEP) + FLAGS FL_CODDEP +ENDIF + FLAGS "U" + KEY 1 +END +ENDIF + +IFDEF(F_DESDEP) +STRING FR_DESDEP 50 +BEGIN +IFDEF(X_DESDEP) + PROMPT X_DESDEP Y_DESDEP PR_DESDEP +ELSEIF + PROMPT 22 4 "" +ENDIF + FLAGS "D" +END +ENDIF + +IFDEF(F_CODART) +ST FR_CODART 20 +BEGIN +IFDEF(X_CODART) + PROMPT X_CODART Y_CODART PR_CODART +ELSEIF + PROMPT 2 6 "Articolo " +ENDIF + USE LF_ANAMAG KEY 1 + INPUT CODART FR_CODART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT FR_CODART CODART + OUTPUT FR_DESCR DESCR + WARNING "Articolo assente" +IFDEF(CH_CODART) + CHECKTYPE CH_CODART +ELSEIF + CHECKTYPE REQUIRED +ENDIF +IFDEF(FL_CODART) + FLAGS FL_CODART +ENDIF +END +ENDIF + +IFDEF(F_CODSPV) +STRING FR_CODSPV 3 +BEGIN +IFDEF(X_CODSPV) + PROMPT X_CODSPV Y_CODSPV PR_CODSPV +ELSEIF + PROMPT 2 6 "Spesa " +ENDIF + USE SPP SELECT S6=="V" + INPUT CODTAB FR_CODSPV + DISPLAY "Codice spesa" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODSPV CODTAB + OUTPUT FR_DESCRSPV S0 + OUTPUT FR_VALORE R0 + OUTPUT FR_CODIVA S1[1,4] +IFDEF(CH_CODSPV) + CHECKTYPE CH_CODSPV +ELSEIF + CHECKTYPE REQUIRED +ENDIF +END +ENDIF + +IFDEF(F_CODSPQ) +STRING FR_CODSPQ 3 +BEGIN +IFDEF(X_CODSPQ) + PROMPT X_CODSPQ Y_CODSPQ PR_CODSPQ +ELSEIF + PROMPT 2 6 "Spesa " +ENDIF + USE SPP SELECT S6=="Q" + INPUT CODTAB FR_CODSPQ + DISPLAY "Codice spesa" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODSPQ CODTAB + OUTPUT FR_DESCRSPQ S0 + OUTPUT FR_PREZZO R0 + OUTPUT FR_CODIVA S1[1,4] +IFDEF(CH_CODSPQ) + CHECKTYPE CH_CODSPQ +ELSEIF + CHECKTYPE REQUIRED +ENDIF +END +ENDIF + +IFDEF(F_CODSPP) +STRING FR_CODSPP 3 +BEGIN +IFDEF(X_CODSPP) + PROMPT X_CODSPP Y_CODSPP PR_CODSPP +ELSEIF + PROMPT 2 6 "Spesa " +ENDIF + USE SPP SELECT S6=="P" + INPUT CODTAB FR_CODSPP + DISPLAY "Codice spesa" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODSPP CODTAB + OUTPUT FR_DESCRSPP S0 + OUTPUT FR_PERCSP R0 + OUTPUT FR_CODIVA S1[1,4] +IFDEF(CH_CODSPP) + CHECKTYPE CH_CODSPP +ELSEIF + CHECKTYPE REQUIRED +ENDIF +END +ENDIF + +IFDEF(F_DESCR) +ZOOM FR_DESCR 50 +BEGIN +IFDEF(X_DESCR) + PROMPT X_DESCR Y_DESCR PR_DESCR +ELSEIF + PROMPT 2 7 "Descrizione " +ENDIF + USE LF_ANAMAG KEY 2 + INPUT DESCR FR_DESCR + DISPLAY "Descrizione@50" DESCR + DISPLAY "Codice@20" CODART + OUTPUT FR_CODART CODART + OUTPUT FR_DESCR DESCR +END +ENDIF + +IFDEF(F_DESCRSPV) +ZOOM FR_DESCRSPV 50 +BEGIN +IFDEF(X_DESCRSPV) + PROMPT X_DESCRSPV Y_DESCRSPV PR_DESCRSPV +ELSEIF + PROMPT 2 7 "Descrizione " +ENDIF + USE SPP KEY 2 SELECT S6=="V" + INPUT S0 FR_DESCRSPV + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice spesa" CODTAB + COPY OUTPUT FR_CODSPV +END +ENDIF + +IFDEF(F_DESCRSPQ) +ZOOM FR_DESCRSPQ 50 +BEGIN +IFDEF(X_DESCRSPV) + PROMPT X_DESCRSPQ Y_DESCRSPQ PR_DESCRSPQ +ELSEIF + PROMPT 2 7 "Descrizione " +ENDIF + USE SPP KEY 2 SELECT S6=="Q" + INPUT S0 FR_DESCRSPQ + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice spesa" CODTAB + COPY OUTPUT FR_CODSPQ +END +ENDIF + +IFDEF(F_DESCRSPP) +ZOOM FR_DESCRSPP 50 +BEGIN +IFDEF(X_DESCRSPP) + PROMPT X_DESCRSPP Y_DESCRSP PR_DESCRSPP +ELSEIF + PROMPT 2 7 "Descrizione " +ENDIF + USE SPP KEY 2 SELECT S6=="P" + INPUT S0 FR_DESCRSPP + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice spesa" CODTAB + COPY OUTPUT FR_CODSPP +END +ENDIF + +IFDEF(F_UMQTA) +STRING FR_UMQTA 2 +BEGIN +IFDEF(X_UMQTA) + PROMPT X_UMQTA Y_UMQTA PR_UMQTA +ELSEIF + PROMPT 2 9 "U.M. " +ENDIF + USE LF_UMART KEY 2 + JOIN %UMS INTO CODTAB=UM + INPUT CODART FR_CODART SE + INPUT UM FR_UMQTA + DISPLAY "Codice@20" UM + DISPLAY "Descrizione@50" %UMS->S0 + OUTPUT FR_UMQTA UM +IFDEF(CH_UMQTA) + CHECKTYPE CH_UMQTA +ELSEIF + CHECKTYPE NORMAL +ENDIF +END +ENDIF + +IFDEF(F_UMQTASP) +STRING FR_UMQTASP 2 +BEGIN +IFDEF(X_UMQTASP) + PROMPT X_UMQTASP Y_UMQTASP PR_UMQTASP +ELSEIF + PROMPT 2 9 "U.M. " +ENDIF + USE %UMS + INPUT CODTAB FR_UMQTASP + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_UMQTASP CODTAB +IFDEF(CH_UMQTASP) + CHECKTYPE CH_UMQTASP +ELSEIF + CHECKTYPE NORMAL +ENDIF +END +ENDIF + +IFDEF(F_QTA) +NUMBER FR_QTA 11 3 +BEGIN +IFDEF(X_QTA) + PROMPT X_QTA Y_QTA PR_QTA +ELSEIF + PROMPT 22 9 "Qta' " +ENDIF +END +ENDIF + +IFDEF(F_PERCSP) +NUMBER FR_QTA 6 2 +BEGIN +IFDEF(X_PERCSP) + PROMPT X_PERCSP Y_PERCSP PR_PERCSP +ELSEIF + PROMPT 22 9 "%Spesa " +ENDIF +END +ENDIF + +IFDEF(F_PREZZO) +NUMBER FR_PREZZO 15 3 +BEGIN +IFDEF(X_PREZZO) + PROMPT X_PREZZO Y_PREZZO PR_PREZZO +ELSEIF + PROMPT 42 9 "Prezzo " +ENDIF +END +ENDIF + +IFDEF(F_VALORE) +NUMBER FR_VALORE 15 3 +BEGIN +IFDEF(X_VALORE) + PROMPT X_VALORE Y_VALORE PR_VALORE +ELSEIF + PROMPT 42 9 "Valore " +ENDIF +END +ENDIF + +IFDEF(F_QTAEVASA) +NUMBER FR_QTAEVASA 11 3 +BEGIN +IFDEF(X_QTAEVASA) + PROMPT X_QTAEVASA Y_QTAEVASA PR_QTAEVASA +ELSEIF + PROMPT 17 10 "Q.ta evasa " +ENDIF +END +ENDIF + +IFDEF(F_RIGAEVASA) +BOOLEAN FR_RIGAEVASA +BEGIN +IFDEF(X_RIGAEVASA) + PROMPT X_RIGAEVASA Y_RIGAEVASA PR_RIGAEVASA +ELSEIF + PROMPT 42 10 "Saldata " +ENDIF +END +ENDIF + +IFDEF(F_TARA) +NUMBER FR_TARA 15 2 +BEGIN +IFDEF(X_TARA) + PROMPT X_TARA Y_TARA PR_TARA +ELSEIF + PROMPT 2 11 "Tara " +ENDIF +END +ENDIF + +IFDEF(F_PNETTO) +NUMBER FR_PNETTO 15 2 +BEGIN +IFDEF(X_PNETTO) + PROMPT X_PNETTO Y_PNETTO PR_PNETTO +ELSEIF + PROMPT 30 11 "Peso netto " +ENDIF +END +ENDIF + +IFDEF(F_NCOLLI) +NUMBER FR_NCOLLI 7 +BEGIN +IFDEF(X_NCOLLI) + PROMPT X_NCOLLI Y_NCOLLI PR_NCOLLI +ELSEIF + PROMPT 2 12 "N.Colli " +ENDIF +END +ENDIF + +IFDEF(F_DAEVADERE) +BOOLEAN FR_DAEVADERE +BEGIN +IFDEF(X_DAEVADERE) + PROMPT X_DAEVADERE Y_DAEVADERE PR_DAEVADERE +ELSEIF + PROMPT 22 12 "Da evadere " +ENDIF +END +ENDIF + +IFDEF(F_SCONTO) +STRING FR_SCONTO 25 +BEGIN +IFDEF(X_SCONTO) + PROMPT X_SCONTO Y_SCONTO PR_SCONTO +ELSEIF + PROMPT 2 13 "Sconto " +ENDIF +END +ENDIF + +IFDEF(F_PERCPROV) +NUMBER FR_PERCPROV 5 2 +BEGIN +IFDEF(X_PERCPROV) + PROMPT X_PERCPROV Y_PERCPROV PR_PERCPROV +ELSEIF + PROMPT 42 13 "Perc.Provv. " +ENDIF +END +ENDIF + +IFDEF(F_IMPFISUN) +BOOLEAN FR_IMPFISUN +BEGIN +IFDEF(X_IMPFISUN) + PROMPT X_IMPFISUN Y_IMPFISUN PR_IMPFISUN +ELSEIF + PROMPT 2 14 "Importo provv.unitario" +ENDIF +END +ENDIF + + +IFDEF(F_IMPFISSO) +NUMBER FR_IMPFISSO 18 2 +BEGIN +IFDEF(X_IMPFISSO) + PROMPT X_IMPFISSO Y_IMPFISSO PR_IMPFISSO +ELSEIF + PROMPT 42 14 "Imp.Provv. " +ENDIF +END +ENDIF + +IFDEF(F_CODIVA) +STRING FR_CODIVA 4 +BEGIN +IFDEF(X_CODIVA) + PROMPT X_CODIVA Y_CODIVA PR_CODIVA +ELSEIF + PROMPT 2 15 "Cod. IVA " +ENDIF + USE %IVA + INPUT CODTAB FR_CODIVA + DISPLAY "Codice@20" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODIVA CODTAB + OUTPUT FR_DESIVA S0 + FLAGS "U" + VALIDATE ZEROFILL_FUNC 2 +IFDEF(CH_CODIVA) + CHECKTYPE CH_CODIVA +ELSEIF + CHECKTYPE NORMAL +ENDIF +END +ENDIF + +IFDEF(F_DESIVA) +STRING FR_DESIVA 50 +BEGIN +IFDEF(X_DESIVA) + PROMPT X_DESIVA Y_DESIVA PR_DESIVA +ELSEIF + PROMPT 22 15 "" +ENDIF + FLAGS "D" +END +ENDIF + +IFDEF(F_ADDIVA) +BOOLEAN FR_ADDIVA +BEGIN +IFDEF(X_ADDIVA) + PROMPT X_ADDIVA Y_ADDIVA PR_ADDIVA +ELSEIF + PROMPT 2 16 "Addebito IVA" +ENDIF +END +ENDIF + +IFDEF(F_ASPBENI) +STRING FR_ASPBENI 2 +BEGIN +IFDEF(X_ASPBENI) + PROMPT X_ASPBENI Y_ASPBENI PR_ASPBENI +ELSEIF + PROMPT 2 17 "Aspetto Beni " +ENDIF + USE %ABE + INPUT CODTAB FR_ASPBENI + DISPLAY "Codice@20" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_ASPBENI CODTAB + OUTPUT FR_DESASP S0 + FLAGS "UZ" +IFDEF(CH_ASPBENI) + CHECKTYPE CH_ASPBENI +ELSEIF + CHECKTYPE NORMAL +ENDIF +END +ENDIF + +IFDEF(F_DESASP) +STRING FR_DESASP 50 +BEGIN +IFDEF(X_DESASP) + PROMPT X_DESASP Y_DESASP PR_DESASP +ELSEIF + PROMPT 22 17 "" +ENDIF + FLAGS "D" +END +ENDIF + +#ifndef FULL_SCREEN +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_DELREC 9 2 +BEGIN + PROMPT -33 -1 "Elimina" + MESSAGE EXIT,K_DEL +END +#endif + +ENDPAGE + +ENDMASK diff --git a/ve/verig00.uml b/ve/verig00.uml new file mode 100755 index 000000000..6d18d827c --- /dev/null +++ b/ve/verig00.uml @@ -0,0 +1,29 @@ +#include "verigdef.h" + +DEFINE_FIELD(CODMAG) +DEFINE_FIELD(DESMAG) +DEFINE_FIELD(CODDEP) +DEFINE_FIELD(DESDEP) +DEFINE_FIELD(CODART) +DEFINE_FIELD(DESCR) +DEFINE_FIELD(UMQTA) +DEFINE_FIELD(QTA) +DEFINE_FIELD(PREZZO) +DEFINE_FIELD(QTAEVASA) +DEFINE_FIELD(RIGAEVASA) +DEFINE_FIELD(TARA) +DEFINE_FIELD(PNETTO) +DEFINE_FIELD(NCOLLI) +DEFINE_FIELD(DAEVADERE) +DEFINE_FIELD(SCONTO) +DEFINE_FIELD(PERCPROV) +DEFINE_FIELD(IMPFISSO) +DEFINE_FIELD(IMPFISUN) +DEFINE_FIELD(CODIVA) +DEFINE_FIELD(DESIVA) +DEFINE_FIELD(ADDIVA) +DEFINE_FIELD(ASPBENI) +DEFINE_FIELD(DESASP) + + +#include "verig.uml" diff --git a/ve/verig01.uml b/ve/verig01.uml new file mode 100755 index 000000000..10dd98d0b --- /dev/null +++ b/ve/verig01.uml @@ -0,0 +1,29 @@ +#include "verigdef.h" + +#define FULL_SCREEN +// else +// #define MASK_WIDTH 60 +// #define MASK_HEIGHT 14 +// +#define MASK_TITLE1 "Merce" + + +DEFINE_FIELD(CODMAG) +// F_POS(CODMAG, 2, 3, "Magazzino ") +// F_FLG(CODMAG, "U") +// F_CHK(CODMAG, REQUIRED) +DEFINE_FIELD(DESMAG) +DEFINE_FIELD(CODDEP) +DEFINE_FIELD(DESDEP) +DEFINE_FIELD(CODART) +DEFINE_FIELD(DESCR) +DEFINE_FIELD(UMQTA) +DEFINE_FIELD(QTA) +DEFINE_FIELD(PREZZO) +DEFINE_FIELD(SCONTO) +DEFINE_FIELD(PERCPROV) +DEFINE_FIELD(CODIVA) +DEFINE_FIELD(DESIVA) + +#include "verig.uml" + diff --git a/ve/verig02.uml b/ve/verig02.uml new file mode 100755 index 000000000..030a639e1 --- /dev/null +++ b/ve/verig02.uml @@ -0,0 +1,15 @@ +#include "verigdef.h" + +#define FULL_SCREEN + +#define MASK_TITLE1 "Spese di tipo (Valore)" + +DEFINE_FIELD(CODSPV) +DEFINE_FIELD(DESCRSPV) +DEFINE_FIELD(VALORE) +DEFINE_FIELD(SCONTO) +DEFINE_FIELD(CODIVA) +DEFINE_FIELD(DESIVA) + +#include "verig.uml" + diff --git a/ve/verig03.uml b/ve/verig03.uml new file mode 100755 index 000000000..b22df852b --- /dev/null +++ b/ve/verig03.uml @@ -0,0 +1,17 @@ +#include "verigdef.h" + +#define FULL_SCREEN + +#define MASK_TITLE1 "Spese di tipo (Quantita'/Prezzo)" + +DEFINE_FIELD(CODSPQ) +DEFINE_FIELD(DESCRSPQ) +DEFINE_FIELD(UMQTASP) +DEFINE_FIELD(QTA) +DEFINE_FIELD(PREZZO) +DEFINE_FIELD(SCONTO) +DEFINE_FIELD(CODIVA) +DEFINE_FIELD(DESIVA) + +#include "verig.uml" + diff --git a/ve/verig04.uml b/ve/verig04.uml new file mode 100755 index 000000000..5fd905b6b --- /dev/null +++ b/ve/verig04.uml @@ -0,0 +1,14 @@ +#include "verigdef.h" + +#define FULL_SCREEN + +#define MASK_TITLE1 "Spese di tipo (Percentuale)" + +DEFINE_FIELD(CODSPP) +DEFINE_FIELD(DESCRSPP) +DEFINE_FIELD(PERCSP) +DEFINE_FIELD(CODIVA) +DEFINE_FIELD(DESIVA) + +#include "verig.uml" + diff --git a/ve/verigdef.h b/ve/verigdef.h new file mode 100755 index 000000000..cf2cc5c67 --- /dev/null +++ b/ve/verigdef.h @@ -0,0 +1,17 @@ +#define INCLDEF(file) !include file +#define IFDEF(name) !ifdef name +#define IF(cond) !if cond +#define ENDIF !endif +#define ELSEIF !else + +#define DEFINE_FIELD(name) !define F_##name ; + +#define F_POS(name, row, col, prompt) !define X_##name row ;\ +!define Y_##name col ;\ +!define PR_##name prompt ; + +#define F_FLG(name, flags) !define FL_##name flags ; + +#define F_CHK(name, type) !define CH_##name type ; +INCLDEF("verig.h") +