385 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			385 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#ifndef __TCLIFOR_H
 | 
						|
#include "tclifor.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __CONFIG_H
 | 
						|
#include "config.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __VEUML1_H
 | 
						|
#include "veuml1.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __VE1000O_H
 | 
						|
#include "ve1000o.h"
 | 
						|
#endif
 | 
						|
 | 
						|
const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field )
 | 
						|
{
 | 
						|
  if( table != _tablename )
 | 
						|
  {
 | 
						|
    delete _table;
 | 
						|
    _table = new TTable( table );
 | 
						|
    _tablename = table;
 | 
						|
  }
 | 
						|
  if( codtab != _table->curr( ).get( "CODTAB" ) )
 | 
						|
  {
 | 
						|
    _table->zero( );
 | 
						|
    _table->put( "CODTAB", codtab );
 | 
						|
    _table->read( );       
 | 
						|
  }
 | 
						|
  return _table->get( field );
 | 
						|
};
 | 
						|
 | 
						|
const TString& TData_picker::get( const int file, const TString& fieldname )
 | 
						|
{
 | 
						|
  return lfile( file ).get( fieldname );
 | 
						|
}
 | 
						|
 | 
						|
int TData_picker::get_int( const int file, const TString& fieldname )
 | 
						|
{
 | 
						|
  return lfile( file ).get_int( fieldname );
 | 
						|
}
 | 
						|
 | 
						|
long TData_picker::get_long( const int file, const TString& fieldname )
 | 
						|
{
 | 
						|
  return lfile( file ).get_long( fieldname );
 | 
						|
}
 | 
						|
 | 
						|
bool TData_picker::get_bool( const int file, const TString& fieldname )
 | 
						|
{
 | 
						|
  return lfile( file ).get_bool( fieldname );
 | 
						|
} 
 | 
						|
 | 
						|
int TCliFor::write_occas( )
 | 
						|
{
 | 
						|
  if( !occasionale( ) ) 
 | 
						|
    return NOERR;
 | 
						|
  TRelation occas( LF_OCCAS );
 | 
						|
  occas_mask( ).autosave( occas );
 | 
						|
  return occas.write( );
 | 
						|
}
 | 
						|
 | 
						|
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" )
 | 
						|
{
 | 
						|
  _occas_mask.set_handler( O_CODICE, occas_code_handler );
 | 
						|
  add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" );
 | 
						|
}  
 | 
						|
 | 
						|
