diff --git a/pr/prlib.h b/pr/prlib.h index 6809ad25b..0fdb22ebd 100755 --- a/pr/prlib.h +++ b/pr/prlib.h @@ -41,11 +41,14 @@ public: void set_impprovv(real& r) { _impprovv = r; } void set_saldata(bool b = TRUE) { _saldata = b; } void set_generata(const bool g = TRUE) { _generata = g ? 'D' : ' '; } - void set(TRectype& rec); + void set(const TRectype& rec); + void set(const TRata& r); void set(TToken_string& t); - TRata(TRectype& rec); + const TRata& operator = (const TRata & r) { set(r);return *this;} + TRata(const TRectype& rec); + TRata(const TRata & r) { set(r);} TRata() { _generata = ' ';} - ~TRata() {} + virtual ~TRata() {} }; class TRate_doc : public TObject @@ -61,8 +64,8 @@ class TRate_doc : public TObject 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 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; } @@ -80,10 +83,13 @@ public: 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(const TRectype& rec); + void set(const TRate_doc & r); void set(TToken_string& t); - TRate_doc(TRectype& rec); - ~TRate_doc() {} + 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 @@ -121,7 +127,7 @@ public: void destroy() { _rate.destroy(); } TProvvigioni_agente(const char* agente); TProvvigioni_agente() ; - ~TProvvigioni_agente(); + virtual ~TProvvigioni_agente(); }; class TAgente : public TRectype diff --git a/pr/prlib01.cpp b/pr/prlib01.cpp index 1bc4b9886..428ee0ecf 100755 --- a/pr/prlib01.cpp +++ b/pr/prlib01.cpp @@ -70,12 +70,18 @@ int TProvvigioni_agente::read(const char* agente, const int anno, const char* co key.format("%4d%4s%7ld",anno1,(const char*)codnum1,ndoc1); // Compone la chiave const bool exist = _rate.is_key(key); // Guarda se esiste gia' questo documento - TRate_doc com_rata(r); - TRate_doc& rd = exist ? (TRate_doc&) _rate[key] : com_rata; + + if (!exist) + _rate.add(key,(TRate_doc*)new TRate_doc(r), exist); + + TRate_doc& rd = (TRate_doc&)_rate[key]; + + //TRate_doc com_rata(r); + //TRate_doc& rd = exist ? (TRate_doc&) _rate[key] : com_rata; TRata* rt = new TRata(r); rd.add_rata(rt); - _rate.add(key,rd,exist); // Sostituisce/aggiunge l'elemento + //_rate.add(key,rd,exist); // Sostituisce/aggiunge l'elemento } // Dopo aver letto le righe, ordina le rate per ogni documento @@ -219,7 +225,7 @@ void TProvvigioni_agente::remove_rate(const char* key) ///////////////////////////////////////////////////////////////////////////////// // TRate_doc ///////////////////////////////////////////////////////////////////////////////// -TRate_doc::TRate_doc(TRectype& rec) +TRate_doc::TRate_doc(const TRectype& rec) { set(rec); // bleah! } @@ -242,7 +248,7 @@ bool TRate_doc::ok_provvigione() return totprov <= _impprdoc; // controlla che tale somma e' compresa nel totale provvigione del documento } -void TRate_doc::set(TRectype& rec) +void TRate_doc::set(const TRectype& rec) { CHECK(rec.num() == LF_PROVV,"Il record non ha il tracciato di LF_PROVV"); _anno = rec.get_int(PROV_ANNO); @@ -258,6 +264,21 @@ void TRate_doc::set(TRectype& rec) _cambio = rec.get_real(PROV_CAMBIO); } +void TRate_doc::set(const TRate_doc& r) +{ + _anno = r._anno; + _codnum = r._codnum; + _codval = r._codval; + _ndoc = r._ndoc; + _codcf = r._codcf; + _datadoc = r._datadoc; + _datacambio = r._datacambio; + _impdoc = r._impdoc; + _impprdoc = r._impprdoc; + _impnetdoc = r._impnetdoc; + _cambio = r._cambio; +} + void TRate_doc::set(TToken_string& t) { CHECK(t.items() >= 11, "Numero di items non valido"); @@ -306,7 +327,7 @@ void TRata::set(TToken_string& t) _tipopagpr = t.get_int(10); } -void TRata::set(TRectype& rec) +void TRata::set(const TRectype& rec) { CHECK(rec.num() == LF_PROVV,"Il record non ha il tracciato di LF_PROVV"); _datascad = rec.get_date(PROV_DATASCAD); @@ -323,11 +344,27 @@ void TRata::set(TRectype& rec) _tipopagpr = rec.get_int(PROV_TIPOPAGPR); } -TRata::TRata(TRectype& rec) +TRata::TRata(const TRectype& rec) { set(rec); } +void TRata::set(const TRata& r) +{ + _datascad = r._datascad; + _tipopag = r._tipopag; + _imprata = r._imprata; + _impprovv = r._impprovv; + _pagato = r._pagato; + _provvpag = r._provvpag; + _pagmat = r._pagmat; + _provvmat = r._provvmat; + _saldata = r._saldata; + _nrata = r._nrata; + _generata = r._generata; + _tipopagpr = r._tipopagpr; +} + int TAgente::read(const char * codice) { TLocalisamfile f(LF_AGENTI);