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                                                   
 |