void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
 | 
						|
{
 | 
						|
  _tipocf = tipocf;
 | 
						|
  _codcf = codcf;
 | 
						|
  zero( );
 | 
						|
  curr( ).put( "TIPOCF", tipocf );
 | 
						|
  curr( ).put( "CODCF", codcf );
 | 
						|
  lfile( ).setkey( 1 );
 | 
						|
  if( read( ) != NOERR )
 | 
						|
    yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf );
 | 
						|
  _occas = curr().get_bool( "OCCAS" );
 | 
						|
  if ( occasionale( ) )
 | 
						|
  {
 | 
						|
    TRelation occrel( LF_OCCAS );
 | 
						|
    occrel.curr( ).zero( );
 | 
						|
    occrel.curr( ).put( "CFPI", ocfpi );
 | 
						|
    occrel.read( );
 | 
						|
    occas_mask( ).autoload( occrel );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TCliForVendite::update_mask( TMask& m, bool onload )
 | 
						|
{  
 | 
						|
  TString16 stato;
 | 
						|
  
 | 
						|
  // Setta i campi che appartengono al file LF_CLIFO  
 | 
						|
  bool occas = occasionale( );
 | 
						|
  m.show( F_OCFPI, occas );
 | 
						|
  m.show( F_OCCASEDIT, occas );
 | 
						|
  // In forse per l'Occasionale, sicuri per il Normale
 | 
						|
  m.show( F_COFI, !occas );
 | 
						|
  m.show( F_STATOPAIVA, !occas );
 | 
						|
  m.show( F_PAIVA, !occas );
 | 
						|
  set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" );
 | 
						|
  if( !onload )    
 | 
						|
  {
 | 
						|
    set( m, F_CODVAL, LF_CLIFO, "CODVAL" );
 | 
						|
    set( m, F_CODLIN, LF_CLIFO, "CODLIN" );
 | 
						|
    set( m, F_CODPAG, LF_CLIFO, "CODPAG" );
 | 
						|
    set( m, F_CODABIA, LF_CLIFO, "CODABI" );
 | 
						|
    set( m, F_CODCABA, LF_CLIFO, "CODCAB" );
 | 
						|
    // Setta i campi che appartengono al file LF_CFVEN
 | 
						|
    set( m, F_CODABIP, LF_CFVEN, "CODABIPR" );
 | 
						|
    set( m, F_CODCABP, LF_CFVEN, "CODCABPR" );
 | 
						|
    set( m, F_RAGGR, LF_CFVEN, "RAGGDOC" );
 | 
						|
    set( m, F_CODINDSP, LF_CFVEN, "CODINDSP" );
 | 
						|
    set( m, F_CODAG, LF_CFVEN, "CODAG" );
 | 
						|
    set( m, F_CODSPMEZZO, LF_CFVEN, "CODSPMEZZO" );
 | 
						|
    set( m, F_CODPORTO, LF_CFVEN, "CODPORTO" );
 | 
						|
    set( m, F_CODNOTESP1, LF_CFVEN, "CODNOTESP1" );
 | 
						|
    set( m, F_CODNOTESP2, LF_CFVEN, "CODNOTESP2" );
 | 
						|
    set( m, F_CODVETT1, LF_CFVEN, "CODVETT1" );
 | 
						|
    set( m, F_CODVETT2, LF_CFVEN, "CODVETT2" );
 | 
						|
    set( m, F_CODVETT3, LF_CFVEN, "CODVETT3" );
 | 
						|
    set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" );  
 | 
						|
    set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" );
 | 
						|
    set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" );
 | 
						|
  }
 | 
						|
  if ( occasionale ( ) ) 
 | 
						|
  {    
 | 
						|
    m.set( F_COFI, "" );
 | 
						|
    m.set( F_PAIVA, "" );
 | 
						|
    m.set( F_OCFPI, occas_mask( ).get( O_CODICE ) );   
 | 
						|
    m.set( F_RAGSOC, occas_mask( ).get( O_RAGSOC ) );
 | 
						|
    m.set( F_INDCF, occas_mask( ).get( O_INDIRIZZO ) );
 | 
						|
    m.set( F_CIVCF, occas_mask( ).get( O_NUMERO ) );
 | 
						|
    m.set( F_CAPCF, occas_mask( ).get( O_CAP ) );
 | 
						|
    m.set( F_COMCF, occas_mask( ).get( O_COMUNE ) );    
 | 
						|
    m.set( F_STATOCF, stato = occas_mask( ).get( O_STATO ) );  
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    set( m, F_COFI, LF_CLIFO, "COFI" );
 | 
						|
    set( m, F_INDCF, LF_CLIFO, "INDCF" );
 | 
						|
    set( m, F_CIVCF, LF_CLIFO, "CIVCF" );
 | 
						|
    set( m, F_STATOPAIVA, LF_CLIFO, "STATOPAIV" );
 | 
						|
    set( m, F_PAIVA, LF_CLIFO, "PAIV" );
 | 
						|
    set( m, F_LOCALITACF, LF_CLIFO, "LOCALITACF" );
 | 
						|
    set( m, F_CAPCF, LF_CLIFO, "CAPCF" );
 | 
						|
    set( m, F_COMCF, LF_CLIFO, "COMCF" );
 | 
						|
    stato = get( LF_CLIFO, "STATOCF" );
 | 
						|
    m.set( F_STATOCF, stato );
 | 
						|
  }
 | 
						|
  if ( !stato.blank( ) )
 | 
						|
    m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) );    
 | 
						|
  m.check_field( F_CODPAG );
 | 
						|
  m.check_field( F_CODLIN );
 | 
						|
  // m.check_field( F_CODABIA );
 | 
						|
  m.check_field( F_CODCABA );
 | 
						|
  // m.check_field( F_CODABIP );
 | 
						|
  m.check_field( F_CODCABP );
 | 
						|
  m.check_field( F_CODINDSP );
 | 
						|
  m.check_field( F_CODAG );
 | 
						|
  m.check_field( F_CODSPMEZZO );
 | 
						|
  m.check_field( F_CODPORTO );
 | 
						|
  m.check_field( F_CODNOTESP1 );
 | 
						|
  m.check_field( F_CODNOTESP2 );
 | 
						|
  m.check_field( F_CODVETT1 );
 | 
						|
  m.check_field( F_CODVETT2 );
 | 
						|
  m.check_field( F_CODVETT3 );    
 | 
						|
  imposta_dati_comune( m );
 | 
						|
  imposta_indirizzo_spedizione( m );
 | 
						|
  imposta_sconto_testa( m );
 | 
						|
  imposta_valuta( m  );
 | 
						|
}
 | 
						|
 | 
						|
