campo-sirio/pr/prlib.h
angelo 8ec9b32ff8 Cambiata gestione provvigioni per agente:
la chiave e' ora CODAGE+ANNO+CODNUM+NDOC+NRIGA.
  effettuate le modifiche del caso a prlib01 e pr0700


git-svn-id: svn://10.65.10.50/trunk@5356 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-13 15:21:11 +00:00

128 lines
5.2 KiB
C++
Executable File

#ifndef __PRLIB_H
#define __PRLIB_H
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __RECARRAY_H
#include <recarray.h>
#endif
#include "agenti.h"
class TRata : public TSortable
{
TDate _datascad;
real _imprata, _impprovv, _pagato, _provvpag, _pagmat, _provvmat;
bool _saldata;
int _nrata,_tipopagpr;
char _generata;
public:
virtual TObject* dup() const { return new TRata(*this); }
virtual int compare(const TSortable& s) const;
const int rata() const { return _nrata;}
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;}
void set_rata(int n) { _nrata = n; }
void set_datascad(TDate& d) { _datascad = d; }
void set_imprata(real& r) { _imprata = r; }
void set_impprovv(real& r) { _impprovv = r; }
void set_saldata(bool b = TRUE) { _saldata = b; }
void set_generata(char g = ' ') { _generata = g; }
void set(TRectype& rec);
void set(TToken_string& t);
TRata(TRectype& rec);
TRata() {}
~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;
char _tipopag;
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 TString16& codnum() const { return _codnum; }
const TString16& 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 char tipo() const { return _tipopag;}
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();}
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,TRUE);}
// 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(TRectype& rec);
void set(TToken_string& t);
TRate_doc(TRectype& rec);
~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); }
// 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() ;
~TProvvigioni_agente();
};
#endif