From be32b4cebaa36b8737a9eb0573d39f9b41d683b0 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 24 Jan 2009 12:09:50 +0000 Subject: [PATCH] Patch level : 10.0 214 Files correlati : lv3.exe Ricompilazione Demo : [ ] Commento : Rivisto il meccanismo di calcolo delle dotazioni git-svn-id: svn://10.65.10.50/trunk@18102 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv3100.cpp | 110 ++++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 62 deletions(-) diff --git a/lv/lv3100.cpp b/lv/lv3100.cpp index 95c03f49a..b3ec8beaa 100755 --- a/lv/lv3100.cpp +++ b/lv/lv3100.cpp @@ -33,7 +33,7 @@ protected: public: bool reset(const TDocumento& doc); //svuota i TAssoc_array e carica cli e cont bool load_row(const TRiga_documento& rdoc); //popola i TAssoc_array - long giac_att(TRiga_documento& rdoc, bool odierna); //restituisce le quantità attuali di dotazione + real giac_att(TRiga_documento& rdoc, bool odierna); //restituisce le quantità attuali di dotazione TGiac_per_cli(); //costruttore }; @@ -103,6 +103,8 @@ bool TGiac_per_cli::load_row(const TRiga_documento& rdoc) { //recupero il documento e la sua maschera a partire dalla riga documento const TDocumento& doc = rdoc.doc(); + real vardot; + real vartmp; //se sul documento leggo o il cliente o il contratto o l'indirizzo di spedizione //diversi da quelli che avevo salvato vuol dire che ho cambiato uno dei due, @@ -111,46 +113,60 @@ bool TGiac_per_cli::load_row(const TRiga_documento& rdoc) reset(doc); real& dotazione = giacart_od(rdoc.get(RDOC_CODART)); + real& dotmp = giacart_tmp(rdoc.get(RDOC_CODART)); - //RDOC_QTA contiene il consegnato - RDOC_QTAGG1 contiene il ritirato - //queste quantità vanno rispettivamente sommate e sottratte alla dotazione iniziale - int saldo = rdoc.get_int(RDOC_QTA) - rdoc.get_int(RDOC_QTAGG1); - - dotazione -= saldo; - - //instanzio una cache sulla tabella delle causali + //instanzio una cache sulla tabella delle causali TString4 causale = rdoc.get(RDOC_CODAGG1); const TRectype& cau = cache().get("&CAU", causale); + //movimento o meno la dotazione temporanea a seconda di cosa prevede la causale - if (cau.get_bool("B0") || cau.get_bool("B1")) + if (cau.get_bool("B0")) { - const TRectype& caumagr = cache().get("%CAU", cau.get(cau.get_bool("B0") ? "S1": "S2")); - TString4 str = caumagr.get("S2").mid(32,2); - - if (atoi(str) != ZERO) - { - real& dotmp = giacart_tmp(rdoc.get(RDOC_CODART)); - int saldotmp = rdoc.get_int(RDOC_QTA) - rdoc.get_int(RDOC_QTAGG1); - - dotmp -= saldo; - } - } + const TCausale_magazzino & rit = cached_causale_magazzino(cau.get("S1")); + + vartmp += rit.sgn(s_dottm) * rdoc.get_int(RDOC_QTAGG1); + vardot += rit.sgn(s_dotod) * rdoc.get_int(RDOC_QTAGG1); + } + if (cau.get_bool("B1")) + { + const TCausale_magazzino & con = cached_causale_magazzino(cau.get("S2")); + + vartmp += con.sgn(s_dottm) * rdoc.get_int(RDOC_QTA); + vardot += con.sgn(s_dotod) * rdoc.get_int(RDOC_QTA); + } + dotmp += vartmp; + dotazione += vardot; return true; } //GIAC_ATT: questo metodo restituisce il valore della dotazione da scrivere a video in base ai valori //di consegnato e ritirato; ATTENZIONE: restituisce la dotazione odierna se odierna = true, //restituisce la dotazione temporanea se odierna = false -long TGiac_per_cli::giac_att(TRiga_documento& rdoc, bool odierna) +real TGiac_per_cli::giac_att(TRiga_documento& rdoc, bool odierna) { const TString& codart = rdoc.get(RDOC_CODART); - long giac = odierna ? giacart_od(codart).integer() : giacart_tmp(codart).integer(); - - //RDOC_QTA contiene il consegnato - RDOC_QTAGG1 contiene il ritirato - //queste quantità vanno rispettivamente sommate e sottratte alla dotazione - long saldo = rdoc.get_long(RDOC_QTA) - rdoc.get_long(RDOC_QTAGG1); + real giac = odierna ? giacart_od(codart) : giacart_tmp(codart); + real saldo; + + //instanzio una cache sulla tabella delle causali + TString4 causale = rdoc.get(RDOC_CODAGG1); + const TRectype& cau = cache().get("&CAU", causale); + + //movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale + if (cau.get_bool("B0")) + { + const TCausale_magazzino & rit = cached_causale_magazzino(cau.get("S1")); + + saldo += rit.sgn(odierna ? s_dotod : s_dottm) * rdoc.get_int(RDOC_QTAGG1); + } + if (cau.get_bool("B1")) + { + const TCausale_magazzino & con = cached_causale_magazzino(cau.get("S2")); + + saldo += con.sgn(odierna ? s_dotod : s_dottm) * rdoc.get_int(RDOC_QTA); + } giac += saldo; return giac; @@ -406,26 +422,11 @@ bool TGestione_bolle_msk::lv_ritirato_handler(TMask_field& f, KEY k) rdoc.put(RDOC_QTAGG1,ritirato); TGiac_per_cli& giac = gbapp().giacenza(); - long dotod = giac.giac_att(rdoc, true); + real dotod = giac.giac_att(rdoc, true); + real dotmp = giac.giac_att(rdoc, false); msk.set(FR_JOLLY1, dotod); - - //instanzio una cache sulla tabella delle causali - TString4 causale = rdoc.get(RDOC_CODAGG1); - const TRectype& cau = cache().get("&CAU", causale); - - //movimento o meno la dotazione temporanea a seconda di cosa prevede la causale - if (cau.get_bool("B0") || cau.get_bool("B1")) - { - const TRectype& caumagr = cache().get("%CAU", cau.get(cau.get_bool("B0") ? "S1": "S2")); - TString4 str = caumagr.get("S2").mid(32,2); - - if (atoi(str) != ZERO) - { - long dotmp = giac.giac_att(rdoc, false); - msk.set(FR_JOLLY2, dotmp); - } - } + msk.set(FR_JOLLY2, dotmp); } return true; } @@ -452,26 +453,11 @@ bool TGestione_bolle_msk::lv_consegnato_handler(TMask_field& f, KEY k) rdoc.put(RDOC_QTAGG1,consegnato); TGiac_per_cli& giac = gbapp().giacenza(); - long dotod = giac.giac_att(rdoc, true); + real dotod = giac.giac_att(rdoc, true); + real dotmp = giac.giac_att(rdoc, false); msk.set(FR_JOLLY1, dotod); - - //instanzio una cache sulla tabella delle causali - TString4 causale = rdoc.get(RDOC_CODAGG1); - const TRectype& cau = cache().get("&CAU", causale); - - //movimento o meno la dotazione temporanea a seconda di cosa prevede la causale - if (cau.get_bool("B0") || cau.get_bool("B1")) - { - const TRectype& caumagr = cache().get("%CAU", cau.get(cau.get_bool("B0") ? "S1": "S2")); - TString4 str = caumagr.get("S2").mid(32,2); - - if (atoi(str) != ZERO) - { - long dotmp = giac.giac_att(rdoc, false); - msk.set(FR_JOLLY2, dotmp); - } - } + msk.set(FR_JOLLY2, dotmp); } return ok;