#include <automask.h>
#include <execp.h>
#include <relapp.h>
#include <pconti.h>
#include <recarray.h>

#include "tc1800a.h"

////////////////////////////////////////////////////////////////////////
//MASCHERA
////////////////////////////////////////////////////////////////////////
class TZC_ricl_msk : public TAutomask
{
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
	
public:
  TZC_ricl_msk() : TAutomask("tc1800a") {}
};

bool TZC_ricl_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) 
{
	switch (o.dlg())
	{
	case F_CONTO:
		break;			
	default:
		break;
	}
	return true;
}

class TZCRiclass_application : public TRelation_application

// @author:(INTERNAL) Vari
// @access:(INTERNAL) Private Member
{
  // @cmember:(INTERNAL) Maschera corrente dell'applicazione
  TMask* _msk;
  // @cmember:(INTERNAL) Relazione corrente dell'applicazione
  TRelation* _rel;
  // @cmember:(INTERNAL) valori iniziale dei gruppo conto sottoconto
	int _gruppo;
	int _conto;
	long _sottoconto;

// @access Protected Member
protected:
  virtual TMask* get_mask(int mode = MODE_QUERY) { CHECK(_msk, "Null mask"); return _msk; }
  // @cmember Indica se la futura <mf Tab_application::get_mask> ritornera' una maschera diversa
  //        dalla corrente.
  virtual bool changing_mask(int mode) { return false; }
  // @cmember Ritorna la relazione da modificare
  virtual TRelation* get_relation() const {  CHECK(_rel, "Null relation"); return _rel; }
  // @cmember Inizializza la maschera per il modo inserimento
  // @cmember Inizializzazione dei dati dell'utente
	virtual void init_query_mode(TMask& m) ;   
  // @cmember Inizializza la maschera per il modo ricerca ed inserimento (chiama <mf TRelation_application::init_query_mode>)
  virtual void init_query_insert_mode(TMask& m) ;
  virtual void  init_insert_mode(TMask& m);
  // @cmember Inizializza la maschera per il modo modifica
  virtual void  init_modify_mode(TMask& m);
   virtual bool user_create() ;
  // @cmember Distruzione dei dati dell'utente
  virtual bool user_destroy() ;
  // @cmember Chiama il programma di stampa
  virtual void print();

// @access Public Member
public:
  // @cmember Costruttore
  TZCRiclass_application() : _msk(NULL), _rel(NULL) { }


  // @cmember Distruttore
  virtual ~TZCRiclass_application() {}
};


void TZCRiclass_application::print()
{
  TFilename rep("tcscricl.rep");
	TString cmd;
  rep.custom_path();
  cmd << "ba8 -4 "<< rep;
  TExternal_app stampa(cmd);
  stampa.run();
}

void TZCRiclass_application::init_insert_mode(TMask& m) 
{
	m.show(-1);
	m.disable(-1);
	m.hide(-2);
}
void TZCRiclass_application::init_query_mode(TMask& m) 
{
	m.show(-1);
	m.hide(-2);
}   

void TZCRiclass_application::init_query_insert_mode(TMask& m) 
{
	m.hide(-1);
	m.show(-2);
}

void TZCRiclass_application::init_modify_mode(TMask& m) 
{
  for (int i = m.fields() - 1; i >= 0; i--)
  {
    TMask_field& c = m.fld(i);
    if (c.in_group(1) && c.is_edit())
    {
      TEdit_field& e = (TEdit_field&)c;

      e.enable();
			if (e.browse() != NULL)
        e.enable_check();
    }
  }
	_gruppo = m.get_int(F_GRUPPO);
	_conto = m.get_int(F_CONTO);
	_sottoconto = m.get_long(F_SOTTOCONTO);
	m.show(-1);
	m.disable(-1);
	m.hide(-2);
}

bool TZCRiclass_application::user_create()
{
  _rel = new TRelation(LF_RICLPDC);
  _msk = new TZC_ricl_msk;
  
  set_search_field(F_SOTTOCONTO);
  
  TFilename rep("tczcricl.rep");

  if (rep.custom_path()) 
    enable_menu_item(M_FILE_PRINT);
  
  TString title;
  _msk->get_caption(title);
  set_title(title);

  return true;
}

bool TZCRiclass_application::user_destroy() 
{
  if (_msk)
		delete _msk;
  if (_rel)
		delete _rel;

  return true;
}



int tc1800(int argc, char **argv) 
{
  TZCRiclass_application a;

  a.run(argc, argv, TR("Riclassificazione piano dei conti Zucchetti"));
  return 0;
}