#include <confapp.h>

#include "vdconf.h"
#include "../ve/velib.h"

class TConf_vendita_ditta : public TConfig_application
{
  static bool check_fields(TMask_field& f, KEY k);
	virtual TMask* create_mask(const TFilename& f);

public:
  // @cmember Disabilita la verifica del modulo in chiave
  virtual bool check_autorization() const  { return false; }

  virtual bool preprocess_config (TMask& mask, TConfig& config);
  virtual bool postprocess_config (TMask& mask, TConfig& config);
  virtual bool user_create( );
  virtual bool user_destroy( );

  TConf_vendita_ditta() : TConfig_application( CONFIG_DITTA ){ }
  virtual ~TConf_vendita_ditta( ){ }
};

bool tipo_handler( TMask_field& f, KEY k)
{
  TMask& m = f.mask();

  if (f.to_check(k))
  {
    TCodice_numerazione cod_num(m.get(FD_CODNUM));
    const TString& tipo = f.get();
    int last = cod_num.ntipi_doc();
    for (int i = 0; i < last; i++ )
    {
      const TString16 curtipo(cod_num.tipo_doc(i));
      if (curtipo == tipo)
        return true;
    }
    return f.error_box( TR("Tipo non valido per la numerazione selezionata!"));
  }
  return true;
}

bool TConf_vendita_ditta::check_fields(TMask_field& f, KEY k)
{
  return true;
}

bool TConf_vendita_ditta::preprocess_config (TMask& mask, TConfig& config)
{
  return true;
}

bool TConf_vendita_ditta::postprocess_config (TMask& mask, TConfig& config)
{
	bool ok = true;
	TString_array codes;

	for (int i = 0 ; ok && i< 8; i++)
	{
		const TString & codpag = mask.get(FD_CODPAG01 + ROW_INC * i);
		if (codpag.not_empty())
		{
			const int row = codes.find(codpag);

			if (row == -1)
				codes.add(codpag);
			else
				ok = error_box(FR("Il codice %s � gi� stato util�izzato nella riga %d"), (const char *) codpag, row + 1);
		}
	}

  return ok;
}

TMask* TConf_vendita_ditta::create_mask(const TFilename& f) 
{ 
	TMask*  m = TConfig_application::create_mask(f);
	
	m->set_handler(FD_TIPODOC, tipo_handler);
  return m;
}

bool TConf_vendita_ditta::user_create( )
{

	TConfig conf(CONFIG_DITTA);

  conf.set( "EdMask", "vd0300a", "vd");
  return true;
}

bool TConf_vendita_ditta::user_destroy( )
{
  return true;
}

int vd0300(int argc, char* argv[])
{
  TConf_vendita_ditta appc;
  appc.run(argc, argv, TR("Parametri ditta vendita al banco"));
  return 0;
}