diff --git a/mg/mglib02.cpp b/mg/mglib02.cpp index bcc102772..0ba7ef953 100755 --- a/mg/mglib02.cpp +++ b/mg/mglib02.cpp @@ -1,11 +1,12 @@ // oggetto TArticolo, multirecord dell'articolo di anagrafica magazzino // oggetto TArticolo_giacenza, multirecord dell'articolo di magazzino -// oggetto TMov_Mag , multirecord del moviemnto di magazzino +// oggetto TMov_Mag , multirecord del movimento di magazzino // funzione di ricostruzione saldi #include "mglib.h" #include "anamag.h" #include "mag.h" #include "movmag.h" +#include "rmovmag.h" // libreria per i movimenti @@ -855,6 +856,23 @@ TCausale_magazzino::TCausale_magazzino(const char * codice): } // movimenti +// dati della linea di movimento di magazzino +class TLine_movmag : public TObject +{ +public: + TString16 codcaus; + TString16 um; + real quant; + real prezzo; + int operator==(TLine_movmag &); + + virtual TObject* dup() const {return new TLine_movmag(*this);}; + + TLine_movmag() {}; + TLine_movmag(const TLine_movmag &); + virtual ~TLine_movmag() {}; +}; + TLine_movmag ::TLine_movmag(const TLine_movmag &l) { um=l.um; @@ -864,10 +882,15 @@ TLine_movmag ::TLine_movmag(const TLine_movmag &l) int TLine_movmag::operator==(TLine_movmag &l) { - return (um==l.um)&&(quant==l.quant)&&(prezzo==l.prezzo); + return (codcaus==l.codcaus)&&(um==l.um)&&(quant==l.quant)&&(prezzo==l.prezzo); } +// ******************************** +// TMov_mag + +TRecord_cache TMov_mag::cache_causali("%CAU"); + TMov_mag::TMov_mag() : TMultiple_rectype(LF_MOVMAG), @@ -898,7 +921,6 @@ int TMov_mag::read(TBaseisamfile& f, word op , word lockop) int res=TMultiple_rectype::read(f,op,lockop); // reset delle strutture per il controlli delle variazioni dei saldi - _codcaus=get("CODCAUS"); _annoes=get("ANNOES"); lines_to_add.destroy(); lines_to_subtract.destroy(); @@ -929,7 +951,7 @@ void TMov_mag::add_automatiche() TString16 codcaus(row.get(RMOVMAG_CODCAUS)); if (codcaus.empty()) codcaus=get(MOVMAG_CODCAUS); - TCausale_magazzino cau(codcaus); + TCausale_magazzino & cau=(TCausale_magazzino & )cache_causali.get(codcaus); codcaus=cau.caus_collegata(); if (codcaus.not_empty()) { @@ -1000,11 +1022,8 @@ const char *TMov_mag::get_next_key() int TMov_mag::force_update_bal() { int res; - TToken_string l_key; - TLine_movmag l_data; // reset delle strutture per il controlli delle variazioni dei saldi - _codcaus=get(MOVMAG_CODCAUS); _annoes=get(MOVMAG_ANNOES); lines_to_add.destroy(); lines_to_subtract.destroy(); @@ -1018,14 +1037,18 @@ int TMov_mag::force_update_bal() return res; } -TLine_movmag & TMov_mag::line2data(int numriga) const +// restituisce +TLine_movmag & TMov_mag::line2data(int nrig) const { static TLine_movmag _rest; TRecord_array & b = body(); - _rest.um = b.row(numriga).get("UM"); - _rest.quant = b.row(numriga).get_real("QUANT"); - _rest.prezzo= b.row(numriga).get_real("PREZZO"); + _rest.codcaus= b.row(nrig).get(RMOVMAG_CODCAUS) != " " ? + b.row(nrig).get(RMOVMAG_CODCAUS) + : get(MOVMAG_CODCAUS); + _rest.um = b.row(nrig).get(RMOVMAG_UM); + _rest.quant = b.row(nrig).get_real(RMOVMAG_QUANT); + _rest.prezzo= b.row(nrig).get_real(RMOVMAG_PREZZO); return _rest; } @@ -1059,7 +1082,7 @@ TString TMov_mag::key2field(TToken_string &key,const char *fieldname) int TMov_mag::line_inserted(TToken_string &k,TLine_movmag &r) { - if (_codcaus != get("CODCAUS") || _annoes != get("ANNOES")) { + if (_annoes != get("ANNOES")) { lines_to_add.add(k,r); } else { if (lines_to_subtract.is_key(k)&& (TLine_movmag &)lines_to_subtract[k]==r) @@ -1074,7 +1097,7 @@ int TMov_mag::line_inserted(TToken_string &k,TLine_movmag &r) int TMov_mag::line_deleted(TToken_string &k,TLine_movmag &r) { - if (_codcaus != get("CODCAUS") || _annoes != get("ANNOES")) { + if (_annoes != get("ANNOES")) { lines_to_subtract.add(k,r); } else { if (lines_to_add.is_key(k)&& r==(TLine_movmag &)lines_to_add[k] ) @@ -1152,12 +1175,12 @@ int TMov_mag::update_balances() mag.write(); } // modifica questo record (e lo sblocca) - update_balances(mag.curr(),line_mov,get("CODCAUS"),+1); + update_balances(mag.curr(),line_mov, +1); /*// ottimizzazione :(cerca di sfruttare la lettura fatta per un eventuale saldo vecchio) // ciò causa la modifica dell'oggetto TMov_mag (il metodo non è più const) if (_annoes == get("ANNOES") && lines_to_subtract.is_key(*curr_key)) { - update_balances(mag.curr(),(TLine_movmag &)lines_to_subtract[*curr_key],_codcaus,-1); + update_balances(mag.curr(),(TLine_movmag &)lines_to_subtract[*curr_key],-1); ((TMov_mag *)this)->lines_to_add.remove(*curr_key); ((TMov_mag *)this)->lines_to_subtract.remove(*curr_key); }*/ @@ -1168,7 +1191,7 @@ int TMov_mag::update_balances() if (key2field(*rem_key,"CODART")==key2field(*curr_key,"CODART")) { giac_putkey(mag,_annoes,*rem_key); if (mag.read()==NOERR) { - update_balances(mag.curr(),(TLine_movmag &)lines_to_subtract[*rem_key],_codcaus,-1); + update_balances(mag.curr(),(TLine_movmag &)lines_to_subtract[*rem_key],-1); mag.rewrite(); } keys_to_remove.remove_item(); @@ -1190,7 +1213,7 @@ int TMov_mag::update_balances() giac_putkey(mag,_annoes,*curr_key); // modifica questo record (e lo sblocca) if (mag.read()==NOERR) { - update_balances(mag.curr(),(TLine_movmag &)lines_to_subtract[*curr_key],_codcaus,-1); + update_balances(mag.curr(),(TLine_movmag &)lines_to_subtract[*curr_key],-1); mag.rewrite(); } curr_art.unlock(); @@ -1208,9 +1231,9 @@ int TMov_mag::update_balances() // aggiorna i saldi del record corrente // in base alla causale e alla modifica fatta (con segno + o -) -int TMov_mag::update_balances(TRectype & magrec, const TLine_movmag &l,TString16 codcaus,int rett_sign) +int TMov_mag::update_balances(TRectype & magrec, const TLine_movmag &l,int rett_sign) { - TCausale_magazzino caus(codcaus); + TCausale_magazzino & caus=(TCausale_magazzino &)cache_causali.get(l.codcaus); TLocalisamfile umart(LF_UMART); real diff,diff_val; umart.setkey(2); @@ -1324,10 +1347,3 @@ bool rebuild_balances(TString16 annoes, bool reset_giac) return ok; } - - - - - - -