#ifndef __77STQAB_H
#define __77STQAB_H

#include "77stq.h"

//////////////////////////////////////
//      QUADRO A
//////////////////////////////////////      

HIDDEN const int HEADER_PRIMA_NOPOS_QA = 2;  
HIDDEN const int _NUM_FOGLIO_QA = 4; 

class TDipendente : public TSortable
{ 
  TRecnotype _pos;
  
  long _codice_ditta;
  TString _ragsoc;
  long _codice_dipendente;
  long _codice_deceduto;
  TDate _fine_rapporto;
  bool _lavoro_precedente;
  char _causa;
  char _rettifica_conguaglio;
  int _numero_progressivo;
  
public:  
  virtual int compare(const TSortable& s) const;
  
  TRecnotype pos() const { return _pos; }
  long codice_deceduto() const { return _codice_deceduto; }
  void reset_deceduto() { _codice_deceduto = -_codice_deceduto; }
  long codice() const { return _codice_dipendente; }
  
  int anno_fine_rapporto() const { return _fine_rapporto.year(); }
  bool lavoro_precedente() const { return _lavoro_precedente; }
  char rettifica_conguaglio() const { return _rettifica_conguaglio; }
  
  TDipendente(const TCursor& cur);
  virtual ~TDipendente() { }
};

class TDipendenti : public TObject
{ 
  TArray _data;
  
protected:  
  const TDipendente& dip(int i) const { return (const TDipendente&)_data[i]; }
  
public:    
  const TDipendente& operator[](int i) const { return dip(i); }
  
  int fill(TCursor& cur); 
  int items() const { return _data.items(); }
  
  int find(long d) const;
  void destroy() { _data.destroy(); }

  TDipendenti() { }
  virtual ~TDipendenti() { }
};

class TQuadroA : public TDicForm
{
  enum { QA_FORMLEN = 72 };
  
protected:  
  virtual void next_page(TPrinter& pr);
  virtual bool print(const long codditta, const long NumFis, const long NumNoFis);
  virtual void aggiorna_totali(const char) { }  
  virtual int elementi_pagina(PaginaQuadro p) const;
  virtual int prima_riga(PaginaQuadro p) const;   
  virtual int dic_form_len() const;
  
  bool init(long codditta);
  
  virtual void preprocess_corpo(const TRectype& rec);

  int calcola_firma();   
  void stampa_testata(TPrinter& pr);                        
  void stampa_corpo(TPrinter& pr);
  void stampa_totali(TPrinter& pr);

public:
  TQuadroA(const char* form, const char* quadro)  : TDicForm(form, quadro) {}
  virtual ~TQuadroA() {} 
};      

class TStampaQuadroA : public TStampaQuadro
{
protected:
  TDicForm* _form;
  TCursor* _cur;
    
protected:    
  virtual bool menu(MENU_TAG m) { return TStampaQuadro::menu(m);}
  virtual bool user_create();
  virtual bool user_destroy();

  virtual bool conta_tipi_per() const { return FALSE; }
  virtual TDicForm* get_form()  const { return _form; }
  virtual TCursor* get_cursor() const { return _cur; }    

public:
  TStampaQuadroA(const char* quadro, char livel) : TStampaQuadro(quadro, livel) { }
  virtual ~TStampaQuadroA() { } 
};

/////////////////////////////////////////////////
//            QUADRO A1
/////////////////////////////////////////////////

class TStampaQuadroA1 : public TStampaQuadroD
{
protected:    
  virtual bool user_create();

public:
  TStampaQuadroA1(const char* quadro, char livel) : TStampaQuadroD(quadro, livel) { }
  virtual ~TStampaQuadroA1() { }
};

///////////////////////////////////////////////
//           QUADRO A2
///////////////////////////////////////////////

class TStampaQuadroA2 : public TStampaQuadroD
{
protected:    
  virtual bool user_create();

public:
  TStampaQuadroA2(const char* quadro, char livel) : TStampaQuadroD(quadro, livel) { }
  virtual ~TStampaQuadroA2() { }
};

/////////////////////////////////////////////////
//            QUADRO A3
/////////////////////////////////////////////////

class TStampaQuadroA3 : public TStampaQuadroD
{
protected:    
  virtual bool user_create();

public:
  TStampaQuadroA3(const char* quadro, char livel) : TStampaQuadroD(quadro, livel) { }
  virtual ~TStampaQuadroA3() { }
};

/////////////////////////////////////////////////
//            QUADRO Abis
/////////////////////////////////////////////////

class TStampaQuadroAbis : public TStampaQuadroD
{
protected:    
  virtual bool user_create();

public:
  TStampaQuadroAbis(const char* quadro, char livel) : TStampaQuadroD(quadro, livel) { }
  virtual ~TStampaQuadroAbis() { }
};

#endif