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
This commit is contained in:
alex 2009-01-24 12:09:50 +00:00
parent 95054f85a5
commit be32b4ceba

View File

@ -33,7 +33,7 @@ protected:
public: public:
bool reset(const TDocumento& doc); //svuota i TAssoc_array e carica cli e cont 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 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 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 //recupero il documento e la sua maschera a partire dalla riga documento
const TDocumento& doc = rdoc.doc(); const TDocumento& doc = rdoc.doc();
real vardot;
real vartmp;
//se sul documento leggo o il cliente o il contratto o l'indirizzo di spedizione //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, //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); reset(doc);
real& dotazione = giacart_od(rdoc.get(RDOC_CODART)); 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 //instanzio una cache sulla tabella delle causali
//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
TString4 causale = rdoc.get(RDOC_CODAGG1); TString4 causale = rdoc.get(RDOC_CODAGG1);
const TRectype& cau = cache().get("&CAU", causale); const TRectype& cau = cache().get("&CAU", causale);
//movimento o meno la dotazione temporanea a seconda di cosa prevede la 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")); const TCausale_magazzino & rit = cached_causale_magazzino(cau.get("S1"));
TString4 str = caumagr.get("S2").mid(32,2);
vartmp += rit.sgn(s_dottm) * rdoc.get_int(RDOC_QTAGG1);
if (atoi(str) != ZERO) vardot += rit.sgn(s_dotod) * rdoc.get_int(RDOC_QTAGG1);
{ }
real& dotmp = giacart_tmp(rdoc.get(RDOC_CODART)); if (cau.get_bool("B1"))
int saldotmp = rdoc.get_int(RDOC_QTA) - rdoc.get_int(RDOC_QTAGG1); {
const TCausale_magazzino & con = cached_causale_magazzino(cau.get("S2"));
dotmp -= saldo;
} 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; return true;
} }
//GIAC_ATT: questo metodo restituisce il valore della dotazione da scrivere a video in base ai valori //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, //di consegnato e ritirato; ATTENZIONE: restituisce la dotazione odierna se odierna = true,
//restituisce la dotazione temporanea se odierna = false //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); const TString& codart = rdoc.get(RDOC_CODART);
long giac = odierna ? giacart_od(codart).integer() : giacart_tmp(codart).integer(); real giac = odierna ? giacart_od(codart) : giacart_tmp(codart);
real saldo;
//RDOC_QTA contiene il consegnato - RDOC_QTAGG1 contiene il ritirato
//queste quantità vanno rispettivamente sommate e sottratte alla dotazione //instanzio una cache sulla tabella delle causali
long saldo = rdoc.get_long(RDOC_QTA) - rdoc.get_long(RDOC_QTAGG1); 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; giac += saldo;
return giac; return giac;
@ -406,26 +422,11 @@ bool TGestione_bolle_msk::lv_ritirato_handler(TMask_field& f, KEY k)
rdoc.put(RDOC_QTAGG1,ritirato); rdoc.put(RDOC_QTAGG1,ritirato);
TGiac_per_cli& giac = gbapp().giacenza(); 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); msk.set(FR_JOLLY1, dotod);
msk.set(FR_JOLLY2, dotmp);
//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);
}
}
} }
return true; return true;
} }
@ -452,26 +453,11 @@ bool TGestione_bolle_msk::lv_consegnato_handler(TMask_field& f, KEY k)
rdoc.put(RDOC_QTAGG1,consegnato); rdoc.put(RDOC_QTAGG1,consegnato);
TGiac_per_cli& giac = gbapp().giacenza(); 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); msk.set(FR_JOLLY1, dotod);
msk.set(FR_JOLLY2, dotmp);
//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);
}
}
} }
return ok; return ok;