void TCliFor::edita_occasionale( )
 | 
						|
{
 | 
						|
  CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" );
 | 
						|
  _occas_mask.run( );  
 | 
						|
};
 | 
						|
 | 
						|
bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
 | 
						|
{
 | 
						|
  if (key == K_TAB)
 | 
						|
  {
 | 
						|
    const char* code = f.get();
 | 
						|
    if (*code)
 | 
						|
    {
 | 
						|
      TRelation occas(LF_OCCAS);
 | 
						|
      occas.lfile().put("CFPI", code);
 | 
						|
      if (occas.read(_isequal) == NOERR)
 | 
						|
      {
 | 
						|
        f.mask().autoload(occas);
 | 
						|
        f.mask().send_key(K_TAB, O_COMUNE);         // Forza decodifica comuni
 | 
						|
        f.mask().send_key(K_TAB, O_COMUNENAS);
 | 
						|
      }  
 | 
						|
    }
 | 
						|
  } 
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TCliForVendite::imposta_dati_comune( TMask& m )
 | 
						|
{
 | 
						|
  TLocalisamfile comuni(LF_COMUNI);
 | 
						|
  comuni.setkey( 1 );
 | 
						|
  if( occasionale( ) )
 | 
						|
  {
 | 
						|
    comuni.put( "COM", occas_mask( ).get( O_COMUNE ));
 | 
						|
    comuni.put( "STATO", occas_mask( ).get( O_STATO ) );
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    comuni.put( "COM", get( LF_CLIFO, "COMCF" ));
 | 
						|
    comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) );
 | 
						|
  }
 | 
						|
  comuni.read( );
 | 
						|
  m.set( F_DENCOM, comuni.get( "DENCOM" ) );
 | 
						|
  m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
 | 
						|
}
 | 
						|
 | 
						|
