Aggiunti validate per ora e sconti
git-svn-id: svn://10.65.10.50/trunk@2193 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
9cc53e257e
commit
58daae6acd
@ -88,6 +88,8 @@
|
|||||||
#define ZEROFILL_FUNC 19 1
|
#define ZEROFILL_FUNC 19 1
|
||||||
#define ALPHA_FUNC 20 0
|
#define ALPHA_FUNC 20 0
|
||||||
#define NOT_EMPTY_CHECK_FIELD 21 0
|
#define NOT_EMPTY_CHECK_FIELD 21 0
|
||||||
|
#define ORA 22 0
|
||||||
|
#define SCONTO 23 0
|
||||||
|
|
||||||
#define VALEXPR VALIDATE EXPR_FUNC
|
#define VALEXPR VALIDATE EXPR_FUNC
|
||||||
#define NUM_EXPR VALEXPR 0
|
#define NUM_EXPR VALEXPR 0
|
||||||
|
@ -638,8 +638,145 @@ HIDDEN bool _not_empty_chkfld_val(TMask_field& f, KEY k)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIDDEN bool _sconto_val(TMask_field& f, KEY key)
|
||||||
|
{
|
||||||
|
if ( f.to_check( key ) )
|
||||||
|
{
|
||||||
|
TString work( f.get( ) );
|
||||||
|
TString goodexp;
|
||||||
|
TString num;
|
||||||
|
|
||||||
|
// Elimina gli spazi molesti
|
||||||
|
work.strip_spaces( );
|
||||||
|
// Per ora nessun errore
|
||||||
|
int _errorpos = -1;
|
||||||
|
|
||||||
|
int i = 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 )
|
||||||
|
{
|
||||||
|
real newval( num );
|
||||||
|
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à
|
||||||
|
bool _valid = ( _errorpos < 0 );
|
||||||
|
// Se richiesto segnala l'errore
|
||||||
|
if( !_valid )
|
||||||
|
warning_box( "Espressione di sconto non valida. Errore sul carattere %d.", _errorpos + 1 );
|
||||||
|
if( _valid )
|
||||||
|
{
|
||||||
|
// Aggiunge l'ultimo numero preso
|
||||||
|
real lastval( num );
|
||||||
|
if( lastval >= 0 )
|
||||||
|
goodexp << '+';
|
||||||
|
goodexp << num;
|
||||||
|
// Assegna la nuova espressione formattata bene
|
||||||
|
f.set( goodexp );
|
||||||
|
// Bravo, hai vinto una bambolina
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Validate fallito
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
#define MAX_FUNC 22
|
HIDDEN bool _ora_val(TMask_field& f, KEY key)
|
||||||
|
{
|
||||||
|
if ( f.to_check( key ) )
|
||||||
|
{
|
||||||
|
TFixed_string ora( f.get( ), 6 );
|
||||||
|
if ( ora.not_empty( ) || f.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
|
||||||
|
{
|
||||||
|
f.set( ora );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_FUNC 24
|
||||||
|
|
||||||
HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
|
HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
|
||||||
{
|
{
|
||||||
@ -664,8 +801,11 @@ HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
|
|||||||
_filename_val,
|
_filename_val,
|
||||||
_zerofill_val,
|
_zerofill_val,
|
||||||
_alpha_val,
|
_alpha_val,
|
||||||
_not_empty_chkfld_val
|
_not_empty_chkfld_val,
|
||||||
};
|
_ora_val,
|
||||||
|
_sconto_val,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
bool validate(int fn, TMask_field& f, KEY k, const TArray& parms)
|
bool validate(int fn, TMask_field& f, KEY k, const TArray& parms)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user