#ifndef __PRLIB_H #define __PRLIB_H #ifndef __RELATION_H #include #endif #ifndef __RECARRAY_H #include #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