campo-sirio/pr/prlib.h

117 lines
4.7 KiB
C
Raw Normal View History

#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