// cglib03.h
// TRigaiva_array 
// Tabella per il calcolo degli imponibili Iva

#ifndef __CGLIB03_H
#define __CGLIB03_H

#ifndef __REAL_H
#include <real.h>
#endif

#ifndef __STRINGS_H        
#include <strings.h>       
#endif

struct TDociva : public TObject
{
  TString _descrdoc;
  real _totdociva;
  int _ndoc;

  TDociva(const char* _descrdociva, const real& _importo,const int _natdoc):_descrdoc(_descrdociva),_totdociva(_importo),_ndoc(_natdoc)
  {}
};

class TDociva_array : public TArray
{
public:
  bool add_riga(const char* _descrdociva,const real& _importo,const int _natdoc);
  TDociva& riga(int i) { return (TDociva&)(*this)[i]; }
};

struct TRigaiva : public TObject
{
  real     _imponibile, _imposta;    
  real     _imponibilep, _impostap;
  TString  _codiva;
  int      _tipodet, _tipocr, _tipoatt;
  bool     _intra;
  
  TRigaiva (const real& imponibile, const real& imposta, const real& imponibilep, const real& impostap, const char* codiva, const int tipodet, const int tipocr, bool intra, const int tipoatt):
  _imponibile(imponibile),_imposta(imposta),_imponibilep(imponibilep),_impostap(impostap),_codiva(codiva),_tipodet(tipodet),_tipocr(tipocr),_intra(intra),_tipoatt(tipoatt)
  {} 
};

class TRigaiva_array : public TArray
{
public:
  bool add_riga(const real& imponibile, const real& imposta, const real& imponibilep, const real& impostap, const char* codiva, const int tipodet, const int tipocr, bool intra, const int tipoatt = 0); 
  TRigaiva& riga(int i) { return (TRigaiva&)(*this)[i]; }
};

struct TTipodoc : public TObject
{
  TString _tipodoc, _descrdoc;
  real    _totdoc;
  
  TTipodoc (const char* tipodoc, const char* descrdoc, const real& totdoc):
  _tipodoc(tipodoc),_descrdoc(descrdoc),_totdoc(totdoc) {}
};

class TTipodoc_array : public TArray
{
public:
  bool add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc);  
  TTipodoc& riga(int i) { return (TTipodoc&)(*this)[i]; }
};

struct TRiga : public TObject
{
  real     _imponibile, _imposta, _implordo;    //totali del periodo
  real     _imponibilep, _impostap, _implordop; //totali progressivi
  TString  _codiva;
  
  TRiga (const real& imponibile, const real& imposta, const real& implordo, const real& imponibilep, const real& impostap, const real& implordop, const char* codiva):
  _imponibile(imponibile),_imposta(imposta),_implordo(implordo),_codiva(codiva),_imponibilep(imponibilep),_impostap(impostap),_implordop(implordop) {} 
};

class TRiga_array : public TArray
{
public:
  bool add_riga(const real& imponibile, const real& imposta, const real& implordo, const real& imponibilep, const real& impostap, const real& implordop, const char* codiva); 
  TRiga& riga(int i) { return (TRiga&)(*this)[i]; }
};  

#endif
