Modifiche generali alle vendite.
git-svn-id: svn://10.65.10.50/trunk@2237 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ce0a332775
commit
407c8a6a87
435
ve/sconti.cpp
435
ve/sconti.cpp
@ -1,116 +1,319 @@
|
||||
#ifndef __SCONTI_H
|
||||
#include "sconti.h"
|
||||
#endif
|
||||
|
||||
const real TSconto::cento( "100" );
|
||||
|
||||
void TSconto::set( const TString& exp, bool signal )
|
||||
{
|
||||
TString work( exp );
|
||||
TString goodexp;
|
||||
TString num;
|
||||
|
||||
// Elimina gli spazi molesti
|
||||
work.strip_spaces( );
|
||||
// Per ora nessun errore
|
||||
_errorpos = -1;
|
||||
|
||||
int i = 0;
|
||||
_part = 1.0;
|
||||
const int wlen = work.len( );
|
||||
// Flag che indica se sono nella parte decimale di un numero
|
||||
bool dec = FALSE;
|
||||
// Flag che indica se si attende l'inizio di un numero
|
||||
bool startnum = TRUE;
|
||||
// Flag che indica se siamo all'inizio di un numero
|
||||
while ( i < wlen && _errorpos < 0 )
|
||||
{
|
||||
char c = work[ i++ ];
|
||||
switch( c )
|
||||
{
|
||||
case '+':
|
||||
case '-':
|
||||
// Se ero in in numero ...
|
||||
if( !startnum )
|
||||
{
|
||||
// Aggiunge il numero alla sequenza
|
||||
real newval( num );
|
||||
_part = _part * ( cento + newval ) / cento;
|
||||
if( newval >= 0 )
|
||||
goodexp << '+';
|
||||
goodexp << num;
|
||||
}
|
||||
// Inizia il nuovo numero
|
||||
num = ( c == '-' )?"-":"";
|
||||
startnum = TRUE;
|
||||
dec = FALSE;
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
num << c;
|
||||
startnum = FALSE;
|
||||
break;
|
||||
case '.':
|
||||
case ',':
|
||||
// Se siamo già nella parte decimale ...
|
||||
if( dec )
|
||||
{
|
||||
// Segnala un errore
|
||||
_errorpos = i;
|
||||
break;
|
||||
}
|
||||
// Se occorrenva un numero ci metto lo 0
|
||||
if( startnum )
|
||||
num << '0';
|
||||
// Interpreto la virgola come punto
|
||||
num << '.';
|
||||
dec = TRUE;
|
||||
startnum = TRUE;
|
||||
break;
|
||||
default:
|
||||
_errorpos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Controlla la validità
|
||||
_valid = ( _errorpos < 0 );
|
||||
// Se richiesto segnala l'errore
|
||||
if( !_valid && signal )
|
||||
warning_box( "Espressione di sconto non valida. Errore sul carattere %d.", _errorpos + 1 );
|
||||
if( _valid )
|
||||
{
|
||||
// Aggiunge l'ultimo numero preso
|
||||
real lastval( num );
|
||||
_part = _part * ( cento + lastval ) / cento;
|
||||
if( lastval >= 0 )
|
||||
goodexp << '+';
|
||||
goodexp << num;
|
||||
// Assegna la nuova espressione formattata bene
|
||||
_exp = goodexp;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Azzera la sequenza di percentuali
|
||||
_part = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
real TSconto::sconto( )
|
||||
{
|
||||
CHECK(is_valid( ),"Tentativo di usare uno sconto non valido!" );
|
||||
return ( ( _part * cento ) - cento );
|
||||
}
|
||||
|
||||
void calcola_sconto_riga( TRectype riga )
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
#ifndef __SCONTI_H
|
||||
#include "sconti.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#include "veuml.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML2_H
|
||||
#include "veuml2.h"
|
||||
#endif
|
||||
|
||||
#ifndef __TCLIFOR_H
|
||||
#include "tclifor.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VECONF_H
|
||||
#include "veconf.h"
|
||||
#endif
|
||||
|
||||
#define A_ANAMAG 0
|
||||
|
||||
const real TSconto::cento( "100" );
|
||||
|
||||
void TSconto::set( const TString& exp, bool signal )
|
||||
{
|
||||
TString work( exp );
|
||||
TString goodexp;
|
||||
TString num;
|
||||
|
||||
// Elimina gli spazi molesti
|
||||
work.strip_spaces( );
|
||||
// Per ora nessun errore
|
||||
_errorpos = -1;
|
||||
|
||||
int i = 0;
|
||||
_part = 1.0;
|
||||
const int wlen = work.len( );
|
||||
// Flag che indica se sono nella parte decimale di un numero
|
||||
bool dec = FALSE;
|
||||
// Flag che indica se si attende l'inizio di un numero
|
||||
bool startnum = TRUE;
|
||||
// Flag che indica se siamo all'inizio di un numero
|
||||
while ( i < wlen && _errorpos < 0 )
|
||||
{
|
||||
char c = work[ i++ ];
|
||||
switch( c )
|
||||
{
|
||||
case '+':
|
||||
case '-':
|
||||
// Se ero in in numero ...
|
||||
if( !startnum )
|
||||
{
|
||||
// Aggiunge il numero alla sequenza
|
||||
real newval( num );
|
||||
_part = _part * ( cento + newval ) / cento;
|
||||
if( newval >= 0 )
|
||||
goodexp << '+';
|
||||
goodexp << num;
|
||||
}
|
||||
// Inizia il nuovo numero
|
||||
num = ( c == '-' )?"-":"";
|
||||
startnum = TRUE;
|
||||
dec = FALSE;
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
num << c;
|
||||
startnum = FALSE;
|
||||
break;
|
||||
case '.':
|
||||
case ',':
|
||||
// Se siamo già nella parte decimale ...
|
||||
if( dec )
|
||||
{
|
||||
// Segnala un errore
|
||||
_errorpos = i;
|
||||
break;
|
||||
}
|
||||
// Se occorreva un numero ci metto lo 0
|
||||
if( startnum )
|
||||
num << '0';
|
||||
// Interpreto la virgola come punto
|
||||
num << '.';
|
||||
dec = TRUE;
|
||||
startnum = TRUE;
|
||||
break;
|
||||
default:
|
||||
_errorpos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Controlla la validità
|
||||
_valid = ( _errorpos < 0 );
|
||||
// Se richiesto segnala l'errore
|
||||
if( !_valid && signal )
|
||||
warning_box( "Espressione di sconto non valida. Errore sul carattere %d.", _errorpos + 1 );
|
||||
if( _valid )
|
||||
{
|
||||
// Aggiunge l'ultimo numero preso
|
||||
real lastval( num );
|
||||
_part = _part * ( cento + lastval ) / cento;
|
||||
if( lastval >= 0 )
|
||||
goodexp << '+';
|
||||
goodexp << num;
|
||||
// Assegna la nuova espressione formattata bene
|
||||
_exp = goodexp;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Azzera la sequenza di percentuali
|
||||
_part = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
real TSconto::sconto( )
|
||||
{
|
||||
CHECK(is_valid( ),"Tentativo di usare uno sconto non valido!" );
|
||||
return ( ( _part * cento ) - cento );
|
||||
}
|
||||
|
||||
|
||||
TSconto_riga::TSconto_riga( TCliFor& clifo, TMask * testa, TMask * riga ) : _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _anamag( LF_ANAGR ), _sconti( LF_SCONTI ), _ditta( CONFIG_DITTA )
|
||||
{
|
||||
_clifo = &clifo;
|
||||
_testa = testa;
|
||||
_riga = riga;
|
||||
}
|
||||
|
||||
bool TSconto_riga::cerca_condv( int tiporicerca )
|
||||
{
|
||||
TString s1 = _anamag.get( "CODART" );
|
||||
TString s2 = riga( ).get( FS_CODART );
|
||||
if( s1 != s2 )
|
||||
{
|
||||
_anamag.setkey( 1 );
|
||||
_anamag.zero( );
|
||||
_anamag.put( "CODART", riga( ).get( FS_CODART ) );
|
||||
int ret = _anamag.read( );
|
||||
CHECK( ret == NOERR, "Articolo non trovato in anagrafica di magazzino!" );
|
||||
}
|
||||
if( tiporicerca == A_ANAMAG )
|
||||
// Se ricercavo per anagrafica, ho già finito
|
||||
return TRUE;
|
||||
if( _ditta.get_bool( "GES", "ve", tiporicerca ) )
|
||||
{
|
||||
// Se è attiva la gestione contratti ...
|
||||
_condv.setkey( 1 );
|
||||
_condv.zero( );
|
||||
switch( tiporicerca )
|
||||
{
|
||||
case A_CONTRATTI:
|
||||
_condv.put( "TIPO", "C" );
|
||||
_condv.blank( "CATVEN" );
|
||||
if( _ditta.get_bool( "GESSCONCC", "ve" ) )
|
||||
{
|
||||
// Se in ditta è abilitata la gestione del cliente in chiave
|
||||
// al contratto, lo carico con gioia
|
||||
_condv.put( "TIPOCF", clifo( ).tipocf( ) );
|
||||
_condv.put( "CODCF", clifo( ).codcf( ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_condv.blank( "TIPOCF" );
|
||||
_condv.blank( "CODCF" );
|
||||
}
|
||||
_condv.put( "COD", testa( ).get( F_CODCONT ) );
|
||||
break;
|
||||
case A_LISTINI:
|
||||
_condv.put( "TIPO", "L" );
|
||||
if( _ditta.get_bool( "GESLISCV", "ve" ) )
|
||||
{
|
||||
// Se in ditta è abilitata la gestione del cliente in chiave
|
||||
// al contratto, lo carico con gioia
|
||||
_condv.put( "TIPOCF", clifo( ).tipocf( ) );
|
||||
_condv.put( "CODCF", clifo( ).codcf( ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_condv.blank( "TIPOCF" );
|
||||
_condv.blank( "CODCF" );
|
||||
}
|
||||
_condv.blank( "CATVEN" );
|
||||
_condv.put( "COD", testa( ).get( F_CODLIST ) );
|
||||
break;
|
||||
case A_OFFERTE:
|
||||
_condv.put( "TIPO", "O" );
|
||||
_condv.blank( "CATVEN" );
|
||||
_condv.blank( "TIPOCF" );
|
||||
_condv.blank( "CODCF" );
|
||||
_condv.put( "COD", testa( ).get( F_CODCAMP ) );
|
||||
break;
|
||||
}
|
||||
if( _condv.read( ) == NOERR )
|
||||
{
|
||||
_rcondv.setkey( 2 );
|
||||
_rcondv.zero( );
|
||||
_rcondv.put( "TIPO", _condv.get( "TIPO" ) );
|
||||
_rcondv.put( "CATVEN", _condv.get( "CATVEN" ) );
|
||||
_rcondv.put( "TIPOCF", _condv.get( "TIPOCF" ) );
|
||||
_rcondv.put( "CODCF", _condv.get( "CODCF" ) );
|
||||
if( _condv.get_bool( "GESTUM" ) )
|
||||
{
|
||||
_rcondv.put( "UM", riga( ).get( FS_UMQTA ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_rcondv.blank( "UM" );
|
||||
}
|
||||
if( _condv.get_bool( "GESTSCA" ) )
|
||||
{
|
||||
_rcondv.put( "QLIM", riga( ).get( FS_QTA ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_rcondv.blank( "QLIM" );
|
||||
}
|
||||
const TString16 seqricrighe( _condv.get( "SEQRIC" ) );
|
||||
for( int i = 0; i < seqricrighe.len( ); i ++ )
|
||||
{
|
||||
|
||||
char ricerca = seqricrighe[ i ];
|
||||
_rcondv.put( "TIPORIGA", ricerca );
|
||||
switch( ricerca )
|
||||
{
|
||||
case 'A':
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "CODART" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
break;
|
||||
case 'R':
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "RAGGFIS" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
break;
|
||||
case 'G':
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC1" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC2" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC3" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
break;
|
||||
default:
|
||||
CHECK( FALSE, "Tipo di ricerca righe non valido!" );
|
||||
}
|
||||
}
|
||||
// Ricerca fallita
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
// Ricerca fallita
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
// La ricerca non è gestita, impossibile trovarlo ...
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Probabilmente dovrebbe lavorare sulla maschera, ma per ora la lasciamo così
|
||||
void TSconto_riga::calcola( )
|
||||
{
|
||||
char gestione = _ditta.get_char( "GESSCORIGA", "ve" );
|
||||
bool trovato = TRUE;
|
||||
switch( gestione )
|
||||
{
|
||||
case 'N':
|
||||
// Sconti di riga non gestiti
|
||||
set( "" );
|
||||
break;
|
||||
case 'L':
|
||||
// Percentuale su contratti/offerte/listini/anagrafica
|
||||
trovato = cerca_condv( A_CONTRATTI );
|
||||
if( !trovato ) trovato = cerca_condv( A_OFFERTE );
|
||||
if( !trovato ) trovato = cerca_condv( A_LISTINI );
|
||||
if( !trovato )
|
||||
set( _rcondv.get( "SCONTO" ) );
|
||||
else
|
||||
{
|
||||
if( cerca_condv( A_ANAMAG ) )
|
||||
set( _anamag.get( "SCONTO" ) );
|
||||
else
|
||||
CHECK( FALSE, "Sconto non trovato!( 1 )" );
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
// Posiziono l'anagrafica
|
||||
cerca_condv( A_ANAMAG );
|
||||
_sconti.setkey( 1 );
|
||||
_sconti.put( "TIPO", "R" );
|
||||
_sconti.put( "CODART", _anamag.get( "CODART" ) );
|
||||
if( _ditta.get_bool( "GESSCORIGACV", "ve" ) )
|
||||
{
|
||||
_sconti.put( "CODCAT", clifo( ).get( LF_CFVEN, "SCONTO" ) );
|
||||
}
|
||||
if( _ditta.get_bool( "GESSCORIGAUM", "ve" ) )
|
||||
{
|
||||
_sconti.put( "UM", riga( ).get( FS_UMQTA ) );
|
||||
}
|
||||
if( _sconti.read( ) == NOERR )
|
||||
// Bravo, hai vinto una bambolina
|
||||
set( _sconti.get( "SCONTO" ) );
|
||||
else
|
||||
CHECK( FALSE, "Sconto non trovato!( 2 )" );
|
||||
break;
|
||||
case 'C':
|
||||
set( clifo( ).get( LF_CFVEN, "SCONTO" ) );
|
||||
}
|
||||
}
|
||||
|
44
ve/sconti.h
44
ve/sconti.h
@ -5,6 +5,19 @@
|
||||
#include <real.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TCLIFOR_H
|
||||
#include "tclifor.h"
|
||||
#endif
|
||||
|
||||
#ifndef __MASK_H
|
||||
#include <mask.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define CHKVALID CHECK( _valid, "Tentativo di usare uno sconto non valido!" )
|
||||
|
||||
class TSconto : public TObject
|
||||
@ -28,4 +41,35 @@ public:
|
||||
};
|
||||
|
||||
#undef CHKVALID
|
||||
|
||||
class TSconto_riga : public TSconto
|
||||
{
|
||||
private:
|
||||
TCliFor* _clifo;
|
||||
// TRelation _condv;
|
||||
// Invece che la relazione uso i due files, poichè mi interessa sempre
|
||||
// solo una delle righe
|
||||
TLocalisamfile _condv;
|
||||
TLocalisamfile _rcondv;
|
||||
TLocalisamfile _anamag;
|
||||
TLocalisamfile _sconti;
|
||||
TConfig _ditta;
|
||||
TMask* _testa;
|
||||
TMask* _riga;
|
||||
|
||||
protected:
|
||||
|
||||
public:
|
||||
|
||||
TSconto_riga( TCliFor& clifo, TMask * testa = NULL, TMask * riga = NULL );
|
||||
|
||||
TCliFor& clifo( ){ return *_clifo; }
|
||||
void set_testa( TMask& testa ){ _testa = &testa; }
|
||||
TMask& testa( ){ return *_testa; }
|
||||
void set_riga( TMask& riga ){ _riga = &riga; }
|
||||
TMask& riga( ){ return *_riga; }
|
||||
bool cerca_condv( int tiporicerca );
|
||||
void calcola( );
|
||||
};
|
||||
|
||||
#endif
|
||||
|
719
ve/tclifor.cpp
719
ve/tclifor.cpp
@ -1,335 +1,384 @@
|
||||
#ifndef __TCLIFOR_H
|
||||
#include "tclifor.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML1_H
|
||||
#include "veuml1.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VE1000O_H
|
||||
#include "ve1000o.h"
|
||||
#endif
|
||||
|
||||
const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field )
|
||||
{
|
||||
if( table != _tablename )
|
||||
{
|
||||
delete _table;
|
||||
_table = new TTable( table );
|
||||
_tablename = table;
|
||||
}
|
||||
if( codtab != _table->curr( ).get( "CODTAB" ) )
|
||||
{
|
||||
_table->zero( );
|
||||
_table->put( "CODTAB", codtab );
|
||||
_table->read( );
|
||||
}
|
||||
return _table->get( field );
|
||||
};
|
||||
|
||||
const TString& TData_picker::get( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get( fieldname );
|
||||
}
|
||||
|
||||
int TData_picker::get_int( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get_int( fieldname );
|
||||
}
|
||||
|
||||
long TData_picker::get_long( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get_long( fieldname );
|
||||
}
|
||||
|
||||
bool TData_picker::get_bool( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get_bool( fieldname );
|
||||
}
|
||||
|
||||
int TCliFor::write_occas( )
|
||||
{
|
||||
if( !occasionale( ) )
|
||||
return NOERR;
|
||||
TRelation occas( LF_OCCAS );
|
||||
occas_mask( ).autosave( &occas );
|
||||
return occas.write( );
|
||||
}
|
||||
|
||||
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" )
|
||||
{
|
||||
_occas_mask.set_handler( O_CODICE, occas_code_handler );
|
||||
add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" );
|
||||
}
|
||||
|
||||
void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
|
||||
{
|
||||
_tipocf = tipocf;
|
||||
_codcf = codcf;
|
||||
zero( );
|
||||
curr( ).put( "TIPOCF", tipocf );
|
||||
curr( ).put( "CODCF", codcf );
|
||||
lfile( ).setkey( 1 );
|
||||
if( read( ) != NOERR )
|
||||
yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf );
|
||||
_occas = curr().get_bool( "OCCAS" );
|
||||
if ( occasionale( ) )
|
||||
{
|
||||
TRelation occrel( LF_OCCAS );
|
||||
occrel.curr( ).zero( );
|
||||
occrel.curr( ).put( "CFPI", ocfpi );
|
||||
occrel.read( );
|
||||
occas_mask( ).autoload( &occrel );
|
||||
}
|
||||
}
|
||||
|
||||
void TCliForVendite::update_mask( TMask_vendite& m, bool onload )
|
||||
{
|
||||
TString16 stato;
|
||||
|
||||
// Setta i campi che appartengono al file LF_CLIFO
|
||||
bool occas = occasionale( );
|
||||
m.show( F_OCFPI, occas );
|
||||
m.show( F_OCCASEDIT, occas );
|
||||
// In forse per l'Occasionale, sicuri per il Normale
|
||||
m.show( F_COFI, !occas );
|
||||
m.show( F_STATOPAIVA, !occas );
|
||||
m.show( F_PAIVA, !occas );
|
||||
set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" );
|
||||
if( !onload )
|
||||
{
|
||||
set( m, F_CODVAL, LF_CLIFO, "CODVAL" );
|
||||
set( m, F_CODLIN, LF_CLIFO, "CODLIN" );
|
||||
set( m, F_CODPAG, LF_CLIFO, "CODPAG" );
|
||||
set( m, F_CODABIA, LF_CLIFO, "CODABI" );
|
||||
set( m, F_CODCABA, LF_CLIFO, "CODCAB" );
|
||||
// Setta i campi che appartengono al file LF_CFVEN
|
||||
set( m, F_CODABIP, LF_CFVEN, "CODABIPR" );
|
||||
set( m, F_CODCABP, LF_CFVEN, "CODCABPR" );
|
||||
set( m, F_RAGGR, LF_CFVEN, "RAGGDOC" );
|
||||
set( m, F_CODINDSP, LF_CFVEN, "CODINDSP" );
|
||||
set( m, F_CODAG, LF_CFVEN, "CODAG" );
|
||||
set( m, F_CODSPMEZZO, LF_CFVEN, "CODSPMEZZO" );
|
||||
set( m, F_CODPORTO, LF_CFVEN, "CODPORTO" );
|
||||
set( m, F_CODNOTESP1, LF_CFVEN, "CODNOTESP1" );
|
||||
set( m, F_CODNOTESP2, LF_CFVEN, "CODNOTESP2" );
|
||||
set( m, F_CODVETT1, LF_CFVEN, "CODVETT1" );
|
||||
set( m, F_CODVETT2, LF_CFVEN, "CODVETT2" );
|
||||
set( m, F_CODVETT3, LF_CFVEN, "CODVETT3" );
|
||||
set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" );
|
||||
set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" );
|
||||
set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" );
|
||||
}
|
||||
if ( occasionale ( ) )
|
||||
{
|
||||
m.set( F_COFI, "" );
|
||||
m.set( F_PAIVA, "" );
|
||||
m.set( F_OCFPI, occas_mask( ).get( O_CODICE ) );
|
||||
m.set( F_RAGSOC, occas_mask( ).get( O_RAGSOC ) );
|
||||
m.set( F_INDCF, occas_mask( ).get( O_INDIRIZZO ) );
|
||||
m.set( F_CIVCF, occas_mask( ).get( O_NUMERO ) );
|
||||
m.set( F_CAPCF, occas_mask( ).get( O_CAP ) );
|
||||
m.set( F_COMCF, occas_mask( ).get( O_COMUNE ) );
|
||||
m.set( F_STATOCF, stato = occas_mask( ).get( O_STATO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
set( m, F_COFI, LF_CLIFO, "COFI" );
|
||||
set( m, F_INDCF, LF_CLIFO, "INDCF" );
|
||||
set( m, F_CIVCF, LF_CLIFO, "CIVCF" );
|
||||
set( m, F_STATOPAIVA, LF_CLIFO, "STATOPAIV" );
|
||||
set( m, F_PAIVA, LF_CLIFO, "PAIV" );
|
||||
set( m, F_LOCALITACF, LF_CLIFO, "LOCALITACF" );
|
||||
set( m, F_CAPCF, LF_CLIFO, "CAPCF" );
|
||||
set( m, F_COMCF, LF_CLIFO, "COMCF" );
|
||||
stato = get( LF_CLIFO, "STATOCF" );
|
||||
m.set( F_STATOCF, stato );
|
||||
}
|
||||
if ( !stato.blank( ) )
|
||||
m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) );
|
||||
TString16 tmpstr( m.get( F_CODPAG ) );
|
||||
if( !tmpstr.blank( ) )
|
||||
{
|
||||
m.field( F_CODPAG ).on_hit( );
|
||||
m.field( F_CODPAG ).check( );
|
||||
}
|
||||
tmpstr = m.get( F_CODLIN );
|
||||
if( !tmpstr.blank( ) )
|
||||
m.field( F_CODLIN ).check( );
|
||||
imposta_dati_comune( m );
|
||||
imposta_indirizzo_spedizione( m );
|
||||
imposta_sconto_testa( m );
|
||||
}
|
||||
|
||||
void TCliFor::edita_occasionale( )
|
||||
{
|
||||
CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" );
|
||||
_occas_mask.run( );
|
||||
};
|
||||
|
||||
bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
const char* code = f.get();
|
||||
if (*code)
|
||||
{
|
||||
TRelation occas(LF_OCCAS);
|
||||
occas.lfile().put("CFPI", code);
|
||||
if (occas.read(_isequal) == NOERR)
|
||||
{
|
||||
f.mask().autoload(&occas);
|
||||
f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni
|
||||
f.mask().send_key(K_TAB, O_COMUNENAS);
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_dati_comune( TMask_vendite& m )
|
||||
{
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey( 1 );
|
||||
if( occasionale( ) )
|
||||
{
|
||||
comuni.put( "COM", occas_mask( ).get( O_COMUNE ));
|
||||
comuni.put( "STATO", occas_mask( ).get( O_STATO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
comuni.put( "COM", get( LF_CLIFO, "COMCF" ));
|
||||
comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) );
|
||||
}
|
||||
comuni.read( );
|
||||
m.set( F_DENCOM, comuni.get( "DENCOM" ) );
|
||||
m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_indirizzo_spedizione( TMask_vendite& m )
|
||||
{
|
||||
TString16 stato;
|
||||
if( occasionale( ) )
|
||||
{
|
||||
m.set( F_CODINDSP, "" );
|
||||
m.disable( F_CODINDSP );
|
||||
m.set( F_RAGSOCSP, occas_mask( ).get( O_RAGSOC ) );
|
||||
m.set( F_INDSP, occas_mask( ).get( O_INDIRIZZO ) );
|
||||
m.set( F_CIVSP, occas_mask( ).get( O_NUMERO ) );
|
||||
// Sugli occasionali non c'è la località
|
||||
m.set( F_LOCALITASP, "" );
|
||||
m.set( F_CAPSP, occas_mask( ).get( O_CAP ) );
|
||||
m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) );
|
||||
m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
TString16 codindsp( m.get( F_CODINDSP ) );
|
||||
if( codindsp.blank( ) )
|
||||
{
|
||||
m.set( F_RAGSOCSP, "" );
|
||||
m.set( F_INDSP, "" );
|
||||
m.set( F_CIVSP, "" );
|
||||
m.set( F_LOCALITASP, "" );
|
||||
m.set( F_CAPSP, "" );
|
||||
m.set( F_COMSP, "" );
|
||||
m.set( F_STATOSP, "" );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
TLocalisamfile indsped( LF_INDSP );
|
||||
indsped.setkey( 1 );
|
||||
indsped.put( "TIPOCF", _tipocf );
|
||||
indsped.put( "CODCF", _codcf );
|
||||
indsped.put( "CODIND", atoi( codindsp ) );
|
||||
if( indsped.read( ) != NOERR )
|
||||
yesnofatal_box( "Indirizzo di spedizione non trovato!" );
|
||||
m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) );
|
||||
m.set( F_INDSP, indsped.get( "INDIR" ) );
|
||||
m.set( F_CIVSP, indsped.get( "CIV" ) );
|
||||
m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) );
|
||||
m.set( F_CAPSP, indsped.get( "CAP" ) );
|
||||
m.set( F_COMSP, indsped.get( "COM" ) );
|
||||
m.set( F_STATOSP, stato = indsped.get( "STATO" ) );
|
||||
}
|
||||
}
|
||||
if ( !stato.blank( ) )
|
||||
m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) );
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey( 1 );
|
||||
comuni.put( "COM", m.get( F_COMSP ) );
|
||||
comuni.put( "STATO", m.get( F_STATOSP ) );
|
||||
comuni.read( );
|
||||
m.set( F_DENCOMSP, comuni.get( "DENCOM" ) );
|
||||
m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_sconto_testa( TMask_vendite& m )
|
||||
{
|
||||
TConfig ditta( CONFIG_DITTA );
|
||||
TString16 codsconto;
|
||||
TString16 codart;
|
||||
|
||||
char tipogestione = ditta.get( "GESSCO", "ve" )[ 0 ];
|
||||
switch( tipogestione )
|
||||
{
|
||||
case 'N': // Sconti non gestiti: pussa via!
|
||||
return;
|
||||
break;
|
||||
case 'P': // Percentuale su anagrafica cliente
|
||||
m.set( F_SCONTOPERC, get( LF_CFVEN, "SCONTO" ) );
|
||||
return;
|
||||
break;
|
||||
case 'T': // Gestione tabella sconti
|
||||
codsconto = get( LF_CFVEN, "CODSCC" );
|
||||
if( !codsconto.blank( ) )
|
||||
{
|
||||
TLocalisamfile sconti( LF_SCONTI );
|
||||
sconti.setkey( 1 );
|
||||
sconti.zero( );
|
||||
sconti.put( "TIPO", "D" );
|
||||
sconti.put( "CODCAT", codsconto );
|
||||
if( sconti.read( ) == NOERR )
|
||||
m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
|
||||
else
|
||||
message_box( "Sconto non trovato nella tabella sconti!" );
|
||||
}
|
||||
return;
|
||||
break;
|
||||
case 'A': // Gestione archivio sconti
|
||||
TLocalisamfile sconti( LF_SCONTI );
|
||||
sconti.setkey( 1 );
|
||||
sconti.zero( );
|
||||
sconti.put( "TIPO", "I" );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 1 ) )
|
||||
{
|
||||
sconti.put( "CODCAT", get( LF_CFVEN, "CATVEN" ) );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 2 ) )
|
||||
{
|
||||
codart= get( LF_CFVEN, "CODSCC" );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 3 ) )
|
||||
{
|
||||
codart << get( LF_CFVEN, "CODZONA" );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 4 ) )
|
||||
codart << get( LF_CLIFO, "CODPAG" );
|
||||
}
|
||||
}
|
||||
}
|
||||
sconti.put( "CODART", codart );
|
||||
if( sconti.read( ) == NOERR )
|
||||
{
|
||||
m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
message_box( "Sconto non trovato nell'archivio sconti!" );
|
||||
}
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifndef __TCLIFOR_H
|
||||
#include "tclifor.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML1_H
|
||||
#include "veuml1.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VE1000O_H
|
||||
#include "ve1000o.h"
|
||||
#endif
|
||||
|
||||
const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field )
|
||||
{
|
||||
if( table != _tablename )
|
||||
{
|
||||
delete _table;
|
||||
_table = new TTable( table );
|
||||
_tablename = table;
|
||||
}
|
||||
if( codtab != _table->curr( ).get( "CODTAB" ) )
|
||||
{
|
||||
_table->zero( );
|
||||
_table->put( "CODTAB", codtab );
|
||||
_table->read( );
|
||||
}
|
||||
return _table->get( field );
|
||||
};
|
||||
|
||||
const TString& TData_picker::get( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get( fieldname );
|
||||
}
|
||||
|
||||
int TData_picker::get_int( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get_int( fieldname );
|
||||
}
|
||||
|
||||
long TData_picker::get_long( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get_long( fieldname );
|
||||
}
|
||||
|
||||
bool TData_picker::get_bool( const int file, const TString& fieldname )
|
||||
{
|
||||
return lfile( file ).get_bool( fieldname );
|
||||
}
|
||||
|
||||
int TCliFor::write_occas( )
|
||||
{
|
||||
if( !occasionale( ) )
|
||||
return NOERR;
|
||||
TRelation occas( LF_OCCAS );
|
||||
occas_mask( ).autosave( &occas );
|
||||
return occas.write( );
|
||||
}
|
||||
|
||||
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" )
|
||||
{
|
||||
_occas_mask.set_handler( O_CODICE, occas_code_handler );
|
||||
add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" );
|
||||
}
|
||||
|
||||
void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
|
||||
{
|
||||
_tipocf = tipocf;
|
||||
_codcf = codcf;
|
||||
zero( );
|
||||
curr( ).put( "TIPOCF", tipocf );
|
||||
curr( ).put( "CODCF", codcf );
|
||||
lfile( ).setkey( 1 );
|
||||
if( read( ) != NOERR )
|
||||
yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf );
|
||||
_occas = curr().get_bool( "OCCAS" );
|
||||
if ( occasionale( ) )
|
||||
{
|
||||
TRelation occrel( LF_OCCAS );
|
||||
occrel.curr( ).zero( );
|
||||
occrel.curr( ).put( "CFPI", ocfpi );
|
||||
occrel.read( );
|
||||
occas_mask( ).autoload( &occrel );
|
||||
}
|
||||
}
|
||||
|
||||
void TCliForVendite::update_mask( TMask_vendite& m, bool onload )
|
||||
{
|
||||
TString16 stato;
|
||||
|
||||
// Setta i campi che appartengono al file LF_CLIFO
|
||||
bool occas = occasionale( );
|
||||
m.show( F_OCFPI, occas );
|
||||
m.show( F_OCCASEDIT, occas );
|
||||
// In forse per l'Occasionale, sicuri per il Normale
|
||||
m.show( F_COFI, !occas );
|
||||
m.show( F_STATOPAIVA, !occas );
|
||||
m.show( F_PAIVA, !occas );
|
||||
set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" );
|
||||
if( !onload )
|
||||
{
|
||||
set( m, F_CODVAL, LF_CLIFO, "CODVAL" );
|
||||
set( m, F_CODLIN, LF_CLIFO, "CODLIN" );
|
||||
set( m, F_CODPAG, LF_CLIFO, "CODPAG" );
|
||||
set( m, F_CODABIA, LF_CLIFO, "CODABI" );
|
||||
set( m, F_CODCABA, LF_CLIFO, "CODCAB" );
|
||||
// Setta i campi che appartengono al file LF_CFVEN
|
||||
set( m, F_CODABIP, LF_CFVEN, "CODABIPR" );
|
||||
set( m, F_CODCABP, LF_CFVEN, "CODCABPR" );
|
||||
set( m, F_RAGGR, LF_CFVEN, "RAGGDOC" );
|
||||
set( m, F_CODINDSP, LF_CFVEN, "CODINDSP" );
|
||||
set( m, F_CODAG, LF_CFVEN, "CODAG" );
|
||||
set( m, F_CODSPMEZZO, LF_CFVEN, "CODSPMEZZO" );
|
||||
set( m, F_CODPORTO, LF_CFVEN, "CODPORTO" );
|
||||
set( m, F_CODNOTESP1, LF_CFVEN, "CODNOTESP1" );
|
||||
set( m, F_CODNOTESP2, LF_CFVEN, "CODNOTESP2" );
|
||||
set( m, F_CODVETT1, LF_CFVEN, "CODVETT1" );
|
||||
set( m, F_CODVETT2, LF_CFVEN, "CODVETT2" );
|
||||
set( m, F_CODVETT3, LF_CFVEN, "CODVETT3" );
|
||||
set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" );
|
||||
set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" );
|
||||
set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" );
|
||||
}
|
||||
if ( occasionale ( ) )
|
||||
{
|
||||
m.set( F_COFI, "" );
|
||||
m.set( F_PAIVA, "" );
|
||||
m.set( F_OCFPI, occas_mask( ).get( O_CODICE ) );
|
||||
m.set( F_RAGSOC, occas_mask( ).get( O_RAGSOC ) );
|
||||
m.set( F_INDCF, occas_mask( ).get( O_INDIRIZZO ) );
|
||||
m.set( F_CIVCF, occas_mask( ).get( O_NUMERO ) );
|
||||
m.set( F_CAPCF, occas_mask( ).get( O_CAP ) );
|
||||
m.set( F_COMCF, occas_mask( ).get( O_COMUNE ) );
|
||||
m.set( F_STATOCF, stato = occas_mask( ).get( O_STATO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
set( m, F_COFI, LF_CLIFO, "COFI" );
|
||||
set( m, F_INDCF, LF_CLIFO, "INDCF" );
|
||||
set( m, F_CIVCF, LF_CLIFO, "CIVCF" );
|
||||
set( m, F_STATOPAIVA, LF_CLIFO, "STATOPAIV" );
|
||||
set( m, F_PAIVA, LF_CLIFO, "PAIV" );
|
||||
set( m, F_LOCALITACF, LF_CLIFO, "LOCALITACF" );
|
||||
set( m, F_CAPCF, LF_CLIFO, "CAPCF" );
|
||||
set( m, F_COMCF, LF_CLIFO, "COMCF" );
|
||||
stato = get( LF_CLIFO, "STATOCF" );
|
||||
m.set( F_STATOCF, stato );
|
||||
}
|
||||
if ( !stato.blank( ) )
|
||||
m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) );
|
||||
m.check_field( F_CODPAG );
|
||||
m.check_field( F_CODLIN );
|
||||
// m.check_field( F_CODABIA );
|
||||
m.check_field( F_CODCABA );
|
||||
// m.check_field( F_CODABIP );
|
||||
m.check_field( F_CODCABP );
|
||||
m.check_field( F_CODINDSP );
|
||||
m.check_field( F_CODAG );
|
||||
m.check_field( F_CODSPMEZZO );
|
||||
m.check_field( F_CODPORTO );
|
||||
m.check_field( F_CODNOTESP1 );
|
||||
m.check_field( F_CODNOTESP2 );
|
||||
m.check_field( F_CODVETT1 );
|
||||
m.check_field( F_CODVETT2 );
|
||||
m.check_field( F_CODVETT3 );
|
||||
imposta_dati_comune( m );
|
||||
imposta_indirizzo_spedizione( m );
|
||||
imposta_sconto_testa( m );
|
||||
imposta_valuta( m );
|
||||
}
|
||||
|
||||
void TCliFor::edita_occasionale( )
|
||||
{
|
||||
CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" );
|
||||
_occas_mask.run( );
|
||||
};
|
||||
|
||||
bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
const char* code = f.get();
|
||||
if (*code)
|
||||
{
|
||||
TRelation occas(LF_OCCAS);
|
||||
occas.lfile().put("CFPI", code);
|
||||
if (occas.read(_isequal) == NOERR)
|
||||
{
|
||||
f.mask().autoload(&occas);
|
||||
f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni
|
||||
f.mask().send_key(K_TAB, O_COMUNENAS);
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_dati_comune( TMask_vendite& m )
|
||||
{
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey( 1 );
|
||||
if( occasionale( ) )
|
||||
{
|
||||
comuni.put( "COM", occas_mask( ).get( O_COMUNE ));
|
||||
comuni.put( "STATO", occas_mask( ).get( O_STATO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
comuni.put( "COM", get( LF_CLIFO, "COMCF" ));
|
||||
comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) );
|
||||
}
|
||||
comuni.read( );
|
||||
m.set( F_DENCOM, comuni.get( "DENCOM" ) );
|
||||
m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_indirizzo_spedizione( TMask_vendite& m )
|
||||
{
|
||||
TString16 stato;
|
||||
if( occasionale( ) )
|
||||
{
|
||||
m.set( F_CODINDSP, "" );
|
||||
m.disable( F_CODINDSP );
|
||||
m.set( F_RAGSOCSP, occas_mask( ).get( O_RAGSOC ) );
|
||||
m.set( F_INDSP, occas_mask( ).get( O_INDIRIZZO ) );
|
||||
m.set( F_CIVSP, occas_mask( ).get( O_NUMERO ) );
|
||||
// Sugli occasionali non c'è la località
|
||||
m.set( F_LOCALITASP, "" );
|
||||
m.set( F_CAPSP, occas_mask( ).get( O_CAP ) );
|
||||
m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) );
|
||||
m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
TString16 codindsp( m.get( F_CODINDSP ) );
|
||||
if( codindsp.blank( ) )
|
||||
{
|
||||
m.set( F_RAGSOCSP, "" );
|
||||
m.set( F_INDSP, "" );
|
||||
m.set( F_CIVSP, "" );
|
||||
m.set( F_LOCALITASP, "" );
|
||||
m.set( F_CAPSP, "" );
|
||||
m.set( F_COMSP, "" );
|
||||
m.set( F_STATOSP, "" );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
TLocalisamfile indsped( LF_INDSP );
|
||||
indsped.setkey( 1 );
|
||||
indsped.put( "TIPOCF", _tipocf );
|
||||
indsped.put( "CODCF", _codcf );
|
||||
indsped.put( "CODIND", atoi( codindsp ) );
|
||||
if( indsped.read( ) != NOERR )
|
||||
yesnofatal_box( "Indirizzo di spedizione non trovato!" );
|
||||
m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) );
|
||||
m.set( F_INDSP, indsped.get( "INDIR" ) );
|
||||
m.set( F_CIVSP, indsped.get( "CIV" ) );
|
||||
m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) );
|
||||
m.set( F_CAPSP, indsped.get( "CAP" ) );
|
||||
m.set( F_COMSP, indsped.get( "COM" ) );
|
||||
m.set( F_STATOSP, stato = indsped.get( "STATO" ) );
|
||||
}
|
||||
}
|
||||
if ( !stato.blank( ) )
|
||||
m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) );
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey( 1 );
|
||||
comuni.put( "COM", m.get( F_COMSP ) );
|
||||
comuni.put( "STATO", m.get( F_STATOSP ) );
|
||||
comuni.read( );
|
||||
m.set( F_DENCOMSP, comuni.get( "DENCOM" ) );
|
||||
m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_sconto_testa( TMask_vendite& m )
|
||||
{
|
||||
TConfig ditta( CONFIG_DITTA );
|
||||
TString16 codsconto;
|
||||
TString16 codart;
|
||||
|
||||
char tipogestione = ditta.get( "GESSCO", "ve" )[ 0 ];
|
||||
switch( tipogestione )
|
||||
{
|
||||
case 'N': // Sconti non gestiti: pussa via!
|
||||
return;
|
||||
break;
|
||||
case 'P': // Percentuale su anagrafica cliente
|
||||
m.set( F_SCONTOPERC, get( LF_CFVEN, "SCONTO" ) );
|
||||
return;
|
||||
break;
|
||||
case 'T': // Gestione tabella sconti
|
||||
codsconto = get( LF_CFVEN, "CODSCC" );
|
||||
if( !codsconto.blank( ) )
|
||||
{
|
||||
// ARCHIVIO SVCONTI PER SCONTO CLIENTE
|
||||
// TLocalisamfile sconti( LF_SCONTI );
|
||||
// sconti.setkey( 1 );
|
||||
// sconti.zero( );
|
||||
// sconti.put( "TIPO", "D" );
|
||||
// sconti.put( "CODCAT", codsconto );
|
||||
// if( sconti.read( ) == NOERR )
|
||||
// m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
|
||||
// else
|
||||
// message_box( "Sconto non trovato nella tabella sconti!" );
|
||||
TTable sconti( "%SCC" );
|
||||
sconti.setkey( 1 );
|
||||
sconti.zero( );
|
||||
// sconti.put( "TIPO", "D" );
|
||||
sconti.put( "CODTAB", codsconto );
|
||||
if( sconti.read( ) == NOERR )
|
||||
m.set( F_SCONTOPERC, sconti.get( "S1" ) );
|
||||
#ifdef DBG
|
||||
else
|
||||
message_box( "Sconto non trovato nella tabella sconti!" );
|
||||
#endif
|
||||
}
|
||||
return;
|
||||
break;
|
||||
case 'A': // Gestione archivio sconti
|
||||
TLocalisamfile sconti( LF_SCONTI );
|
||||
sconti.setkey( 1 );
|
||||
sconti.zero( );
|
||||
sconti.put( "TIPO", "I" );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 1 ) )
|
||||
sconti.put( "CODCAT", get( LF_CFVEN, "CATVEN" ) );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 2 ) )
|
||||
codart << get( LF_CFVEN, "CODSCC" );
|
||||
else
|
||||
codart << " ";
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 3 ) )
|
||||
codart << get( LF_CFVEN, "CODZONA" );
|
||||
else
|
||||
codart << " ";
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 4 ) )
|
||||
codart << get( LF_CLIFO, "CODPAG" );
|
||||
sconti.put( "CODART", codart );
|
||||
if( sconti.read( ) == NOERR )
|
||||
m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
|
||||
#ifdef DBG
|
||||
else
|
||||
message_box( FALSE, "Sconto non trovato nell'archivio sconti!" );
|
||||
#endif
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_valuta( TMask_vendite& m )
|
||||
{
|
||||
|
||||
TConfig ditta( CONFIG_DITTA );
|
||||
|
||||
if( ditta.get_bool( "GESVALAC", "ve" ) )
|
||||
{
|
||||
TTable cambi( "%CAM" );
|
||||
cambi.zero( );
|
||||
TString16 val( m.get( F_CODVAL ) );
|
||||
TString16 codtab( ( const char * ) val );
|
||||
codtab << m.get( F_DATADOC );
|
||||
cambi.put( "CODTAB", codtab );
|
||||
const int result = cambi.read( _isgteq );
|
||||
if( result == _iseof )
|
||||
cambi.prev( );
|
||||
codtab = cambi.get( "CODTAB" );
|
||||
if ( codtab.sub( 0, 2 ) == val )
|
||||
{
|
||||
m.set( F_CAMBIO, cambi.get( "R10" ) );
|
||||
m.set( F_DATACAMBIO, cambi.get( "D0" ) );
|
||||
return;
|
||||
}
|
||||
}
|
||||
TTable valuta( "VAL" );
|
||||
valuta.zero( );
|
||||
valuta.put( "CODTAB", m.get( F_CODVAL ) );
|
||||
if( valuta.read( ) == NOERR )
|
||||
{
|
||||
m.set( F_CAMBIO, valuta.get( "R10" ) );
|
||||
m.set( F_DATACAMBIO, valuta.get( "D0" ) );
|
||||
}
|
||||
}
|
||||
|
149
ve/tclifor.h
149
ve/tclifor.h
@ -1,73 +1,76 @@
|
||||
#ifndef __TCLIFOR_H
|
||||
#define __TCLIFOR_H
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TABUTIL_H
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __TMASKVEN_H
|
||||
#include "tmaskven.h"
|
||||
#endif
|
||||
|
||||
class TData_picker : public TRelation
|
||||
{
|
||||
private:
|
||||
|
||||
TTable* _table;
|
||||
TString16 _tablename;
|
||||
|
||||
public:
|
||||
TData_picker( const int mainfile ) : TRelation ( mainfile ) { }
|
||||
const TString& get( const TString& table, const TString& codtab, const TString& field );
|
||||
const TString& get( const int file, const TString& fieldname );
|
||||
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( TMask_vendite& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); };
|
||||
};
|
||||
|
||||
class TCliFor : public TData_picker
|
||||
{
|
||||
private:
|
||||
|
||||
bool _occas;
|
||||
TMask _occas_mask;
|
||||
|
||||
protected:
|
||||
|
||||
char _tipocf;
|
||||
long _codcf;
|
||||
|
||||
public:
|
||||
|
||||
TCliFor( );
|
||||
void load( const char tipocf, const long codcf, const TString& ocfpi );
|
||||
bool occasionale( ){ return get_bool( LF_CLIFO, "OCCAS" ); };
|
||||
TMask& occas_mask( ){ return _occas_mask; };
|
||||
static bool occas_code_handler(TMask_field& f, KEY key);
|
||||
int write_occas( );
|
||||
void edita_occasionale( );
|
||||
};
|
||||
|
||||
class TCliForVendite : public TCliFor
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
void update_mask( TMask_vendite& m, bool onload = FALSE );
|
||||
void imposta_dati_comune( TMask_vendite& m );
|
||||
void imposta_indirizzo_spedizione( TMask_vendite& m );
|
||||
void imposta_sconto_testa( TMask_vendite& m );
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
#ifndef __TCLIFOR_H
|
||||
#define __TCLIFOR_H
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TABUTIL_H
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __TMASKVEN_H
|
||||
#include "tmaskven.h"
|
||||
#endif
|
||||
|
||||
class TData_picker : public TRelation
|
||||
{
|
||||
private:
|
||||
|
||||
TTable* _table;
|
||||
TString16 _tablename;
|
||||
|
||||
public:
|
||||
TData_picker( const int mainfile ) : TRelation ( mainfile ) { }
|
||||
const TString& get( const TString& table, const TString& codtab, const TString& field );
|
||||
const TString& get( const int file, const TString& fieldname );
|
||||
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( TMask_vendite& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); };
|
||||
};
|
||||
|
||||
class TCliFor : public TData_picker
|
||||
{
|
||||
private:
|
||||
|
||||
bool _occas;
|
||||
TMask _occas_mask;
|
||||
|
||||
protected:
|
||||
|
||||
char _tipocf;
|
||||
long _codcf;
|
||||
|
||||
public:
|
||||
|
||||
TCliFor( );
|
||||
void load( const char tipocf, const long codcf, const TString& ocfpi );
|
||||
bool occasionale( ){ return get_bool( LF_CLIFO, "OCCAS" ); };
|
||||
TMask& occas_mask( ){ return _occas_mask; };
|
||||
static bool occas_code_handler(TMask_field& f, KEY key);
|
||||
int write_occas( );
|
||||
void edita_occasionale( );
|
||||
char tipocf( ){ return _tipocf; }
|
||||
long codcf( ){ return _codcf; }
|
||||
};
|
||||
|
||||
class TCliForVendite : public TCliFor
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
void update_mask( TMask_vendite& m, bool onload = FALSE );
|
||||
void imposta_dati_comune( TMask_vendite& m );
|
||||
void imposta_valuta( TMask_vendite& m );
|
||||
void imposta_indirizzo_spedizione( TMask_vendite& m );
|
||||
void imposta_sconto_testa( TMask_vendite& m );
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
486
ve/totale.ini
486
ve/totale.ini
@ -1,243 +1,243 @@
|
||||
# Esempio di profilo documento : Profilo Bolla Vendita
|
||||
|
||||
[MAIN]
|
||||
|
||||
# Descrizione a caratteri del documento
|
||||
TYPE=Bolla Base
|
||||
|
||||
# Dove sono le risorse per il documento
|
||||
MSKFILE=VEBOLLAC
|
||||
FRMFILE=BOLLAC.FRM
|
||||
PROGPIEDE=31|35
|
||||
# Procedure utente da chiamare per il documento ( preprocessarle? )
|
||||
NUOVO=1
|
||||
MODIFICA=5
|
||||
CANCELLA=12
|
||||
STAMPA=4
|
||||
RAGGRUPPA=3
|
||||
USER=2
|
||||
|
||||
# Indica se il documento è indirizzato ad un cliente o ad un fornitore
|
||||
TIPOCF=C
|
||||
|
||||
# Quali progressivi appaiono in stampa o visualizzazione del documento
|
||||
ProgPiede=1,7,23,12
|
||||
|
||||
[INSERIMENTO]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5,6,7,8,9
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=1
|
||||
|
||||
[MODIFICA]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=N
|
||||
|
||||
[CANCELLAZIONE]
|
||||
STATIVALIDI = 6,7
|
||||
STATOFINALE = 4
|
||||
REMOVE = 0
|
||||
|
||||
[STAMPA]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=6
|
||||
|
||||
[RAGGRUPPA]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=6,7,8,9
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=1
|
||||
|
||||
[SPECIALE]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5,6,7,8,9
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=9
|
||||
|
||||
[PROFILO]
|
||||
TIPOCF = 2
|
||||
CODCF = 3
|
||||
RAGSOC = 2
|
||||
OCCAS = 0
|
||||
OCFPI = 1
|
||||
COFI = 1
|
||||
STATOPAIV = 1
|
||||
PAIVA = 1
|
||||
INDCF = 1
|
||||
CIVCF = 1
|
||||
LOCALITACF = 1
|
||||
CAPCF = 1
|
||||
PROVCOM = 1
|
||||
COMCF = 1
|
||||
DENCOM = 1
|
||||
STATOCF = 1
|
||||
DESSTATOCF = 1
|
||||
CODVAL = 2
|
||||
NOME_VAL = 1
|
||||
CAMBIO = 3
|
||||
DATA_CAMBIO = 1
|
||||
CODLIN = 2
|
||||
DESLIN = 1
|
||||
CODPAG = 3
|
||||
DESCODPAG = 1
|
||||
DATAINSC = 2
|
||||
DATASCAD1 = 1
|
||||
DATASCAD2 = 1
|
||||
DATASCAD3 = 1
|
||||
DATASCAD4 = 1
|
||||
DATASCAD5 = 1
|
||||
CODABIA = 3
|
||||
CODCABA = 3
|
||||
DESBANAPP = 2
|
||||
CODABIP = 2
|
||||
CODCABP = 2
|
||||
DESBANPRE = 2
|
||||
CODLIST = 2
|
||||
CODCONT = 2
|
||||
CODCAMP = 2
|
||||
SCONTOPERC = 2
|
||||
CODINDSP = 2
|
||||
INDSP = 2
|
||||
CIVSP = 2
|
||||
LOCALITASP = 2
|
||||
CAPSP = 2
|
||||
COMSP = 2
|
||||
DENCOMSP = 2
|
||||
PROVCOMSP = 2
|
||||
STATOSP = 2
|
||||
DESSTATOSP = 2
|
||||
DATADOCRIF = 2
|
||||
NUMDOCRIF = 2
|
||||
CODAGVIS = 2
|
||||
CODAG = 2
|
||||
CODSPMEZZO = 2
|
||||
CODPORTO = 2
|
||||
PORTO = 2
|
||||
CODNOTESP1 = 2
|
||||
CODNOTESP2 = 2
|
||||
CAUSTRASP = 2
|
||||
DENCAUSTRASP = 2
|
||||
CODVETT1 = 2
|
||||
CODVETT2 = 2
|
||||
CODVETT3 = 2
|
||||
NOMEVETT1 = 2
|
||||
NOMEVETT2 = 2
|
||||
NOMEVETT3 = 2
|
||||
NCOPIE = 2
|
||||
DATAPART = 2
|
||||
ORAPART = 2
|
||||
IMPPAGATO = 2
|
||||
ACCSALDO = 2
|
||||
DOC1 = 2
|
||||
DOC2 = 2
|
||||
DOC3 = 2
|
||||
DATACONS = 2
|
||||
ASPBENI1 = 2
|
||||
DESCRBENI1 = 2
|
||||
ASPBENI2 = 2
|
||||
DESCRBENI2 = 2
|
||||
IMPNETTI = 2
|
||||
RAGGREFF = 2
|
||||
SPESEINC = 2
|
||||
ADDBRB = 2
|
||||
ADDBTR = 2
|
||||
ADDBDE = 2
|
||||
CODIVABRB = 2
|
||||
CODIVABTR = 2
|
||||
CODIVABTRE = 2
|
||||
CODIVABDE = 2
|
||||
|
||||
# fine modifiche
|
||||
|
||||
CAUSMAG2 = 2
|
||||
TARA = 2
|
||||
PNETTO = 2
|
||||
UMTARA = 2
|
||||
RAGGR = 2
|
||||
CAUSMAG1 = 2
|
||||
NCOLLI = 2
|
||||
RAGSOCSP = 2
|
||||
CODIVAABRB = 3
|
||||
UMPNETTO = 2
|
||||
DESUMPNETTO = 2
|
||||
DESUMTARA = 2
|
||||
DESCRMAG1 = 2
|
||||
DESCRMAG2 = 2
|
||||
OCCASEDIT = 2
|
||||
|
||||
[SHEET]
|
||||
NCOLS=4
|
||||
1=2
|
||||
2=5
|
||||
3=6||30
|
||||
4=9
|
||||
5=10
|
||||
6=13
|
||||
7=8
|
||||
|
||||
[RIGHE]
|
||||
NTIPIRIGA=3
|
||||
1=01
|
||||
2=02
|
||||
3=03
|
||||
|
||||
|
||||
|
||||
[HANDLERS]
|
||||
NHANDLER=0
|
||||
1 = 140|1
|
||||
2 = 108|2
|
||||
3 = 111|3
|
||||
3 = 113|3
|
||||
3 = 115|3
|
||||
3 = 117|3
|
||||
3 = 118|3
|
||||
|
||||
[PROFILOGRUPPO]
|
||||
=
|
||||
1000 = 0
|
||||
2000 = 0
|
||||
1400 = 0
|
||||
2400 = 0
|
||||
1800 = 0
|
||||
2800 =
|
||||
1100 = 0
|
||||
2100 = 0
|
||||
1500 = 0
|
||||
2500 = 0
|
||||
1900 = 0
|
||||
2900 =
|
||||
1200 = 0
|
||||
2200 = 0
|
||||
29 =
|
||||
1600 = 0
|
||||
2600 = 0
|
||||
101 = 0
|
||||
100 = 2
|
||||
200 = 2
|
||||
300 = 2
|
||||
400 = 2
|
||||
500 = 2
|
||||
600 = 2
|
||||
1300 = 0
|
||||
700 = 2
|
||||
2300 = 0
|
||||
800 = 2
|
||||
900 = 2
|
||||
1700 = 0
|
||||
2700 =
|
||||
|
||||
# Esempio di profilo documento : Profilo Bolla Vendita
|
||||
|
||||
[MAIN]
|
||||
|
||||
# Descrizione a caratteri del documento
|
||||
TYPE=Bolla Base
|
||||
|
||||
# Dove sono le risorse per il documento
|
||||
MSKFILE=VEBOLLAC
|
||||
FRMFILE=BOLLAC.FRM
|
||||
PROGPIEDE=31|35
|
||||
# Procedure utente da chiamare per il documento ( preprocessarle? )
|
||||
NUOVO=1
|
||||
MODIFICA=5
|
||||
CANCELLA=12
|
||||
STAMPA=4
|
||||
RAGGRUPPA=3
|
||||
USER=2
|
||||
|
||||
# Indica se il documento è indirizzato ad un cliente o ad un fornitore
|
||||
TIPOCF=C
|
||||
|
||||
# Quali progressivi appaiono in stampa o visualizzazione del documento
|
||||
ProgPiede=1,7,23,12
|
||||
|
||||
[INSERIMENTO]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5,6,7,8,9
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=1
|
||||
|
||||
[MODIFICA]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=N
|
||||
|
||||
[CANCELLAZIONE]
|
||||
STATIVALIDI = 6,7
|
||||
STATOFINALE = 4
|
||||
REMOVE = 0
|
||||
|
||||
[STAMPA]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=6
|
||||
|
||||
[RAGGRUPPA]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=6,7,8,9
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=1
|
||||
|
||||
[SPECIALE]
|
||||
|
||||
# Stati in cui è possibile effettuare la operazione
|
||||
STATIVALIDI=1,2,3,4,5,6,7,8,9
|
||||
|
||||
# Stato finale del documento dopo la operazione
|
||||
STATOFINALE=9
|
||||
|
||||
[PROFILO]
|
||||
TIPOCF = 2
|
||||
CODCF = 3
|
||||
RAGSOC = 2
|
||||
OCCAS = 0
|
||||
OCFPI = 1
|
||||
COFI = 1
|
||||
STATOPAIV = 1
|
||||
PAIVA = 1
|
||||
INDCF = 1
|
||||
CIVCF = 1
|
||||
LOCALITACF = 1
|
||||
CAPCF = 1
|
||||
PROVCOM = 1
|
||||
COMCF = 1
|
||||
DENCOM = 1
|
||||
STATOCF = 1
|
||||
DESSTATOCF = 1
|
||||
CODVAL = 2
|
||||
NOME_VAL = 1
|
||||
CAMBIO = 3
|
||||
DATA_CAMBIO = 1
|
||||
CODLIN = 2
|
||||
DESLIN = 1
|
||||
CODPAG = 3
|
||||
DESCODPAG = 1
|
||||
DATAINSC = 2
|
||||
DATASCAD1 = 1
|
||||
DATASCAD2 = 1
|
||||
DATASCAD3 = 1
|
||||
DATASCAD4 = 1
|
||||
DATASCAD5 = 1
|
||||
CODABIA = 3
|
||||
CODCABA = 3
|
||||
DESBANAPP = 2
|
||||
CODABIP = 2
|
||||
CODCABP = 2
|
||||
DESBANPRE = 2
|
||||
CODLIST = 2
|
||||
CODCONT = 2
|
||||
CODCAMP = 2
|
||||
SCONTOPERC = 2
|
||||
CODINDSP = 2
|
||||
INDSP = 2
|
||||
CIVSP = 2
|
||||
LOCALITASP = 2
|
||||
CAPSP = 2
|
||||
COMSP = 2
|
||||
DENCOMSP = 2
|
||||
PROVCOMSP = 2
|
||||
STATOSP = 2
|
||||
DESSTATOSP = 2
|
||||
DATADOCRIF = 2
|
||||
NUMDOCRIF = 2
|
||||
CODAGVIS = 2
|
||||
CODAG = 2
|
||||
CODSPMEZZO = 2
|
||||
CODPORTO = 2
|
||||
PORTO = 2
|
||||
CODNOTESP1 = 2
|
||||
CODNOTESP2 = 2
|
||||
CAUSTRASP = 2
|
||||
DENCAUSTRASP = 2
|
||||
CODVETT1 = 2
|
||||
CODVETT2 = 2
|
||||
CODVETT3 = 2
|
||||
NOMEVETT1 = 2
|
||||
NOMEVETT2 = 2
|
||||
NOMEVETT3 = 2
|
||||
NCOPIE = 2
|
||||
DATAPART = 2
|
||||
ORAPART = 2
|
||||
IMPPAGATO = 2
|
||||
ACCSALDO = 2
|
||||
DOC1 = 2
|
||||
DOC2 = 2
|
||||
DOC3 = 2
|
||||
DATACONS = 2
|
||||
ASPBENI1 = 2
|
||||
DESCRBENI1 = 2
|
||||
ASPBENI2 = 2
|
||||
DESCRBENI2 = 2
|
||||
IMPNETTI = 2
|
||||
RAGGREFF = 2
|
||||
SPESEINC = 2
|
||||
ADDBRB = 2
|
||||
ADDBTR = 2
|
||||
ADDBDE = 2
|
||||
CODIVABRB = 2
|
||||
CODIVABTR = 2
|
||||
CODIVABTRE = 2
|
||||
CODIVABDE = 2
|
||||
|
||||
# fine modifiche
|
||||
|
||||
CAUSMAG2 = 2
|
||||
TARA = 2
|
||||
PNETTO = 2
|
||||
UMTARA = 2
|
||||
RAGGR = 2
|
||||
CAUSMAG1 = 2
|
||||
NCOLLI = 2
|
||||
RAGSOCSP = 2
|
||||
CODIVAABRB = 3
|
||||
UMPNETTO = 2
|
||||
DESUMPNETTO = 2
|
||||
DESUMTARA = 2
|
||||
DESCRMAG1 = 2
|
||||
DESCRMAG2 = 2
|
||||
OCCASEDIT = 2
|
||||
|
||||
[SHEET]
|
||||
NCOLS=4
|
||||
1=2
|
||||
2=5
|
||||
3=6||30
|
||||
4=9
|
||||
5=10
|
||||
6=13
|
||||
7=8
|
||||
|
||||
[RIGHE]
|
||||
NTIPIRIGA=3
|
||||
1=01
|
||||
2=02
|
||||
3=03
|
||||
|
||||
|
||||
|
||||
[HANDLERS]
|
||||
NHANDLER=0
|
||||
1 = 140|1
|
||||
2 = 108|2
|
||||
3 = 111|3
|
||||
3 = 113|3
|
||||
3 = 115|3
|
||||
3 = 117|3
|
||||
3 = 118|3
|
||||
|
||||
[PROFILOGRUPPO]
|
||||
=
|
||||
1000 = 0
|
||||
2000 = 0
|
||||
1400 = 0
|
||||
2400 = 0
|
||||
1800 = 0
|
||||
2800 =
|
||||
1100 = 0
|
||||
2100 = 0
|
||||
1500 = 0
|
||||
2500 = 0
|
||||
1900 = 0
|
||||
2900 =
|
||||
1200 = 0
|
||||
2200 = 0
|
||||
29 =
|
||||
1600 = 0
|
||||
2600 = 0
|
||||
101 = 0
|
||||
100 = 2
|
||||
200 = 2
|
||||
300 = 2
|
||||
400 = 2
|
||||
500 = 2
|
||||
600 = 2
|
||||
1300 = 0
|
||||
700 = 2
|
||||
2300 = 0
|
||||
800 = 2
|
||||
900 = 2
|
||||
1700 = 0
|
||||
2700 =
|
||||
|
||||
|
2278
ve/ve0100.cpp
2278
ve/ve0100.cpp
File diff suppressed because it is too large
Load Diff
252
ve/ve0100.h
252
ve/ve0100.h
@ -1,4 +1,5 @@
|
||||
#define _VE0100_H
|
||||
#ifndef __VE0100_H
|
||||
#define __VE0100_H
|
||||
// Operazioni che può fare il motore su un documento
|
||||
|
||||
#define OP_NUOVO 1
|
||||
@ -16,3 +17,252 @@
|
||||
#define F_SHEET 500
|
||||
#define F_MEMORIGA 501
|
||||
#define BASE_PIEDE 600
|
||||
|
||||
#define CHANGE_MESSAGE "Sono state effettuate modifiche alla configurazione.\nPrima di eseguire la gestione documenti occorrerà rigenerare le maschere.\nDesideri farlo ora ?"
|
||||
|
||||
// Modifiche pianificate per il dopo/cattolica:
|
||||
// Rorganizzazione del codice come:
|
||||
// Oggetto documento
|
||||
// che contiene:
|
||||
// Array di oggetti riga
|
||||
// Oggetto Cliente
|
||||
// Oggetto Cambio
|
||||
// Oggetto Sconto testa
|
||||
|
||||
|
||||
#define F_LBTIPORIGA 175
|
||||
#define NPIEDI 40
|
||||
|
||||
|
||||
#include <xvt_defs.h>
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __EXPR_H
|
||||
#include <expr.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TABUTIL_H
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
#ifndef __BRWAPP_H
|
||||
#include <brwapp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __RELAPP_H
|
||||
#include <relapp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef __LFFILES_H
|
||||
#include <lffiles.h>
|
||||
#endif
|
||||
|
||||
#ifndef __DEFMASK_H
|
||||
#include "defmask.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#include "veuml.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML1_H
|
||||
#include "veuml1.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML2_H
|
||||
#include "veuml2.h"
|
||||
#endif
|
||||
|
||||
#ifndef __SHEET_H
|
||||
#include <sheet.h>
|
||||
#endif
|
||||
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MSKSHEET_H
|
||||
#include <msksheet.h>
|
||||
#endif
|
||||
|
||||
#ifndef __VE0100C_H
|
||||
#include "ve0100c.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VE0100D_H
|
||||
#include "ve0100d.h"
|
||||
#endif
|
||||
|
||||
#ifndef __TCLIFOR_H
|
||||
#include "tclifor.h"
|
||||
#endif
|
||||
|
||||
#ifndef __RIGHEDOC_H
|
||||
#include "righedoc.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VE1000O_H
|
||||
#include "ve1000o.h"
|
||||
#endif
|
||||
|
||||
#ifndef __TMASKVEN_H
|
||||
#include "tmaskven.h"
|
||||
#endif
|
||||
|
||||
#ifndef __EXECP_H
|
||||
#include "execp.h"
|
||||
#endif
|
||||
|
||||
#ifndef __SCONTI_H
|
||||
#include "sconti.h"
|
||||
#endif
|
||||
|
||||
// Definizione della classe dell'applicazione motore
|
||||
class TMotore_application : public TRelation_application
|
||||
{
|
||||
// Array di totalizzatori
|
||||
TPiede_documento _piede;
|
||||
|
||||
// Record array per la gestione delle righe
|
||||
TRecord_array* _righe_rec;
|
||||
|
||||
// Puntatore al profilo del documento caricato
|
||||
TConfig* _pro;
|
||||
|
||||
// Puntatore al nome, per evitare di ricrearlo se è uguale
|
||||
TFilename* _proname;
|
||||
|
||||
// Puntatore alla maschera di ricerca
|
||||
TMask* _msk;
|
||||
|
||||
// Puntatore alla maschera di modifica/inserimento ( dipende dal profilo )
|
||||
TMask_vendite* _msk1;
|
||||
|
||||
// puntatore alla relazione
|
||||
TRelation* _rel;
|
||||
|
||||
// Puntatore allo sheet delle righe documento
|
||||
TSheet_field* _sheet;
|
||||
|
||||
// Oggetto cliente per il motore
|
||||
TCliForVendite* _clifor;
|
||||
|
||||
// Indica se il documento ha come soggetto un <C>liente o un <F>ornitore
|
||||
char _tipocf;
|
||||
|
||||
// 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_insert_mode( TMask& m );
|
||||
virtual int read( TMask& m );
|
||||
virtual bool remove( void );
|
||||
virtual int write( const TMask& m );
|
||||
virtual int rewrite( const TMask& m );
|
||||
|
||||
// Punti di ingresso per le funzioni utente
|
||||
|
||||
// Funzioni da associare ad ogni procedura
|
||||
int user_function( int index );
|
||||
|
||||
// Funzioni per il calcolo delle righe
|
||||
real user_row_calculate( TRectype& row, int index );
|
||||
|
||||
void user_set_handler( int fieldid, int index, TMask* m = NULL );
|
||||
|
||||
long prossimo_numero( bool provv );
|
||||
int avanza_numero( bool provv );
|
||||
void get_edit_mask( const char * profilo );
|
||||
void azzera_piedi( );
|
||||
void carica_piedi( );
|
||||
void somma_piedi( );
|
||||
void sottrai_piedi( );
|
||||
|
||||
// Esegue, se c'è, la procedura utente relativa ad una certa operazione
|
||||
int esegui_procedura( int operazione );
|
||||
|
||||
protected:
|
||||
|
||||
// Procedure e funzioni per la gestione della maschera e dei files
|
||||
void read_rdoc( TMask& m );
|
||||
|
||||
// formato dipendente dallo sheet ( sono le varie colonne )
|
||||
void load_riga( TSheet_field& f, int numrig, TRectype& r );
|
||||
void store_riga( TSheet_field& f, int numrig, TRectype& r );
|
||||
|
||||
void save( TRelation* r ) const;
|
||||
void set_descr ( int numrig, const char* descr );
|
||||
void carica_righe_libere( int from = -1 );
|
||||
bool check_key( TLocalisamfile& rdoc, TString16 codnum, bool provv, TString16 _anno, TString16 _ndoc );
|
||||
|
||||
// Procedure e funzioni per la gestione degli stati
|
||||
// void setta_stato_corrente( int nuovostato );
|
||||
const char* nome_sezione( int op );
|
||||
int stato_corrente( );
|
||||
int stato_finale( int operazione );
|
||||
bool stato_valido( int stato, int operazione );
|
||||
void segnala_stato_non_valido( int operazione );
|
||||
TString& stati_validi( int operazione ){ return ( pro( ).get( "STATIVALIDI", nome_sezione( operazione ) ) );}
|
||||
|
||||
// Handle che ritorna la maschera per le righe
|
||||
static TMask * ss_getmask( int numriga, TMask& fullmask, bool destroy );
|
||||
|
||||
// Handler che gestisce la richiesta del tipo riga in inserimento
|
||||
static bool ss_handler( TSheet_field& ss, int r, KEY key );
|
||||
|
||||
// Handler per la maschera di ricerca
|
||||
static bool ndoc_handler( TMask_field& f, KEY key );
|
||||
static bool num_handler( TMask_field& f, KEY key );
|
||||
static bool tip_handler( TMask_field& f, KEY key );
|
||||
|
||||
// Handler per la maschera di modifica
|
||||
static bool clifo_handler( TMask_field& f, KEY key );
|
||||
static bool occas_handler( TMask_field& f, KEY key );
|
||||
static bool val_handler( TMask_field& f, KEY key );
|
||||
|
||||
// Configurazione dello sheet dato il profilo
|
||||
void configura_sheet( TSheet_field& sheet, TConfig& config );
|
||||
|
||||
// Funzione per la sostituzione delle variabili nella decodifica
|
||||
// delle espressioni di una riga
|
||||
void carica_variabile( TExpression& e, const char * varname, TRectype r );
|
||||
|
||||
public:
|
||||
|
||||
// Funzioni di accesso alle variabili private
|
||||
|
||||
TRecord_array& righe_rec( ) { CHECK( _righe_rec, "Record array delle righe nullo!" ); return * _righe_rec; }
|
||||
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; }
|
||||
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; }
|
||||
TPiede_documento& piede( ){ return _piede; }
|
||||
|
||||
// Operazione
|
||||
|
||||
const char tipocf( ){ return _tipocf; }
|
||||
void tipocf( const char tcf ){ _tipocf = tcf; }
|
||||
bool valida_operazione( int operazione );
|
||||
|
||||
TSheet_field& ss( ) const { return *_sheet; }
|
||||
TMotore_application( ) { _pro = NULL; }
|
||||
virtual ~TMotore_application( ) { if ( _pro ) delete _pro; }
|
||||
virtual const char* get_next_key( );
|
||||
|
||||
};
|
||||
|
||||
TMotore_application& app( );
|
||||
|
||||
#endif
|
||||
|
253
ve/ve0100c.cpp
253
ve/ve0100c.cpp
@ -1,125 +1,128 @@
|
||||
// Handler di marco sui campi delle maschere
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MASK_H
|
||||
#include <mask.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MASKFLD_H
|
||||
#include <maskfld.h>
|
||||
#endif
|
||||
|
||||
#ifndef __KEYS_H
|
||||
#include <keys.h>
|
||||
#endif
|
||||
|
||||
#ifndef __STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#include "VeUML.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML1_H
|
||||
#include "VeUML1.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VE0100C_H
|
||||
#include "ve0100c.h"
|
||||
#endif
|
||||
|
||||
#ifndef __PAGAMENT_H
|
||||
#include "..\cg\pagament.h"
|
||||
#endif
|
||||
|
||||
bool ora_hndl(TMask_field& field, KEY key)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
if (field.to_check(key))
|
||||
{
|
||||
TFixed_string ora(field.get(),6);
|
||||
ora.trim();
|
||||
if (ora.not_empty() || field.required())
|
||||
{
|
||||
// bool changed = FALSE;
|
||||
if (isdigit(ora[0]))
|
||||
{
|
||||
if (ora[2] != ':')
|
||||
{
|
||||
if (ora.len()>4) ora.overwrite(":",2);
|
||||
else ora.insert(":", 2);
|
||||
// changed = TRUE;
|
||||
}
|
||||
}
|
||||
bool ok;
|
||||
ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4])));
|
||||
ok &= ((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60));
|
||||
if (!ok)
|
||||
{
|
||||
error_box("Ora errata o formato non valido");
|
||||
return FALSE;
|
||||
}
|
||||
else /* if (changed) */
|
||||
{
|
||||
field.set((ora));
|
||||
// field.picture_data((ora),TRUE);
|
||||
// field.picture_data((ora.strip(":")),FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool codcli_hndl(TMask_field& field, KEY key)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
if (field.to_check(key))
|
||||
{
|
||||
field.send_key(K_TAB,F_CODVAL);
|
||||
field.send_key(K_TAB,F_CODLIN);
|
||||
field.send_key(K_TAB,F_CODPAG);
|
||||
field.send_key(K_TAB,F_CODABIA);
|
||||
field.send_key(K_TAB,F_CODCABA);
|
||||
field.send_key(K_TAB,F_INDSP);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool dummy_hndl(TMask_field& field, KEY key)
|
||||
{
|
||||
warning_box("Al campo %d è arrivato un KEY %d",field.dlg(),key);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool condpag_hndl(TMask_field& field, KEY key)
|
||||
{
|
||||
|
||||
if (key == K_TAB)
|
||||
{
|
||||
if (field.to_check(key))
|
||||
{
|
||||
TMask& m = field.mask( );
|
||||
TString16 condpag( m.get( F_CODPAG ) );
|
||||
TString16 data( m.get( F_DATAINSC ) );
|
||||
if ( condpag.blank( ) || data.blank( ) )
|
||||
return TRUE;
|
||||
TPagamento pag( condpag, data );
|
||||
pag.set_total( 100, 10, 10 );
|
||||
pag.set_rate_auto( );
|
||||
int numrate = pag.n_rate( );
|
||||
for( int i = 0; i < numrate; i ++ )
|
||||
m.set( F_DATASCAD1 + i, pag.data_rata( i ).string( ) );
|
||||
for( ; i < 5; i ++ )
|
||||
m.hide( F_DATASCAD1 + i );
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Handler di MarcoclaD sui campi delle maschere
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MASK_H
|
||||
#include <mask.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MASKFLD_H
|
||||
#include <maskfld.h>
|
||||
#endif
|
||||
|
||||
#ifndef __KEYS_H
|
||||
#include <keys.h>
|
||||
#endif
|
||||
|
||||
#ifndef __STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#include "VeUML.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEUML1_H
|
||||
#include "VeUML1.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VE0100C_H
|
||||
#include "ve0100c.h"
|
||||
#endif
|
||||
|
||||
#ifndef __PAGAMENT_H
|
||||
#include "..\cg\pagament.h"
|
||||
#endif
|
||||
|
||||
#ifndef __SCONTI_H
|
||||
#include "sconti.h"
|
||||
#endif
|
||||
|
||||
bool ora_hndl( TMask_field& field, KEY key )
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
if (field.to_check(key))
|
||||
{
|
||||
TFixed_string ora( field.get( ), 6 );
|
||||
ora.trim( );
|
||||
if (ora.not_empty( ) || field.required( ) )
|
||||
{
|
||||
if ( isdigit( ora[ 0 ] ) )
|
||||
{
|
||||
if ( ora[ 2 ] != ':')
|
||||
{
|
||||
if ( ora.len( ) > 4 )
|
||||
ora.overwrite( ":", 2 );
|
||||
else
|
||||
ora.insert( ":", 2 );
|
||||
}
|
||||
}
|
||||
bool ok;
|
||||
ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4])));
|
||||
ok &= ((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60));
|
||||
if ( !ok )
|
||||
{
|
||||
error_box("Ora errata o formato non valido");
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
field.set((ora));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool dummy_hndl( TMask_field& field, KEY key )
|
||||
{
|
||||
warning_box( "Al campo %d è arrivato un KEY %d", field.dlg( ), key );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Handler per il calcolo delle date di pagamento
|
||||
bool condpag_hndl( TMask_field& field, KEY key )
|
||||
{
|
||||
if ( key == K_TAB )
|
||||
{
|
||||
TMask& m = field.mask( );
|
||||
TString16 condpag( m.get( F_CODPAG ) );
|
||||
TString16 data( m.get( F_DATAINSC ) );
|
||||
if ( condpag.blank( ) || data.blank( ) )
|
||||
return TRUE;
|
||||
TPagamento pag( condpag, data );
|
||||
pag.set_total( 100, 10, 10 );
|
||||
pag.set_rate_auto( );
|
||||
int numrate = pag.n_rate( );
|
||||
for( int i = 0; i < numrate; i ++ )
|
||||
m.set( F_DATASCAD1 + i, pag.data_rata( i ).string( ) );
|
||||
for( ; i < 5; i ++ )
|
||||
m.hide( F_DATASCAD1 + i );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// handler per la validazione di una stringa/sconto
|
||||
bool sconto_hndl( TMask_field& field, KEY key )
|
||||
{
|
||||
if ( field.to_check( key, TRUE ) )
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
TSconto s;
|
||||
s.set( field.get( ), TRUE );
|
||||
if( s.is_valid( ) )
|
||||
{
|
||||
field.set( s.get( ) );
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
14
ve/ve0100c.h
14
ve/ve0100c.h
@ -1,8 +1,8 @@
|
||||
#define __VE0100C_H
|
||||
|
||||
// Handlers per i campi delle bolle
|
||||
|
||||
extern bool ora_hndl(TMask_field& field, KEY key);
|
||||
extern bool codcli_hndl(TMask_field& field, KEY key);
|
||||
extern bool dummy_hndl(TMask_field& field, KEY key);
|
||||
#define __VE0100C_H
|
||||
|
||||
// Handlers per i campi delle bolle
|
||||
|
||||
extern bool ora_hndl(TMask_field& field, KEY key);
|
||||
extern bool codcli_hndl(TMask_field& field, KEY key);
|
||||
extern bool dummy_hndl(TMask_field& field, KEY key);
|
||||
extern bool condpag_hndl(TMask_field& field, KEY key);
|
240
ve/ve0200.cpp
240
ve/ve0200.cpp
@ -1,120 +1,120 @@
|
||||
#include <xvt.h>
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CONFAPP_H
|
||||
#include <confapp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __EXECP_H
|
||||
#include <execp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TABUTIL_H
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
#define SINTASSI "Sintassi: VE0 -2 [a|b|c|d|e]"
|
||||
|
||||
class TConf_vendite : public TConfig_application
|
||||
{
|
||||
private:
|
||||
|
||||
bool _changed;
|
||||
|
||||
public:
|
||||
|
||||
virtual bool preprocess_config (TMask& mask, TConfig& config);
|
||||
virtual bool postprocess_config_changed (const char* par, const char* var,
|
||||
const char* oldv, const char* newv);
|
||||
virtual bool postprocess_config (TMask& mask, TConfig& config);
|
||||
virtual bool user_create( );
|
||||
virtual bool user_destroy( );
|
||||
|
||||
TConf_vendite() : TConfig_application( CONFIG_DITTA ){ }
|
||||
virtual ~TConf_vendite( ){ }
|
||||
};
|
||||
|
||||
bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
|
||||
{
|
||||
disable_menu_item(M_FILE_NEW);
|
||||
disable_menu_item(M_FILE_REVERT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
|
||||
{
|
||||
enable_menu_item(M_FILE_NEW);
|
||||
enable_menu_item(M_FILE_REVERT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TConf_vendite::postprocess_config_changed (const char* par, const char* var,
|
||||
const char* oldv, const char* newv)
|
||||
{
|
||||
// Notifica al motore che la configurazione è cambiata: occorre rigenerare le maschere
|
||||
_changed = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_vendite::user_create( )
|
||||
{
|
||||
TString16 arg( argv(2) );
|
||||
_changed = FALSE;
|
||||
// Il fottuto meno serve per evitare fottutamente che la fottuta confapp
|
||||
// si fotta il fottuto parametro
|
||||
if( arg[ 0 ] != '-' )
|
||||
fatal_box( SINTASSI );
|
||||
char msk = arg[1];
|
||||
// Devo usare un puntatore così deletandolo si registra
|
||||
TConfig confditta( CONFIG_DITTA );
|
||||
// Prima usavo le lettere ma la fottuta confapp si fotte il fottuto -c per i suoi fottuti
|
||||
// motivi, così uso i fottuti numeri
|
||||
switch( msk )
|
||||
{
|
||||
case '1':
|
||||
confditta.set( "EdMask", "ve0200a", "ve" );
|
||||
break;
|
||||
case '2':
|
||||
confditta.set( "EdMask", "ve0200b", "ve" );
|
||||
break;
|
||||
case '3':
|
||||
confditta.set( "EdMask", "ve0200c", "ve" );
|
||||
break;
|
||||
case '4':
|
||||
confditta.set( "EdMask", "ve0200d", "ve" );
|
||||
break;
|
||||
case '5':
|
||||
confditta.set( "EdMask", "ve0200e", "ve" );
|
||||
break;
|
||||
default:
|
||||
fatal_box( SINTASSI );
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_vendite::user_destroy( )
|
||||
{
|
||||
if( _changed )
|
||||
{
|
||||
TConfig confditta( CONFIG_DITTA );
|
||||
confditta.set( "EdMask", "", "ve" );
|
||||
confditta.set( "CHANGED", "X", "ve" );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int ve0200(int argc, char** argv)
|
||||
{
|
||||
TConf_vendite appc;
|
||||
|
||||
if( argc < 3 )
|
||||
fatal_box( SINTASSI );
|
||||
appc.run(argc, argv, "Parametri gestione vendite");
|
||||
return 0;
|
||||
}
|
||||
#include <xvt.h>
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CONFAPP_H
|
||||
#include <confapp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __EXECP_H
|
||||
#include <execp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TABUTIL_H
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
#define SINTASSI "Sintassi: VE0 -2 -[1|2|3|4|5]"
|
||||
|
||||
class TConf_vendite : public TConfig_application
|
||||
{
|
||||
private:
|
||||
|
||||
bool _changed;
|
||||
|
||||
public:
|
||||
|
||||
virtual bool preprocess_config (TMask& mask, TConfig& config);
|
||||
virtual bool postprocess_config_changed (const char* par, const char* var,
|
||||
const char* oldv, const char* newv);
|
||||
virtual bool postprocess_config (TMask& mask, TConfig& config);
|
||||
virtual bool user_create( );
|
||||
virtual bool user_destroy( );
|
||||
|
||||
TConf_vendite() : TConfig_application( CONFIG_DITTA ){ }
|
||||
virtual ~TConf_vendite( ){ }
|
||||
};
|
||||
|
||||
bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
|
||||
{
|
||||
disable_menu_item(M_FILE_NEW);
|
||||
disable_menu_item(M_FILE_REVERT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
|
||||
{
|
||||
enable_menu_item(M_FILE_NEW);
|
||||
enable_menu_item(M_FILE_REVERT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TConf_vendite::postprocess_config_changed (const char* par, const char* var,
|
||||
const char* oldv, const char* newv)
|
||||
{
|
||||
// Notifica al motore che la configurazione è cambiata: occorre rigenerare le maschere
|
||||
_changed = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_vendite::user_create( )
|
||||
{
|
||||
TString16 arg( argv(2) );
|
||||
_changed = FALSE;
|
||||
// Il fottuto meno serve per evitare fottutamente che la fottuta confapp
|
||||
// si fotta il fottuto parametro
|
||||
if( arg[ 0 ] != '-' )
|
||||
fatal_box( SINTASSI );
|
||||
char msk = arg[1];
|
||||
// Devo usare un puntatore così deletandolo si registra
|
||||
TConfig confditta( CONFIG_DITTA );
|
||||
// Prima usavo le lettere ma la fottuta confapp si fotte il fottuto -c per i suoi fottuti
|
||||
// motivi, così uso i fottuti numeri
|
||||
switch( msk )
|
||||
{
|
||||
case '1':
|
||||
confditta.set( "EdMask", "ve0200a", "ve" );
|
||||
break;
|
||||
case '2':
|
||||
confditta.set( "EdMask", "ve0200b", "ve" );
|
||||
break;
|
||||
case '3':
|
||||
confditta.set( "EdMask", "ve0200c", "ve" );
|
||||
break;
|
||||
case '4':
|
||||
confditta.set( "EdMask", "ve0200d", "ve" );
|
||||
break;
|
||||
case '5':
|
||||
confditta.set( "EdMask", "ve0200e", "ve" );
|
||||
break;
|
||||
default:
|
||||
fatal_box( SINTASSI );
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_vendite::user_destroy( )
|
||||
{
|
||||
if( _changed )
|
||||
{
|
||||
TConfig confditta( CONFIG_DITTA );
|
||||
confditta.set( "EdMask", "", "ve" );
|
||||
confditta.set( "CHANGED", "X", "ve" );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int ve0200(int argc, char** argv)
|
||||
{
|
||||
TConf_vendite appc;
|
||||
|
||||
if( argc < 3 )
|
||||
fatal_box( SINTASSI );
|
||||
appc.run(argc, argv, "Parametri gestione vendite");
|
||||
return 0;
|
||||
}
|
||||
|
24
ve/ve0200b.h
24
ve/ve0200b.h
@ -1,12 +1,12 @@
|
||||
#define F_TIPOPERC 101
|
||||
#define F_GESARCHPROV 102
|
||||
#define F_ARCHPROV1 103
|
||||
#define F_ARCHPROV2 104
|
||||
#define F_ARCHPROV3 105
|
||||
#define F_ARCHPROV4 106
|
||||
#define F_TIPOLIQPROV 107
|
||||
#define F_GESVAL 108
|
||||
#define F_GESLIN 109
|
||||
#define F_GESSOSPIMP 110
|
||||
#define F_GESOCCAS 111
|
||||
#define F_GESOCCHK 112
|
||||
#define F_TIPOPERC 101
|
||||
#define F_GESARCHPROV 102
|
||||
#define F_ARCHPROV1 103
|
||||
#define F_ARCHPROV2 104
|
||||
#define F_ARCHPROV3 105
|
||||
#define F_ARCHPROV4 106
|
||||
#define F_TIPOLIQPROV 107
|
||||
#define F_GESVAL 108
|
||||
#define F_GESLIN 109
|
||||
#define F_GESSOSPIMP 110
|
||||
#define F_GESOCCAS 111
|
||||
#define F_GESOCCHK 112
|
||||
|
2662
ve/ve0300.cpp
2662
ve/ve0300.cpp
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,4 @@
|
||||
#define F_D_TIPO 111
|
||||
#define F_D_CODCAT 112
|
||||
#define F_D_SCONTO 113
|
||||
#define F_D_DESCR 114
|
||||
|
||||
#define F_D_TIPO 111
|
||||
#define F_D_CODCAT 112
|
||||
#define F_D_SCONTO 113
|
||||
#define F_D_DESCR 114
|
||||
|
17
ve/ve2100r.h
17
ve/ve2100r.h
@ -1,9 +1,8 @@
|
||||
#define F_R_RICERCA 121
|
||||
#define F_R_TIPO 122
|
||||
#define F_R_CODCAT 123
|
||||
#define F_R_CODART 124
|
||||
#define F_R_UM 125
|
||||
#define F_R_DESART 126
|
||||
#define F_R_SCONTO 127
|
||||
#define F_R_DESCAT 128
|
||||
|
||||
#define F_R_RICERCA 121
|
||||
#define F_R_TIPO 122
|
||||
#define F_R_CODCAT 123
|
||||
#define F_R_CODART 124
|
||||
#define F_R_UM 125
|
||||
#define F_R_DESART 126
|
||||
#define F_R_SCONTO 127
|
||||
#define F_R_DESCAT 128
|
||||
|
@ -100,8 +100,8 @@ bool TCondizioni_vendita::user_create() {
|
||||
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_R_C_TIPOCF);
|
||||
KILL(F_R_C_CODCF);
|
||||
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
|
||||
|
BIN
ve/vefields.wri
BIN
ve/vefields.wri
Binary file not shown.
129
ve/veuml1.h
129
ve/veuml1.h
@ -1,65 +1,64 @@
|
||||
#ifndef __VEUML1_H
|
||||
#define __VEUML1_H
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#include "VEUML.H"
|
||||
#endif
|
||||
|
||||
// gruppo dei vettori
|
||||
|
||||
#define GR_VETTORI 15
|
||||
|
||||
// campi della maschera totale
|
||||
|
||||
#define F_RAGSOC 301
|
||||
#define F_INDCF 302
|
||||
#define F_CIVCF 303
|
||||
#define F_NOME_VAL 304
|
||||
#define F_DESCODPAG 305
|
||||
// I prossimi 5 campi devono essere consecutivi come numerazione
|
||||
// perchè faccio un ciclo per settarli
|
||||
#define F_DATASCAD1 306
|
||||
#define F_DATASCAD2 307
|
||||
#define F_DATASCAD3 308
|
||||
#define F_DATASCAD4 309
|
||||
#define F_DATASCAD5 310
|
||||
#define F_BANCA_APP 311
|
||||
#define F_BANCA_PRE 312
|
||||
#define F_INDSP 313
|
||||
#define F_CIVSP 314
|
||||
#define F_CAPSP 315
|
||||
#define F_LOCALITASP 316
|
||||
#define F_PORTO 317
|
||||
#define F_DENCAUSTRASP 318
|
||||
#define F_NOMEVETT1 319
|
||||
#define F_NOMEVETT2 320
|
||||
#define F_NOMEVETT3 321
|
||||
#define F_DESCRBENI1 322
|
||||
#define F_DESCRBENI2 323
|
||||
#define F_DESUMTARA 324
|
||||
#define F_DESUMPNETTO 325
|
||||
#define F_DESCRMAG1 326
|
||||
#define F_DESCRMAG2 327
|
||||
#define F_COFI 328
|
||||
#define F_STATOPAIVA 329
|
||||
#define F_LOCALITACF 330
|
||||
#define F_CAPCF 331
|
||||
#define F_COMCF 332
|
||||
#define F_PROVCOM 333
|
||||
#define F_STATOCF 334
|
||||
#define F_DATACAMBIO 335
|
||||
#define F_DESBANAPP 336
|
||||
#define F_DESLIN 337
|
||||
#define F_DESBANPRE 338
|
||||
#define F_NOMEVAL 339
|
||||
#define F_PAIVA 340
|
||||
#define F_DENCOM 341
|
||||
#define F_DESSTATOCF 342
|
||||
#define F_COMSP 343
|
||||
#define F_DENCOMSP 344
|
||||
#define F_PROVCOMSP 345
|
||||
#define F_STATOSP 346
|
||||
#define F_DESSTATOSP 347
|
||||
#define F_DESLIST 348
|
||||
#define F_RAGSOCSP 349
|
||||
#endif // __VEUML1_H
|
||||
#ifndef __VEUML1_H
|
||||
#define __VEUML1_H
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#include "VEUML.H"
|
||||
#endif
|
||||
|
||||
// gruppo dei vettori
|
||||
|
||||
#define GR_VETTORI 15
|
||||
|
||||
// campi della maschera totale
|
||||
|
||||
#define F_RAGSOC 301
|
||||
#define F_INDCF 302
|
||||
#define F_CIVCF 303
|
||||
#define F_RAGSOCSP 304
|
||||
#define F_DESCODPAG 305
|
||||
// I prossimi 5 campi devono essere consecutivi come numerazione
|
||||
// perchè faccio un ciclo per settarli
|
||||
#define F_DATASCAD1 306
|
||||
#define F_DATASCAD2 307
|
||||
#define F_DATASCAD3 308
|
||||
#define F_DATASCAD4 309
|
||||
#define F_DATASCAD5 310
|
||||
#define F_BANCA_APP 311
|
||||
#define F_BANCA_PRE 312
|
||||
#define F_INDSP 313
|
||||
#define F_CIVSP 314
|
||||
#define F_CAPSP 315
|
||||
#define F_LOCALITASP 316
|
||||
#define F_PORTO 317
|
||||
#define F_DENCAUSTRASP 318
|
||||
#define F_NOMEVETT1 319
|
||||
#define F_NOMEVETT2 320
|
||||
#define F_NOMEVETT3 321
|
||||
#define F_DESCRBENI1 322
|
||||
#define F_DESCRBENI2 323
|
||||
#define F_DESUMTARA 324
|
||||
#define F_DESUMPNETTO 325
|
||||
#define F_DESCRMAG1 326
|
||||
#define F_DESCRMAG2 327
|
||||
#define F_COFI 328
|
||||
#define F_STATOPAIVA 329
|
||||
#define F_LOCALITACF 330
|
||||
#define F_CAPCF 331
|
||||
#define F_COMCF 332
|
||||
#define F_PROVCOM 333
|
||||
#define F_STATOCF 334
|
||||
#define F_DATACAMBIO 335
|
||||
#define F_DESBANAPP 336
|
||||
#define F_DESLIN 337
|
||||
#define F_DESBANPRE 338
|
||||
#define F_NOMEVAL 339
|
||||
#define F_PAIVA 340
|
||||
#define F_DENCOM 341
|
||||
#define F_DESSTATOCF 342
|
||||
#define F_COMSP 343
|
||||
#define F_DENCOMSP 344
|
||||
#define F_PROVCOMSP 345
|
||||
#define F_STATOSP 346
|
||||
#define F_DESSTATOSP 347
|
||||
#define F_DESLIST 348
|
||||
#endif // __VEUML1_H
|
||||
|
54
ve/veuml2.h
54
ve/veuml2.h
@ -1,28 +1,34 @@
|
||||
#ifndef __SHEET_FIELDS
|
||||
#define __SHEET_FIELDS
|
||||
|
||||
#define FS_STATORIGA 101
|
||||
#define FS_TIPORIGA 102
|
||||
#define FS_PROFRIGA 103
|
||||
#define FS_CODMAG 104
|
||||
#define FS_CODART 105
|
||||
#define FS_DESCR 106
|
||||
#define FS_DESCLUNGA 107
|
||||
#define FS_PREZZO 108
|
||||
#define FS_UMQTA 109
|
||||
#define FS_QTA 110
|
||||
#define FS_QTAEVASA 111
|
||||
#define FS_RIGAEVASA 112
|
||||
#define FS_TARA 113
|
||||
#define FS_PNETTO 114
|
||||
#define FS_NCOLLI 115
|
||||
#define FS_DAEVADERE 116
|
||||
#define FS_SCONTO 117
|
||||
#define FS_PERCPROV 118
|
||||
#define FS_IMPFISSO 119
|
||||
#define FS_IMPFISUN 120
|
||||
#define FS_CODIVA 121
|
||||
#define FS_ADDIVA 122
|
||||
#define FS_ASPBENI 123
|
||||
|
||||
#define FS_CODNUM 101
|
||||
#define FS_ANNO 102
|
||||
#define FS_PROVV 103
|
||||
#define FS_NDOC 104
|
||||
#define FS_STATORIGA 105
|
||||
#define FS_TIPORIGA 106
|
||||
#define FS_PROFRIGA 107
|
||||
#define FS_CODMAG 108
|
||||
#define FS_CODDEP 109
|
||||
#define FS_CODART 110
|
||||
#define FS_DESCR 111
|
||||
#define FS_DESCLUNGA 112
|
||||
#define FS_PREZZO 113
|
||||
#define FS_UMQTA 114
|
||||
#define FS_QTA 115
|
||||
#define FS_QTAEVASA 116
|
||||
#define FS_RIGAEVASA 117
|
||||
#define FS_TARA 118
|
||||
#define FS_PNETTO 119
|
||||
#define FS_NCOLLI 120
|
||||
#define FS_DAEVADERE 121
|
||||
#define FS_SCONTO 122
|
||||
#define FS_PERCPROV 123
|
||||
#define FS_IMPFISSO 124
|
||||
#define FS_IMPFISUN 125
|
||||
#define FS_CODIVA 126
|
||||
#define FS_ADDIVA 127
|
||||
#define FS_ASPBENI 128
|
||||
#define FS_G1 129
|
||||
|
||||
#endif // __SHEET_FIELDS
|
||||
|
Loading…
x
Reference in New Issue
Block a user