#ifndef __CELIB_H
#define __CELIB_H  

#ifndef __FORM_H
#include <form.h>
#endif

#ifndef __AUTOMASK_H
#include <automask.h>
#endif

#include <recset.h>

class TDitta_cespiti
{
  long _ditta;    
  int _esercizio, _anno_tuir;
  TString4 _gruppo, _specie;
  TDate _data_primi_ricavi;
  TRectype _cce, _ccb;
  bool _amm_prop;  

protected:  
  void load_default();
  void update_when_needed();
  void load_records();
  
public:  
  void set_attivita(int esercizio, int gruppo, const char* specie);
  const TRectype& get_attivita(int& esercizio, TString& gruppo, TString& specie) const;
  const TRectype& get_attivita() const;
  int esercizio_corrente() const { return _esercizio; }
  int esercizio_corrente(TDate& inies, TDate& fines) const;
  const TRectype& categoria(int gr, const char* sp, int ca, const bool ccc = false) const;
  
  const TDate& data_primi_ricavi() const { return _data_primi_ricavi; }
  bool rinvio_ammortamento_ai_primi_ricavi() const;
  bool esente_art14() const;
  bool ammortamento_parti_vendute() const;
  bool ragguaglio_ammortamenti_parti_vendute() const;
  bool professionista() const;
  bool esercizio_costituzione() const;
  real coefficiente_durata_esercizio() const;
  int anno_tuir() const { return _anno_tuir; }
  bool legge_223_06() const;

  bool primo_ammortamento_100(const TDate& datamov, int tiposit, bool veicolo) const;
  
  bool bollato_stampato() const;
  bool ammortamento_proporzionale() const { return _amm_prop; }

  void init_mask(TMask& m);
  void arrotonda(real &n) const;

  bool on_category_event(TOperable_field& fld, TField_event e, long jolly = 0L);

  TDitta_cespiti();
};

class TForm_cespiti : public TForm
{ 
protected:
  virtual bool validate(TForm_item& fld, TToken_string& val);

public:
  TForm_cespiti(const char* name);
};

TDitta_cespiti& ditta_cespiti();

// Utility
bool null_fields(const TRectype& rec, const char* fld0, const char* fld1, const char* fld2 = NULL,
                 const char* fld3 = NULL, const char* fld4 = NULL, const char* fld5 = NULL,
                 const char* fld6 = NULL, const char* fld7 = NULL, const char* fld8 = NULL);


//Metodi da usare nei cespiti per analitica
//-------------------------------------------
real ceca_percutil(const TString& idcespite, int anno, 
                   const TString& cdc, const TString& cms, const TString& fase);

#endif