From 834aed14a2bf972f71cfc913760c711ff65979c8 Mon Sep 17 00:00:00 2001 From: luca83 Date: Fri, 26 Mar 2010 13:51:23 +0000 Subject: [PATCH] Patch level : 10.0 patch ??? Files correlati : lv3 Ricompilazione Demo : [ ] Commento : NEI BUONI DI PRELIEVO NON POSSIAMO RIPETERE DUE VOLTE LO STESSO ARTICOLI PERCHE' IL TERMINALINO LEGGE SOLO UNA VOLTA L'ARTICOLO git-svn-id: svn://10.65.10.50/trunk@20281 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv3400.cpp | 151 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 125 insertions(+), 26 deletions(-) diff --git a/lv/lv3400.cpp b/lv/lv3400.cpp index 8a2c61b0f..bed5d38fe 100755 --- a/lv/lv3400.cpp +++ b/lv/lv3400.cpp @@ -154,19 +154,17 @@ TQuantita_riga::TQuantita_riga(bool evaso, long qtadc, long qtac, int pacchi) class TRighe_array: public TAssoc_array { public: - //TQuantita_riga* quantita(TString& codart, TDate& data, TString& cau, bool create); //cazzone - TQuantita_riga* quantita(TString& codart, TDate& data, bool create); + TQuantita_riga* quantita(TString& codart, TDate& data, TString& cau, bool create); }; //QUANTITA: metodo che cerca nel TAssoc_array le quantità della riga interessata in base ai parametri passati //e lo crea in automatico se il parametro create vale "true" -//TQuantita_riga* TRighe_array::quantita(TString& codart, TDate& data, TString& cau, bool create) //cazzone -TQuantita_riga* TRighe_array::quantita(TString& codart, TDate& data, bool create) +TQuantita_riga* TRighe_array::quantita(TString& codart, TDate& data, TString& cau, bool create) { TToken_string key; key.add(codart); key.add(data); - //key.add(cau); //cazzone + key.add(cau); TQuantita_riga* qr = (TQuantita_riga*)objptr(key); @@ -281,9 +279,8 @@ bool TEvasione_ter_msk::precarica_righe() if (rdoc.qta_dacons() > 0) { - //TString4 cau = rdoc.causale(); //cazzone - //TQuantita_riga* qr = _ra.quantita(codart, oggi, cau, true); - TQuantita_riga* qr = _ra.quantita(codart, oggi, true); + TString4 cau = rdoc.causale(); + TQuantita_riga* qr = _ra.quantita(codart, oggi, cau, true); qr->set_nriga(i); qr->set_evaso(rdoc.evaso()); qr->set_qta_rit(rdoc.qta_ritirata()); @@ -779,7 +776,8 @@ void TEvasione_ter_msk::registra() FOR_EACH_ASSOC_OBJECT(_pacchi, o, codpacco, rifdoc) { - TDoc_key kdoc = *(TToken_string*)rifdoc; + TToken_string& tmp = *(TToken_string*)rifdoc; + TDoc_key kdoc(tmp.get_int(0), tmp.get(1), tmp.get_long(2)); TRiga_pacco rp(codpacco); const TString80 codart = rp.articolo(); @@ -937,7 +935,7 @@ void TEvasione_ter_msk::evadi_da_terminale() if (codpacco.full()) { - const TRiga_pacco rp(codpacco); + TRiga_pacco rp(codpacco); if (rp.empty()) { @@ -963,18 +961,23 @@ void TEvasione_ter_msk::evadi_da_terminale() const TDate oggi(TODAY); const TString80 codart = rp.articolo(); - const real qtapacco = rp.quantita(); + const real qtapacco = rp.quantita(); TToken_string key; key.add(codart); key.add(oggi); - TDoc_key kdoc(get_date(F_TDATADOC).year(), ini_get_string(CONFIG_DITTA, "lv", "NUM_PRE", NULL, 0), get_int(F_TNDOC)); + TToken_string kdoc; + kdoc.add(get_date(F_TDATADOC).year()); + kdoc.add(ini_get_string(CONFIG_DITTA, "lv", "NUM_PRE", NULL, 0)); + kdoc.add(get_int(F_TNDOC)); //se il pacco è già stato pistolettato lo tolgo dai pacchi da evadere, altrimenti cerco di sommarlo //a una riga documento esistente if (_pacchi.is_key(codpacco) && yesno_box(TR("Si desidera annullare il pacco selezionato?"))) { - _pacchi.remove(codpacco); + TToken_string& tmp = *(TToken_string*)_pacchi.objptr(codpacco); + key.add(tmp.get(3)); + _pacchi.remove(codpacco); if (_ra.is_key(key)) { @@ -994,29 +997,124 @@ void TEvasione_ter_msk::evadi_da_terminale() } else { - if (_ra.is_key(key)) - { - TQuantita_riga& qr = *(TQuantita_riga*)_ra.objptr(key); + bool trovato = false; + bool associato = false; + bool evaso1 = false; + bool evaso2 = false; - if (qr.get_evaso()) + TToken_string chiave1; + TToken_string chiave2; + + FOR_EACH_ASSOC_OBJECT(_ra, obj, key, itm) + { + //TString& tmp = *(TString*)key; + chiave1 = key; + //se trovo una riga di quell'artticolo allora + TString cod = chiave1.get(0); + if(cod == codart) { - if(yesno_box(TR("Si desidera sommare il pacco a una riga già evasa?"))) + trovato = true; + TQuantita_riga& qr = *(TQuantita_riga*)_ra.objptr(key); + + //se la riga trovata non è già evasa e manca da consegnare almeno la qta + //di un pacco, allora lo associo + evaso1 = qr.get_evaso(); + if (!evaso1 && qr.get_qta_da_con() >= qtapacco) { + associato = true; qr.add_pacchi(); qr.add_qta_con(qtapacco); + + if(qr.get_qta_con() == qr.get_qta_da_con()) + qr.set_evaso(true); + + kdoc.add(chiave1.get(2)); + _pacchi.add(codpacco, kdoc); + set(F_TPACCHI, qr.get_pacchi()); + set(F_TQTAPACCO, qtapacco); + set(F_TQTACON, qr.get_qta_con()); + set(F_TQTADACON, qr.get_qta_da_con()); + set(F_CODART, rp.articolo()); + + break; } } - else + } + + //se ho trovato la riga di quell'articolo ma non l'ho associato, + //cerco un eventuale altra riga per quell'articolo + if(trovato && !associato) + { + trovato = false; + + FOR_EACH_ASSOC_OBJECT(_ra, obj, key, itm) { - qr.add_pacchi(); - qr.add_qta_con(qtapacco); + chiave2 = *(TToken_string*)key; + //se trovo una riga di quell'artticolo allora + if(chiave2.get(0) == codart && chiave1 != chiave2) + { + trovato = true; + TQuantita_riga& qr = *(TQuantita_riga*)_ra.objptr(key); - if(qr.get_qta_con() > qr.get_qta_da_con()) - warning_box(TR("ATTENZIONE: si sta consegnando un quantitativo maggiore al dovuto")); + //se la riga trovata non è già evasa e manca da consegnare almeno la qta + //di un pacco, allora lo associo + evaso2= qr.get_evaso(); + if (!evaso2 && qr.get_qta_da_con() >= qtapacco) + { + associato = true; + qr.add_pacchi(); + qr.add_qta_con(qtapacco); - if(qr.get_qta_con() >= qr.get_qta_da_con()) - qr.set_evaso(true); + if(qr.get_qta_con() == qr.get_qta_da_con()) + qr.set_evaso(true); + + kdoc.add(chiave2.get(2)); + _pacchi.add(codpacco, kdoc); + set(F_TPACCHI, qr.get_pacchi()); + set(F_TQTAPACCO, qtapacco); + set(F_TQTACON, qr.get_qta_con()); + set(F_TQTADACON, qr.get_qta_da_con()); + set(F_CODART, rp.articolo()); + + break; + } + } } + } + + //se risulta ancora trovato, ma non associato, allora lo associo alla riga non ancora evasa + if(trovato && !associato) + { + TQuantita_riga qr; + if(!evaso1) + { + qr = *(TQuantita_riga*)_ra.objptr(chiave1); + kdoc.add(chiave1.get(2)); + } + else + if(!evaso2) + { + qr = *(TQuantita_riga*)_ra.objptr(chiave2); + kdoc.add(chiave2.get(2)); + } + else + if(yesno_box(TR("Si desidera sommare il pacco ad un riga già evasa?"))) + { + qr = *(TQuantita_riga*)_ra.objptr(chiave1); + kdoc.add(chiave1.get(2)); + } + else + return; + + qr.add_pacchi(); + qr.add_qta_con(qtapacco); + + if(qr.get_qta_con() > qr.get_qta_da_con()) + + + if(qr.get_qta_con() >= qr.get_qta_da_con()) + qr.set_evaso(true); + _pacchi.add(codpacco, kdoc); set(F_TPACCHI, qr.get_pacchi()); set(F_TQTAPACCO, qtapacco); @@ -1024,7 +1122,8 @@ void TEvasione_ter_msk::evadi_da_terminale() set(F_TQTADACON, qr.get_qta_da_con()); set(F_CODART, rp.articolo()); } - else + + if(!trovato) { TDoc_key kdoc(get_date(F_TDATADOC).year(), ini_get_string(CONFIG_DITTA, "lv", "NUM_PRE", NULL, 0), get_long(F_TNDOC)); TBuono_prelievo bpre(kdoc);