160 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#ifndef __PRLIB_H
 | 
						|
#define __PRLIB_H
 | 
						|
 | 
						|
#ifndef __RELATION_H
 | 
						|
#include <relation.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __RECARRAY_H
 | 
						|
//#include <recarray.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __AGE_H 
 | 
						|
#include "../pr/agenti.h"
 | 
						|
#endif
 | 
						|
 | 
						|
class TRata : public TSortable
 | 
						|
{
 | 
						|
  TDate _datascad;
 | 
						|
  real  _imprata, _impprovv, _pagato, _provvpag, _pagmat, _provvmat;
 | 
						|
  bool  _saldata;
 | 
						|
  int   _nrata,_tipopagpr,_tipopag;
 | 
						|
  char  _generata;
 | 
						|
  TString16 _codval;
 | 
						|
  
 | 
						|
public:
 | 
						|
  virtual TObject* dup() const { return new TRata(*this); }
 | 
						|
  virtual int compare(const TSortable& s) const;
 | 
						|
  const int        rata()     const { return _nrata;}
 | 
						|
  const int        tipopag()  const { return _tipopag;}
 | 
						|
  const TDate      datascad() const { return _datascad; }
 | 
						|
  const real       imprata()  const { return _imprata;}
 | 
						|
  const real       impprovv() const { return _impprovv;}
 | 
						|
  const real       pagato()   const { return _pagato;}
 | 
						|
  const real       provvpag() const { return _provvpag;}
 | 
						|
  const real       provvmat() const { return _provvmat;}
 | 
						|
  const real       pagmat()   const { return _pagmat;}
 | 
						|
  const bool       saldata()  const { return _saldata;}
 | 
						|
  const char       generata() const { return _generata;}
 | 
						|
  const int        tipopagpr()const { return _tipopagpr;}
 | 
						|
  const TString &  codval() const   { return _codval; }
 | 
						|
  void             set_rata(const int n)            { _nrata = n; }
 | 
						|
  void             set_tipopag(const int t)         { _tipopag = t; }
 | 
						|
  void             set_datascad(const TDate& d)     { _datascad = d; }
 | 
						|
  void             set_imprata(const real&   r)     { _imprata  = r; }
 | 
						|
  void             set_impprovv(const real&  r)     { _impprovv = r; }
 | 
						|
  void             set_saldata(const bool b = TRUE) { _saldata = b; }
 | 
						|
  void             set_codval(const char * codval) { _codval = codval; }
 | 
						|
  void             set_generata(const bool g = TRUE) { _generata = g ? 'D' : ' '; }
 | 
						|
  void             set(const TRectype& rec);
 | 
						|
  void             set(const TRata& r);
 | 
						|
  void             set(TToken_string& t);
 | 
						|
  const TRata& operator = (const TRata & r) { set(r);return *this;}
 | 
						|
  TRata(const TRectype& rec);     
 | 
						|
  TRata(const TRata & r) { set(r);}
 | 
						|
  TRata() { _generata = ' '; _saldata = FALSE; }
 | 
						|
  virtual ~TRata() {}
 | 
						|
};
 | 
						|
 | 
						|
class TRate_doc    : public TObject
 | 
						|
{
 | 
						|
  // Dati del documento
 | 
						|
  int       _anno;
 | 
						|
  TString16 _codnum,_codval;
 | 
						|
  long      _ndoc,_codcf;
 | 
						|
  TDate     _datadoc,_datacambio;
 | 
						|
  real      _impdoc,_impprdoc,_impnetdoc,_cambio;
 | 
						|
  TArray    _rows;    // Rate del documento. La rata 0 corrisponde alla provvigione all'atto della fatturazione
 | 
						|
                      // Array di TRata
 | 
						|
public:
 | 
						|
  virtual TObject* dup()      const { return new TRate_doc(*this); }
 | 
						|
  const int        anno()     const { return _anno; }
 | 
						|
  const TString&   codnum()   const { return _codnum; }
 | 
						|
  const TString&   codval()   const { return _codval; }
 | 
						|
  const long       ndoc()     const { return _ndoc; }
 | 
						|
  const long       codcf()    const { return _codcf; }
 | 
						|
  const TDate      datadoc()  const { return _datadoc; }
 | 
						|
  const TDate      datacam()  const { return _datacambio;}
 | 
						|
  const real       impdoc()   const { return _impdoc;}
 | 
						|
  const real       impprdoc() const { return _impprdoc;}
 | 
						|
  const real       cambio()   const { return _cambio;}
 | 
						|
  const real       impnet()   const { return _impnetdoc;}
 | 
						|
  const int        items()          { return _rows.items();}
 | 
						|
  const bool       exist(const int i);
 | 
						|
  TRata&           row(int i, bool create = FALSE);
 | 
						|
  TRata&           operator[](int i){ return row(i,FALSE); }
 | 
						|
  void add_rata(TRata* r)           {_rows.add(r);}
 | 
						|
  void remove_rata(int i = -1)      {_rows.destroy(i);} 
 | 
						|
  // Pakka le rate
 | 
						|
  void pack_rate()                  {_rows.pack();}
 | 
						|
  // Ordina le rate
 | 
						|
  void sort_rate()                  {_rows.sort();}
 | 
						|
  // Controlla che la somma delle provvigioni delle singole rate sia <= della provvigione del documento
 | 
						|
  bool ok_provvigione();
 | 
						|
  void        set(const TRectype& rec);
 | 
						|
  void        set(const TRate_doc & r);
 | 
						|
  void        set(TToken_string& t);
 | 
						|
  const TRate_doc & operator =(const TRate_doc& r) { set(r); return *this;}
 | 
						|
  TRate_doc(const TRectype& rec);
 | 
						|
  TRate_doc(const TRate_doc& r) { set(r);}
 | 
						|
  virtual ~TRate_doc() {}
 | 
						|
};
 | 
						|
 | 
						|
