Eliminata funzione di matteo
git-svn-id: svn://10.65.10.50/trunk@3674 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
9a5d61570a
commit
c7d7a67725
@ -662,103 +662,83 @@ HIDDEN bool _not_empty_chkfld_val(TMask_field& f, KEY k)
|
|||||||
|
|
||||||
HIDDEN bool _sconto_val(TMask_field& f, KEY key)
|
HIDDEN bool _sconto_val(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
|
bool ok = TRUE;
|
||||||
|
|
||||||
if ( f.to_check( key ) )
|
if ( f.to_check( key ) )
|
||||||
{
|
{
|
||||||
TString work( f.get( ) );
|
const TString80 work(f.get());
|
||||||
TString goodexp;
|
TString80 goodexp;
|
||||||
TString num;
|
|
||||||
|
|
||||||
// Elimina gli spazi molesti
|
// Elimina gli spazi molesti
|
||||||
work.strip_spaces( );
|
// work.strip_spaces( );
|
||||||
// Per ora nessun errore
|
if (work.not_empty())
|
||||||
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
|
TString80 num;
|
||||||
real lastval( num );
|
bool dec = FALSE; // Flag che indica se si attende l'inizio di un numero
|
||||||
if( lastval >= 0 )
|
bool startnum = TRUE; // Flag che indica se siamo all'inizio di un numero
|
||||||
goodexp << '+';
|
int errorchar = ' ';
|
||||||
goodexp << num;
|
|
||||||
// Assegna la nuova espressione formattata bene
|
// Flag che indica se sono nella parte decimale di un numero
|
||||||
f.set( goodexp );
|
for (const char * s = (const char *)work; *s && errorchar == ' '; s++)
|
||||||
// Bravo, hai vinto una bambolina
|
{
|
||||||
return TRUE;
|
const char c = *s;
|
||||||
}
|
switch(c)
|
||||||
else
|
{
|
||||||
{
|
case '+':
|
||||||
// Validate fallito
|
case '-':
|
||||||
return FALSE;
|
// Se ero in in numero ...
|
||||||
|
if( !startnum )
|
||||||
|
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 ',':
|
||||||
|
if(!dec)
|
||||||
|
{
|
||||||
|
if( startnum )
|
||||||
|
num << '0'; // Se occorreva un numero ci metto lo 0
|
||||||
|
num << '.'; // Interpreto la virgola come punto
|
||||||
|
dec = TRUE;
|
||||||
|
startnum = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
errorchar = c; // Se siamo gi` nella parte decimale segnala un errore
|
||||||
|
break;
|
||||||
|
case ' ':
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
errorchar = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Controlla la validita`
|
||||||
|
ok = errorchar == ' ';
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
goodexp << num; // Assegna la nuova espressione formattata bene
|
||||||
|
f.set(goodexp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
f.error_box( "Espressione di sconto non valida. Errore sul carattere %c", errorchar);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
return ok;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HIDDEN bool _ora_val(TMask_field& f, KEY key)
|
HIDDEN bool _ora_val(TMask_field& f, KEY key)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user