
#include <relapp.h>
#include <config.h>

#include "ve2100.h"

#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); }



class TTabelle_sconti: public TRelation_application {
  TMask *_msk; // maschera principale
  TRelation *_rel; // relazione principale

	char _sconti; // carattere che indica il tipo di tabella
	bool _catven; // abilitazione della gestione della categoria di vendita
	TString _gessco; // indicatore di abilitazione 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; }

public:
  TTabelle_sconti() {}
  virtual ~TTabelle_sconti() {}
};



bool TTabelle_sconti::user_create() {
	bool gotcha= FALSE; // booleano di avvenuta inizializzazione
	short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
	int i; // indice di ciclo
	  
	_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
	}
	TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta
	switch (_sconti) {
		case 'D': // sconti documento
			_msk= new TMask("VE2100D"); // apre la maschera relativa
 			set_search_field(F_D_CODCAT); // setta il campo di ricerca
 			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
			_catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita
			if (!_catven) KILL(F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo
			gotcha= TRUE;
			break;
		case 'I': // sconti incondizionati
			_gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti
      if (_gessco=="A") {
				_msk= new TMask("VE2100I"); // apre la maschera relativa
				set_search_field(F_I_RICERCA); // setta il campo di ricerca
				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 (i=0; i<4; i++) {
	        if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato...
	        	REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera...
	        	gotcha= TRUE; // ...e viene settato il flag di ok
	        } else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera
				}
				_catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita
				if (!_catven) KILL(sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo
				if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
			} else error_box("Gli sconti incondizionati non sono abilitati nella configurazione");
			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;
}



int ve2100(int argc, char* argv[]) {
  TTabelle_sconti a;
  
  a.run(argc, argv, "Tabella sconti ");
  return 0;
}
