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:
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;