Modifiche generali alle vendite.

git-svn-id: svn://10.65.10.50/trunk@2237 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
matteo 1995-12-04 17:41:06 +00:00
parent ce0a332775
commit 407c8a6a87
18 changed files with 4109 additions and 3660 deletions

View File

@ -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" ) );
}
}

View File

@ -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

View File

@ -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" ) );
}
}

View File

@ -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

View File

@ -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 =

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

Binary file not shown.

View File

@ -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

View File

@ -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