// 773400.cpp - gestione tabelle 770
#include <tabapp.h>  

#include "77tbca7.h"

// Lista modifiche
// 
// 21.12.95  i codici quadro con 1015 sono C-E1 (= tolto E2) (nf)
//           la perc. r.a. non e' piu' obbligatoria (nf)
//
// 14.5.96  Modifiche per dichiarazione 96 (nf)
//

class Tab770_application : public Tab_application
{
  private:
    TMask*  _msk;   
    TString _tabname;
    
  protected:  
    bool  IsCausali() const { return _tabname == "%CA7"; }
    void  SetDefaultValueCausali(TMask& m);
    void  init_mask(TMask& m);
  public:      
    bool user_create();                      
    virtual void init_modify_mode(TMask& m);    
    virtual void init_insert_mode(TMask& m);
    virtual void init_query_mode(TMask& m); 
    virtual bool firm_change_enabled() const;
    Tab770_application() {}
    virtual ~Tab770_application() {}
};

HIDDEN inline Tab770_application& app() {return (Tab770_application&) main_app();}

HIDDEN bool codqua_handler(TMask_field& f, KEY k)
{
  if (f.to_check(k))
  {
    TMask& m = f.mask();
    const int trib = m.get_int(F_CODTRIB);
    if (trib == 1015)               
    {  
      const TString& quad = m.get(F_QUADRCE2); 
      if (quad != "LA" && quad != "SF" && quad != "SG")
        return f.error_box("Con il codice tributo 1015 si possono indicare solo i quadri LA-SF-SG");
    }
  }
  return TRUE;
}

HIDDEN bool codtrib_handler(TMask_field& f, KEY k)
{
  if (k == K_TAB)
  { 
    TMask& m = f.mask();
    const int trib = atoi(f.get());
        
    if (trib == 1015) 
    {
      m.hide(F_QUADRAT);
      m.show(F_QUADRCE2);
    }
    else 
    {
      m.hide(F_QUADRCE2);
      m.show(F_QUADRAT);
    }      
  }
  return TRUE;
}

HIDDEN bool descr_handler(TMask_field& f, KEY k)
{
  if (k == K_ENTER)
  { 
    TMask& m = f.mask();
    const TString descr = f.get();
    
    if (descr == "")
    {
      f.error_box("La descrizione e' obbligatoria");
      return FALSE;
    }      
  }
  return TRUE;
}

void Tab770_application::SetDefaultValueCausali(TMask& m)
{
  TString sPercAss(m.get(F_PERASS));

  sPercAss.trim();

  if (sPercAss.empty())
    m.set(F_PERASS,      "100.00"); // % ass. imponibile
}

void Tab770_application::init_mask(TMask& m)
{
  if (IsCausali())
    SetDefaultValueCausali(m);
}

void Tab770_application::init_query_mode(TMask& m)
{
  init_mask(m);
}

void Tab770_application::init_insert_mode(TMask& m)
{
  init_mask(m);
}

void Tab770_application::init_modify_mode(TMask& m)
{}

bool Tab770_application::user_create()
{ 
  Tab_application::user_create();
  _msk     = get_mask();
  _tabname = get_tabname();

  if (IsCausali()) 
  {
    _msk->set_handler(F_CODTRIB,  codtrib_handler);
    _msk->set_handler(F_QUADRCE2, codqua_handler);
    _msk->set_handler(F_QUADRAT,  codqua_handler);
  }
  return TRUE;
}                               

bool Tab770_application::firm_change_enabled() const
{ 
  return FALSE;
}

int m73400(int argc, char* argv[])
{
  Tab770_application a;
  a.run(argc,argv, "Tabelle");
  return 0;
}