Patch level :10.0 patch 494

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Aggiunti classi e metodi per poter utilizzare correttamente lv3300


git-svn-id: svn://10.65.10.50/trunk@19562 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-11-04 10:02:53 +00:00
parent 03eac68173
commit bbe079fcba
2 changed files with 244 additions and 1 deletions

@ -896,6 +896,12 @@ const int TBuono_prelievo_row::num_pacchi() const
return _rdoc.get_int(RDOC_NCOLLI);
}
//PREZZO:metodo che restituisce il prezzo dell'articolo selezionato
const real& TBuono_prelievo_row::prezzo() const
{
return _rdoc.get_real(RDOC_PREZZO);
}
//CONG_PRE: metodo che restituisce il valore del conguaglio al momento dell'inizio delle operazioni
const long TBuono_prelievo_row::cong_pre() const
{
@ -979,6 +985,37 @@ void TBuono_prelievo_row::set_num_pacchi(const int numpacchi)
_rdoc.put(RDOC_NCOLLI, numpacchi);
}
//SET_CODIVA: metodo che setta il codice IVA
void TBuono_prelievo_row::set_codiva(const char* codiva)
{
_rdoc.put(RDOC_CODIVA, codiva);
}
//SET_UM: metodo che setta l'unità di misura
void TBuono_prelievo_row::set_um(const char* um)
{
_rdoc.put(RDOC_UMQTA, um);
}
//SET_UM: metodo che setta l'unità di misura
void TBuono_prelievo_row::set_prezzo(const real prezzo)
{
_rdoc.put(RDOC_PREZZO, prezzo);
}
//SET_MAG: metodo che setta il magazzino
void TBuono_prelievo_row::set_mag(const char* mag)
{
_rdoc.put(RDOC_CODMAG, mag);
}
//SET_MAGC: metodo che setta il magazzino collegato
void TBuono_prelievo_row::set_magc(const char* magc)
{
_rdoc.put(RDOC_CODMAG, magc);
}
//SET_CONG_PRE: metodo che setta il valore del conguaglio precedente
void TBuono_prelievo_row::set_cong_pre(const long qtacong)
{
@ -1210,4 +1247,174 @@ TRiga_pacco::TRiga_pacco()
: TRectype(LF_PACCHI)
{
zero();
}
}
////////////////////////////////////
//// CLASSE TGIAC_PER_CLI ////
////////////////////////////////////
//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;
}

@ -226,6 +226,7 @@ public:
const long qta_dacons() const;
const long qta_consegnata() const;
const int num_pacchi() const;
const real& prezzo() const;
const long cong_pre() const;
const long cong_att() const;
const TToken_string& rifbcon() const;
@ -239,6 +240,11 @@ public:
void set_qta_dacons(const long qta);
void set_qta_consegnata(const long qta);
void set_num_pacchi(const int numpacchi);
void set_codiva(const char* codiva);
void set_um(const char* um);
void set_prezzo(const real prezzo);
void set_mag(const char* mag);
void set_magc(const char* magc);
void set_cong_pre(const long qtacong);
void set_cong_att(const long qtacong);
void set_rifbcon(const TToken_string& keybcon);
@ -295,4 +301,34 @@ public:
TRiga_pacco();
};
////////////////////////////////////
//// 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
};
#endif