101 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
 | 
						|
#include <relapp.h>
 | 
						|
#include <config.h>
 | 
						|
 | 
						|
#include "ve2100.h"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class TTabelle_sconti: public TRelation_application {
 | 
						|
  TMask *_msk; // maschera principale
 | 
						|
  TRelation *_rel; // relazione principale
 | 
						|
 | 
						|
	char _sconti; // carattere che indica il tipo di tabella
 | 
						|
	short _sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
 | 
						|
	bool _sci_k_enabled[4]; // vettore di abilitazione dei campi chiave per la maschera degli sconti incondizionati
 | 
						|
  
 | 
						|
  virtual bool user_create();
 | 
						|
  virtual bool user_destroy();                        
 | 
						|
  virtual TMask *get_mask(int) { return _msk; }
 | 
						|
  virtual bool changing_mask(int) { return FALSE; }
 | 
						|
  virtual TRelation *get_relation() const { return _rel; }
 | 
						|
 | 
						|
  virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
 | 
						|
  
 | 
						|
public:
 | 
						|
  TTabelle_sconti() {}
 | 
						|
  virtual ~TTabelle_sconti() {}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
bool TTabelle_sconti::user_create() {
 | 
						|
	bool gotcha= FALSE; // booleano di avvenuta inizializzazione
 | 
						|
	  
 | 
						|
	_sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella
 | 
						|
	if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando
 | 
						|
	else {
 | 
						|
		TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella
 | 
						|
		if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera
 | 
						|
	}
 | 
						|
	switch (_sconti) {
 | 
						|
		case 'D': { // sconti documento
 | 
						|
			_msk= new TMask("VE2100D"); // apre la maschera relativa
 | 
						|
 			gotcha= TRUE;
 | 
						|
			break;
 | 
						|
		}
 | 
						|
		case 'R': { // sconti di riga
 | 
						|
			_msk= new TMask("VE2100R"); // apre la maschera relativa
 | 
						|
			set_search_field(F_R_RICERCA); // setta il campo di ricerca
 | 
						|
			gotcha= TRUE;
 | 
						|
			break;
 | 
						|
		}
 | 
						|
		case 'I': { // sconti incondizionati
 | 
						|
			_msk= new TMask("VE2100I"); // apre la maschera relativa
 | 
						|
			set_search_field(F_I_RICERCA); // setta il campo di ricerca
 | 
						|
			TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta
 | 
						|
			_sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente
 | 
						|
			_sci_k_id[1]= F_I_SCCLIENTI;
 | 
						|
			_sci_k_id[2]= F_I_ZONE;
 | 
						|
			_sci_k_id[3]= F_I_CONDPAG;
 | 
						|
			for (int i=0; i<4; i++) {
 | 
						|
				if (prassid.get("K_SCONTI_INC", "ve", i).empty()) _sci_k_enabled[i]= FALSE; // se nel file di config. il campo non è abilitato, viene indicato nel vettore di abilitazione
 | 
						|
				else _sci_k_enabled[i]= gotcha= TRUE; // se c'è almeno un campo abilitato "gotcha" esce TRUE dal ciclo
 | 
						|
			}
 | 
						|
			if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
 | 
						|
			break;
 | 
						|
		}
 | 
						|
		default: { // messaggio di errore se si indica una tabella non valida
 | 
						|
			error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza");
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file)
 | 
						|
	return (gotcha);
 | 
						|
}
 | 
						|
 | 
						|
bool TTabelle_sconti::user_destroy() {
 | 
						|
  delete _rel;
 | 
						|
  delete _msk;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TTabelle_sconti::init_query_mode(TMask &m) {
 | 
						|
	for (int i=0; i<4; i++) {
 | 
						|
		if (_sci_k_enabled[i]) { // se il campo deve essere abilitato...
 | 
						|
			m.enable(_sci_k_id[i]); // ...lo abilita...
 | 
						|
			m.efield(_sci_k_id[i]).check_type(CHECK_REQUIRED); // ...e lo rende richiesto...
 | 
						|
		} else { // ...altrimenti...
 | 
						|
			m.disable(_sci_k_id[i]); // ...lo disabilita...
 | 
						|
			m.efield(_sci_k_id[i]).check_type(CHECK_NORMAL); // ...e lo rende non richiesto
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
int ve2100(int argc, char* argv[]) {
 | 
						|
  TTabelle_sconti a;
 | 
						|
  
 | 
						|
  a.run(argc, argv, "Tabella sconti ");
 | 
						|
  return 0;
 | 
						|
}
 |