Patch level : 10.0 patch 494
Files correlati : lv3 Ricompilazione Demo : [ ] Commento : Spostato in libreria la classe per la gestione delle dotazioni git-svn-id: svn://10.65.10.50/trunk@19563 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
bbe079fcba
commit
b885b7dcfd
193
lv/lv3100.cpp
193
lv/lv3100.cpp
@ -60,199 +60,6 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////
|
|
||||||
//// CLASSE TGIAC_PER_CLI ////
|
|
||||||
////////////////////////////////////
|
|
||||||
|
|
||||||
//Definizione della classe Giacenza per Cliente
|
|
||||||
class TGiac_per_cli : public TObject
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
TAssoc_array _odierna; //TAssoc_array che conterrà le dotazioni odierne
|
|
||||||
TAssoc_array _temporanea; //TAssoc_array che conterrà le dotazioni temporanee
|
|
||||||
long _clifo; //variabile che conterrà il cliente selezionato
|
|
||||||
long _cont; //variabile che conterrà il contratto selezionato
|
|
||||||
int _year; //variabile che conterrà l'anno documento
|
|
||||||
long _indsped; //variabile che conterrà l'indirizzo di spedizione
|
|
||||||
|
|
||||||
protected:
|
|
||||||
real& giacart_od(const TString& codart); //restituisce un puntatore al valore della dot. od. salvato
|
|
||||||
real& giacart_tmp(const TString& codart); //restituisce un puntatore al valore valore della dot. temp. salvato
|
|
||||||
long giac_in_mag(const TString& codart, bool odierna) const; //restituisce il valore salvato nel magazzino
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool preset(const TDocumento& doc); //precarico le variabili globali della classe
|
|
||||||
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
|
|
||||||
real giac_att(TRiga_documento& rdoc, bool odierna); //restituisce le quantità attuali di dotazione
|
|
||||||
TGiac_per_cli(); //costruttore
|
|
||||||
};
|
|
||||||
|
|
||||||
//GIACART_OD: metodo che restituisce un puntatore al real che contiene il valore
|
|
||||||
//della dotazione odierna per un determinato articolo
|
|
||||||
real& TGiac_per_cli::giacart_od(const TString& codart)
|
|
||||||
{
|
|
||||||
real *giac = (real*)_odierna.objptr(codart);
|
|
||||||
if (giac == NULL)
|
|
||||||
{
|
|
||||||
giac = new real(giac_in_mag(codart, true));
|
|
||||||
_odierna.add(codart,giac);
|
|
||||||
}
|
|
||||||
return *giac;
|
|
||||||
};
|
|
||||||
|
|
||||||
//GIACART_TMP: metodo che restituisce un puntatore al real che contiene il valore
|
|
||||||
//della dotazione temporanea per un determinato articolo
|
|
||||||
real& TGiac_per_cli::giacart_tmp(const TString& codart)
|
|
||||||
{
|
|
||||||
real *giac = (real*)_temporanea.objptr(codart);
|
|
||||||
if (giac == NULL)
|
|
||||||
{
|
|
||||||
giac = new real(giac_in_mag(codart, false));
|
|
||||||
_temporanea.add(codart,giac);
|
|
||||||
}
|
|
||||||
return *giac;
|
|
||||||
};
|
|
||||||
|
|
||||||
//GIAC_IN_MAG: questo metodo restituisce le quantità presenti sul file 166 (clifogiac)
|
|
||||||
//restituendo il valore salvato in dotazione odierna se odierna == true,
|
|
||||||
//oppure il valore salvato in dotazione temporanea se odierna = false
|
|
||||||
long TGiac_per_cli::giac_in_mag(const TString& codart, bool odierna) const
|
|
||||||
{
|
|
||||||
//recupero i valori delle dotazioni odierne e temporanee dal magazzino del cliente
|
|
||||||
TLocalisamfile magcli(LF_CLIFOGIAC);
|
|
||||||
magcli.put(CLIFOGIAC_ANNOES, _year);
|
|
||||||
magcli.put(CLIFOGIAC_TIPOCF, 'C');
|
|
||||||
magcli.put(CLIFOGIAC_CODCF, _clifo);
|
|
||||||
magcli.put(CLIFOGIAC_INDSPED, _indsped);
|
|
||||||
magcli.put(CLIFOGIAC_CODART, codart);
|
|
||||||
magcli.put(CLIFOGIAC_NRIGA, 1);
|
|
||||||
|
|
||||||
//leggo il record corrispondente
|
|
||||||
if (magcli.read() == NOERR)
|
|
||||||
return magcli.get_long( odierna ? CLIFOGIAC_DOTOD : CLIFOGIAC_DOTTM);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//PRESET: metodo che carica la coppia cliente - contratto
|
|
||||||
bool TGiac_per_cli::preset(const TDocumento& doc)
|
|
||||||
{
|
|
||||||
//estraggo i dati di interesse dal documento
|
|
||||||
_clifo = doc.get_long(DOC_CODCF);
|
|
||||||
_cont = doc.get_long(DOC_CODCONT);
|
|
||||||
_year = doc.get_date(DOC_DATADOC).year();
|
|
||||||
_indsped = doc.get_long(DOC_CODINDSP);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//RESET: metodo che distrugge i due TAssoc_array e carica la coppia cliente - contratto
|
|
||||||
bool TGiac_per_cli::reset(const TDocumento& doc)
|
|
||||||
{
|
|
||||||
preset(doc);
|
|
||||||
|
|
||||||
//distruggo i due TAssoc_array
|
|
||||||
_odierna.destroy();
|
|
||||||
_temporanea.destroy();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//LOAD_ROW: questo metodo popola e aggiorna i TAssoc_array
|
|
||||||
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,
|
|
||||||
//e quindi le giacenze non vanno più bene; in tal caso resetto i TAssoc_array e riparto
|
|
||||||
if (doc.get_long(DOC_CODCF) != _clifo || doc.get_long(DOC_CODCONT) != _cont || doc.get_long(DOC_CODINDSP) != _indsped)
|
|
||||||
reset(doc);
|
|
||||||
|
|
||||||
real& dotazione = giacart_od(rdoc.get(RDOC_CODART));
|
|
||||||
real& dotmp = giacart_tmp(rdoc.get(RDOC_CODART));
|
|
||||||
|
|
||||||
//instanzio una cache sulla tabella delle causali
|
|
||||||
const TString4 causale = rdoc.get(RDOC_CODAGG1);
|
|
||||||
const TCausale_lavanderie cau(causale);
|
|
||||||
|
|
||||||
//movimento o meno la dotazione temporanea a seconda di cosa prevede la causale
|
|
||||||
if (cau.is_ritiro())
|
|
||||||
{
|
|
||||||
const TCausale_magazzino& rit = cau.causale_ritiro();
|
|
||||||
const real & ritirato = rdoc.get_real(RDOC_QTAGG1);
|
|
||||||
int st = rit.sgn(s_dottm);
|
|
||||||
int so = rit.sgn(s_dotod);
|
|
||||||
|
|
||||||
vartmp += real(st) * ritirato;
|
|
||||||
vardot += real(so) * ritirato;
|
|
||||||
}
|
|
||||||
if (cau.is_consegna())
|
|
||||||
{
|
|
||||||
const TCausale_magazzino& con = cau.causale_consegna();
|
|
||||||
const real & consegnato = rdoc.get_real(RDOC_QTA);
|
|
||||||
int st = con.sgn(s_dottm);
|
|
||||||
int so = con.sgn(s_dotod);
|
|
||||||
|
|
||||||
vartmp += real(st) * consegnato;
|
|
||||||
vardot += real(so) * consegnato;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rdoc.get_int(RDOC_MOVMAG) != ZERO)
|
|
||||||
{
|
|
||||||
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
|
|
||||||
real TGiac_per_cli::giac_att(TRiga_documento& rdoc, bool odierna)
|
|
||||||
{
|
|
||||||
const TString& codart = rdoc.get(RDOC_CODART);
|
|
||||||
|
|
||||||
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 TCausale_lavanderie cau(causale);
|
|
||||||
|
|
||||||
//movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale
|
|
||||||
if (cau.is_ritiro())
|
|
||||||
{
|
|
||||||
const TCausale_magazzino& rit = cau.causale_ritiro();
|
|
||||||
const int s = rit.sgn(odierna ? s_dotod : s_dottm);
|
|
||||||
|
|
||||||
saldo += real(s) * rdoc.get_real(RDOC_QTAGG1);
|
|
||||||
}
|
|
||||||
if (cau.is_consegna())
|
|
||||||
{
|
|
||||||
const TCausale_magazzino& con = cau.causale_consegna();
|
|
||||||
const int s = con.sgn(odierna ? s_dotod : s_dottm);
|
|
||||||
|
|
||||||
saldo += real(s) * rdoc.get_real(RDOC_QTA);
|
|
||||||
}
|
|
||||||
giac += saldo;
|
|
||||||
|
|
||||||
return giac;
|
|
||||||
}
|
|
||||||
|
|
||||||
//costruttore
|
|
||||||
TGiac_per_cli::TGiac_per_cli()
|
|
||||||
{
|
|
||||||
//estraggo i dati di interesse dal documento
|
|
||||||
_clifo = 0;
|
|
||||||
_cont = 0;
|
|
||||||
_year = 0;
|
|
||||||
_indsped = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
//// CLASSE TGESTIONE_BOLLE_APP ////
|
//// CLASSE TGESTIONE_BOLLE_APP ////
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
|
Loading…
x
Reference in New Issue
Block a user