void TCliForVendite::imposta_indirizzo_spedizione( TMask& m )
 | 
						|
{
 | 
						|
  TString16 stato;
 | 
						|
  if( occasionale( ) )
 | 
						|
  {
 | 
						|
    m.set( F_CODINDSP, "" );
 | 
						|
    m.disable( F_CODINDSP );      
 | 
						|
    m.set( F_RAGSOCSP, occas_mask( ).get( O_RAGSOC ) );
 | 
						|
    m.set( F_INDSP, occas_mask( ).get( O_INDIRIZZO ) );
 | 
						|
    m.set( F_CIVSP, occas_mask( ).get( O_NUMERO ) );
 | 
						|
    // Sugli occasionali non c'è la località
 | 
						|
    m.set( F_LOCALITASP, "" );
 | 
						|
    m.set( F_CAPSP, occas_mask( ).get( O_CAP ) );
 | 
						|
    m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) );
 | 
						|
    m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) );
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {  
 | 
						|
    TString16 codindsp( m.get( F_CODINDSP ) );
 | 
						|
    if( codindsp.blank( ) )
 | 
						|
    {
 | 
						|
      m.set( F_RAGSOCSP, "" );
 | 
						|
      m.set( F_INDSP, "" );
 | 
						|
      m.set( F_CIVSP, "" );
 | 
						|
      m.set( F_LOCALITASP, "" );
 | 
						|
      m.set( F_CAPSP, "" );
 | 
						|
      m.set( F_COMSP, "" );
 | 
						|
      m.set( F_STATOSP, "" );
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      TLocalisamfile indsped( LF_INDSP );
 | 
						|
      indsped.setkey( 1 );
 | 
						|
      indsped.put( "TIPOCF", _tipocf );
 | 
						|
      indsped.put( "CODCF", _codcf );
 | 
						|
      indsped.put( "CODIND", atoi( codindsp ) );
 | 
						|
      if( indsped.read( ) != NOERR )
 | 
						|
        yesnofatal_box( "Indirizzo di spedizione non trovato!" );
 | 
						|
      m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) );      
 | 
						|
      m.set( F_INDSP, indsped.get( "INDIR" ) );
 | 
						|
      m.set( F_CIVSP, indsped.get( "CIV" ) );
 | 
						|
      m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) );
 | 
						|
      m.set( F_CAPSP, indsped.get( "CAP" ) );
 | 
						|
      m.set( F_COMSP, indsped.get( "COM" ) );
 | 
						|
      m.set( F_STATOSP, stato = indsped.get( "STATO" ) );
 | 
						|
    }        
 | 
						|
  }
 | 
						|
  if ( !stato.blank( ) )
 | 
						|
    m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) );    
 | 
						|
  TLocalisamfile comuni(LF_COMUNI);
 | 
						|
  comuni.setkey( 1 );
 | 
						|
  comuni.put( "COM", m.get( F_COMSP ) );
 | 
						|
  comuni.put( "STATO", m.get( F_STATOSP ) );  
 | 
						|
  comuni.read( );
 | 
						|
  m.set( F_DENCOMSP, comuni.get( "DENCOM" ) );
 | 
						|
  m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );  
 | 
						|
}
 | 
						|
 | 
						|
