Patch level : 10.0 patch 604

Files correlati     : lv2
Ricompilazione Demo : [ ]
Commento            :
Corretto l'utilizzo delle causali di partenza presenti sulle righe dei BdR


git-svn-id: svn://10.65.10.50/trunk@20023 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2010-01-29 16:07:16 +00:00
parent 58628ad60a
commit 965e22e6c4

View File

@ -53,7 +53,7 @@ class TGenera_documenti_app : public TSkeleton_application
private:
//Metodi per la generazione dei documenti
bool crea_documento(const TISAM_recordset& plan, TLog_report& rep, int& numdocgen, TAssoc_array& documenti);
void crea_riga(const TString& codart, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep);
void crea_riga(TToken_string& chiave, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep);
//Metodi per il recupero di codnum, tpdoc, stato
bool numerazione_ddt(TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const;
bool numerazione_drit(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const;
@ -299,8 +299,10 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
int err = 1;
if(numerodoc > 0)
{
FOR_EACH_ASSOC_OBJECT(_quantita,h,codart,obj)
FOR_EACH_ASSOC_OBJECT(_quantita,h,key,obj)
{
TToken_string chiave(key);
const TString80 codart = chiave.get(0);
//preparo la chiave per la tabella righe contratti
TToken_string keyrcont;
keyrcont.add(codcli);
@ -311,9 +313,9 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
const TDate adata = (TDate)rcont.get(LVRCONDV_FIDTTMP);
if (dadata.ok() && dtcons >= adata)
crea_riga(codart, modpas, tplis, true, prinbo, doc, rep);
crea_riga(chiave, modpas, tplis, true, prinbo, doc, rep);
else
crea_riga(codart, modpas, tplis, false, prinbo, doc, rep);
crea_riga(chiave, modpas, tplis, false, prinbo, doc, rep);
}
if (doc.rows() > 0)
@ -346,7 +348,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
}
//CREA_RIGA: questa funzione crea una riga merce per una bolla di consegna
void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep)
void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep)
{
const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
//creo la nuova riga
@ -360,6 +362,8 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
const long codcli = doc.get_long(DOC_CODCF);
const long codcont = doc.get_long(DOC_CODCONT);
const TString80 codart = chiave.get(0);
const TString4 causale = chiave.get(1);
//calcolo della quantità che va sulla bolla
@ -375,8 +379,8 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
arrot = false;
const real conguaglio = rcont.get_real(LVRCONDV_QTACONG);
real& qta = *(real*)_quantita.objptr(codart);
const real& qta1 = *(real*)_quantita_ritirata.objptr(codart);
real& qta = *(real*)_quantita.objptr(chiave);
const real& qta1 = *(real*)_quantita_ritirata.objptr(chiave);
const real przdttmp = rcont.get_real(LVRCONDV_PRZDTTMP);
//instanzio una cache sulla tabella del magazzino
@ -419,7 +423,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
rdoc.put(RDOC_CODIVA, anamag.get(ANAMAG_CODIVA)); //codiva
const TCausale_lavanderie caudt(ini_get_string(CONFIG_DITTA, "lv", "CAULVRITDT"));
const TCausale_lavanderie caudt(causale);
//se ho ritirato un quantitativo di roba maggiore o uguale alla dotazione temporanea
//allora creo la nuova riga documento e azzero la dottmp; altrimenti preparo la riga
@ -429,7 +433,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
qta -= dottmp;
rdoc.put(RDOC_QTAGG1, dottmp); //quantità ritirata
rdoc.put(RDOC_GENERATA, true);
rdoc.put(RDOC_CODAGG1, caudt.codice());
rdoc.put(RDOC_CODAGG1, caudt.caucol().empty() ? caudt.codice() : caudt.caucol());
dottmp = 0;
dotod -= dottmp;
TString str;
@ -443,7 +447,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
dotod -= qta;
rdoc.put(RDOC_QTAGG1, qta); //quantità ritirata
rdoc.put(RDOC_GENERATA, true);
rdoc.put(RDOC_CODAGG1, caudt.codice());
rdoc.put(RDOC_CODAGG1, caudt.caucol().empty() ? caudt.codice() : caudt.caucol());
TString str;
str << "L'articolo " << codart << " inserito nel documento " << doc.get(DOC_CODNUM) << "-" << doc.get(DOC_TIPODOC)
<< " numero " << doc.get(DOC_NDOC) << " in dotazione temporanea non è stato ritirato completamente."
@ -518,7 +522,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
rdoc.put(RDOC_GENERATA, true);
//causale da mettere sulle righe documento
const TCausale_lavanderie cau(ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV"));
const TCausale_lavanderie cau(causale);
const TString4 codcau = cau.caucol().empty() ? cau.codice() : cau.caucol();
rdoc.put(RDOC_CODAGG1, codcau);
@ -803,26 +807,28 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r
const TRiga_documento& rdoc = doc[i];
//estraggo i dati di interesse
const TString80 codart = rdoc.get(RDOC_CODARTMAG);
const TString4 codcau = rdoc.get(RDOC_CODAGG1);
TToken_string key; key.add(codart); key.add(codcau);
const real qtardoc = rdoc.get_real(RDOC_QTAGG1);
//se è una riga che riguarda un articolo e se la quantità su questa riga non è nulla, allora la elaboro
if (codart.full() && !qtardoc.is_zero())
{
TArticolo& art = rdoc.articolo();
//leggo se esiste già nel TAssoc_array
real *qta = (real*)_quantita.objptr(codart);
real *qta1 = (real*)_quantita_ritirata.objptr(codart);
real *qta = (real*)_quantita.objptr(key);
real *qta1 = (real*)_quantita_ritirata.objptr(key);
//se non esiste
if (qta == NULL)
{
//per ora memorizzo zero
qta = new real;
_quantita.add(codart,qta);
_quantita.add(key,qta);
}
if (qta1 == NULL)
{
//per ora memorizzo zero
qta1 = new real;
_quantita_ritirata.add(codart,qta1);
_quantita_ritirata.add(key,qta1);
}
//aggiorno la quantità convertendola all'unità di misura di base, aggiungendola o sottraendola
//...se si tratta di un ritiro o di un anticipo rispettivamente; nel caso della scansione delle