costanti per listini/contratti e campagne. Pubblicato l'elenco delle variabili di configurazione di VE. git-svn-id: svn://10.65.10.50/trunk@1843 c028cbd2-c16b-5b4b-a496-9718f37d4682
117 lines
2.6 KiB
C++
Executable File
117 lines
2.6 KiB
C++
Executable File
#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 )
|
|
{
|
|
|
|
|
|
}
|