void TCliForVendite::imposta_sconto_testa( TMask& m )
 | 
						|
{
 | 
						|
  TConfig ditta( CONFIG_DITTA );
 | 
						|
  TString16 codsconto;
 | 
						|
  TString16 codart;
 | 
						|
  
 | 
						|
  char tipogestione = ditta.get( "GESSCO", "ve" )[ 0 ];
 | 
						|
  switch( tipogestione )
 | 
						|
  {
 | 
						|
    case 'N':  // Sconti non gestiti: pussa via!
 | 
						|
      return;
 | 
						|
      break;
 | 
						|
    case 'P':  // Percentuale su anagrafica cliente
 | 
						|
      m.set( F_SCONTOPERC, get( LF_CFVEN, "SCONTO" ) );
 | 
						|
      return;
 | 
						|
      break;
 | 
						|
    case 'T':  // Gestione tabella sconti
 | 
						|
      codsconto = get( LF_CFVEN, "CODSCC" );
 | 
						|
      if( !codsconto.blank( ) )
 | 
						|
      {
 | 
						|
        // ARCHIVIO SVCONTI PER SCONTO CLIENTE
 | 
						|
        // TLocalisamfile sconti( LF_SCONTI );
 | 
						|
        // sconti.setkey( 1 );
 | 
						|
        // sconti.zero( );
 | 
						|
        // sconti.put( "TIPO", "D" );
 | 
						|
        // sconti.put( "CODCAT", codsconto );
 | 
						|
        // if( sconti.read( ) == NOERR )
 | 
						|
        //   m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
 | 
						|
        // else
 | 
						|
        //   message_box( "Sconto non trovato nella tabella sconti!" );       
 | 
						|
        TTable sconti( "%SCC" );
 | 
						|
        sconti.setkey( 1 );
 | 
						|
        sconti.zero( );
 | 
						|
        // sconti.put( "TIPO", "D" );
 | 
						|
        sconti.put( "CODTAB", codsconto );
 | 
						|
        if( sconti.read( ) == NOERR )
 | 
						|
          m.set( F_SCONTOPERC, sconti.get( "S1" ) );
 | 
						|
        #ifdef DBG
 | 
						|
        else      
 | 
						|
          message_box( "Sconto non trovato nella tabella sconti!" );      
 | 
						|
        #endif
 | 
						|
      }
 | 
						|
      return;
 | 
						|
      break;
 | 
						|
    case 'A':  // Gestione archivio sconti
 | 
						|
      TLocalisamfile sconti( LF_SCONTI );
 | 
						|
      sconti.setkey( 1 );
 | 
						|
      sconti.zero( );
 | 
						|
      sconti.put( "TIPO", "I" );
 | 
						|
      if( ditta.get_bool( "SCOKEY", "ve", 1 ) )
 | 
						|
        sconti.put( "CODCAT", get( LF_CFVEN, "CATVEN" ) );
 | 
						|
      if( ditta.get_bool( "SCOKEY", "ve", 2 ) )
 | 
						|
        codart << get( LF_CFVEN, "CODSCC" );
 | 
						|
      else
 | 
						|
        codart << "  ";
 | 
						|
      if( ditta.get_bool( "SCOKEY", "ve", 3 ) )
 | 
						|
        codart << get( LF_CFVEN, "CODZONA" );
 | 
						|
      else
 | 
						|
        codart << "  ";
 | 
						|
      if( ditta.get_bool( "SCOKEY", "ve", 4 ) )
 | 
						|
        codart << get( LF_CLIFO, "CODPAG" );
 | 
						|
      sconti.put( "CODART", codart );
 | 
						|
      if( sconti.read( ) == NOERR )
 | 
						|
        m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
 | 
						|
      #ifdef DBG
 | 
						|
      else    
 | 
						|
        message_box( FALSE, "Sconto non trovato nell'archivio sconti!" );       
 | 
						|
      #endif  
 | 
						|
      return;
 | 
						|
      break;      
 | 
						|
  }  
 | 
						|
}
 | 
						|
 | 
						|
void TCliForVendite::imposta_valuta( TMask& m )
 | 
						|
{
 | 
						|
   
 | 
						|
  TConfig ditta( CONFIG_DITTA );
 | 
						|
   
 | 
						|
  if( ditta.get_bool( "GESVALAC", "ve" ) )
 | 
						|
  {
 | 
						|
    TTable cambi( "%CAM" );
 | 
						|
    cambi.zero( );
 | 
						|
    TString16 val( m.get( F_CODVAL ) );
 | 
						|
    TString16 codtab( ( const char * ) val );
 | 
						|
    codtab << m.get( F_DATADOC );
 | 
						|
    cambi.put( "CODTAB", codtab );
 | 
						|
    const int result = cambi.read( _isgteq );
 | 
						|
    if( result == _iseof )
 | 
						|
      cambi.prev( );
 | 
						|
    codtab = cambi.get( "CODTAB" );
 | 
						|
    if ( codtab.sub( 0, 2 ) == val )
 | 
						|
    {      
 | 
						|
      m.set( F_CAMBIO, cambi.get( "R10" ) );
 | 
						|
      m.set( F_DATACAMBIO, cambi.get( "D0" ) );
 | 
						|
      return;
 | 
						|
    }    
 | 
						|
  }
 | 
						|
  TTable valuta( "VAL" );
 | 
						|
  valuta.zero( );
 | 
						|
  valuta.put( "CODTAB", m.get( F_CODVAL ) );
 | 
						|
  if( valuta.read( ) == NOERR )
 | 
						|
  {
 | 
						|
    m.set( F_CAMBIO, valuta.get( "R10" ) );
 | 
						|
    m.set( F_DATACAMBIO, valuta.get( "D0" ) );
 | 
						|
  }
 | 
						|
}
 |