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:
matteo 1995-11-22 13:41:41 +00:00
parent 9cc53e257e
commit 58daae6acd
2 changed files with 145 additions and 3 deletions

View File

@ -88,6 +88,8 @@
#define ZEROFILL_FUNC 19 1
#define ALPHA_FUNC 20 0
#define NOT_EMPTY_CHECK_FIELD 21 0
#define ORA 22 0
#define SCONTO 23 0
#define VALEXPR VALIDATE EXPR_FUNC
#define NUM_EXPR VALEXPR 0

View File

@ -638,8 +638,145 @@ HIDDEN bool _not_empty_chkfld_val(TMask_field& f, KEY k)
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] =
{
@ -664,8 +801,11 @@ HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
_filename_val,
_zerofill_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)
{