117 lines
4.7 KiB
C
117 lines
4.7 KiB
C
|
#ifndef __PRLIB_H
|
||
|
#define __PRLIB_H
|
||
|
|
||
|
#ifndef __RELATION_H
|
||
|
#include <relation.h>
|
||
|
#endif
|
||
|
|
||
|
#ifndef __RECARRAY_H
|
||
|
#include <recarray.h>
|
||
|
#endif
|
||
|
|
||
|
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 _pagmat;}
|
||
|
const real pagmat() const { return _provvmat;}
|
||
|
const bool saldata() const { return _saldata;}
|
||
|
const char generata() const { return _generata;}
|
||
|
const int tipopagpr()const { return _tipopagpr;}
|
||
|
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) { return (TRata&) _rows[i]; }
|
||
|
TRata& operator[](int i) { return row(i); }
|
||
|
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 TObject
|
||
|
{
|
||
|
TString16 _agente; // Codice agente
|
||
|
TRecord_array *_rows; // Righe provvigionali (LF_PROVV) usato per leggere/scrivere
|
||
|
TAssoc_array _rate; // Array associativo per ANNO+CODNUM+NDOC
|
||
|
// contiene le informazioni del documento con le relative rate.
|
||
|
protected:
|
||
|
void rate2rows();
|
||
|
public:
|
||
|
const TString16& agente () const { return _agente;}
|
||
|
// 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 rows() const { return _rows->rows();}
|
||
|
// lettura, scrittura ecc...
|
||
|
int read(const char* agente);
|
||
|
int write(bool rows = FALSE); // Se rows == TRUE scrive le righe cosi' come sono, senza chiamare la rate2rows
|
||
|
int rewrite(bool rows = FALSE);
|
||
|
int remove(bool rows = FALSE);
|
||
|
// 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);
|
||
|
TProvvigioni_agente(const char* agente);
|
||
|
TProvvigioni_agente() ;
|
||
|
~TProvvigioni_agente();
|
||
|
};
|
||
|
|
||
|
#endif
|