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 )
 | 
						|
{
 | 
						|
 | 
						|
 | 
						|
}
 |