class TProvvigioni_agente : public TRectype
 | 
						|
{
 | 
						|
  TString16       _agente;       // Codice agente 
 | 
						|
  //TRecord_array   *_rows;        // Righe provvigionali (LF_PROVV) usato per leggere/scrivere
 | 
						|
  TRelation*      _provv_rel;
 | 
						|
  TCursor*        _provv_cur;
 | 
						|
  TAssoc_array    _rate;         // Array associativo per ANNO+CODNUM+NDOC
 | 
						|
                                 // contiene le informazioni del documento con le relative rate.
 | 
						|
protected:
 | 
						|
  int rate2rows(int action);
 | 
						|
public:
 | 
						|
  const TString16& agente () const          { return _agente;}
 | 
						|
  real  perc_fatt()  const                  { return get_real(AGE_PERCFATT);}
 | 
						|
  real  perc_fissa() const                  { return get_real(AGE_PERCPROVV);}
 | 
						|
  // Per operare direttamente sulle righe
 | 
						|
  //const TRectype& operator [](int index) const 
 | 
						|
  //                                         { return _rows->operator[](index);}
 | 
						|
  //TRectype& operator[] (int index)         { return _rows->operator[](index);}
 | 
						|
  const int items() const                   { return _rate.items();}
 | 
						|
  // lettura, scrittura ecc...
 | 
						|
  int  read(const char* agente, const int anno = 0, const char* codnum = NULL, const long = 0L);
 | 
						|
  int  write()      { return rate2rows(0); }
 | 
						|
  int  rewrite()    { return rate2rows(1); }
 | 
						|
  int  remove()     { return rate2rows(2); }
 | 
						|
  void unlock();
 | 
						|
  // Restituisce un elenco di documenti che hanno rate per le provvigioni di questo agente
 | 
						|
  int  documenti(TString_array& kl)        { return _rate.get_keys(kl); }
 | 
						|
  // Per accedere tramite singole rate...
 | 
						|
  TRate_doc&  rate(int anno, const char* codnum, long ndoc, bool create = FALSE) ;
 | 
						|
  TRate_doc&  rate(const char* key, bool create = FALSE) ;
 | 
						|
  // Rimuove le rate del documento indicato
 | 
						|
  void remove_rate(int anno, const char* codnum, long ndoc);
 | 
						|
  void remove_rate(const char* key);
 | 
						|
  void destroy() { _rate.destroy(); }
 | 
						|
  TProvvigioni_agente(const char* agente);
 | 
						|
  TProvvigioni_agente() ;
 | 
						|
  virtual ~TProvvigioni_agente();  
 | 
						|
};
 | 
						|
 | 
						|
class TAgente : public TRectype
 | 
						|
{                              
 | 
						|
protected:
 | 
						|
  int read(const char* codice);
 | 
						|
  virtual TAgente & copy(const TAgente & a) { return (TAgente &) TRectype::operator=((TRectype &)a);}
 | 
						|
 | 
						|
public:       
 | 
						|
  TObject* dup() const { return new TAgente(*this); }
 | 
						|
  const TString& codice() const { return get("CODAGE");}  
 | 
						|
  const TString& ragsoc() const { return get("RAGSOC"); } 
 | 
						|
  const TString& campoprovv() const { return get("CAMPOPROVV"); } 
 | 
						|
 | 
						|
  TAgente(const char* codice = NULL);
 | 
						|
  TAgente(const TAgente & a);
 | 
						|
  TAgente(const TRectype& rec);
 | 
						|
  virtual ~TAgente() {}
 | 
						|
};
 | 
						|
#endif                                                   
 |