From 594e9524ec69b89fad2e9693901dd8e8d90da452 Mon Sep 17 00:00:00 2001 From: luca83 Date: Fri, 30 Oct 2009 10:00:15 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2010.?= =?UTF-8?q?0=20patch=20493=20Files=20correlati=20=20=20=20=20:=20lv3=20Ric?= =?UTF-8?q?ompilazione=20Demo=20:=20[=20]=20Commento=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20:=208.=09Nell=C2=92evasione=20dei=20buoni=20di?= =?UTF-8?q?=20prelievo,=20quando=20inserisco=20tutte=20le=20quantit=C3=A0?= =?UTF-8?q?=20e=20di=20fatto=20il=20buono=20di=20prelievo=20=C3=A8=20evaso?= =?UTF-8?q?=20,=20il=20programma=20si=20deve=20accorgere=20che=20tutte=20l?= =?UTF-8?q?e=20righe=20sono=20saldate=20e=20generare=20il=20buono=20di=20c?= =?UTF-8?q?onsegna=20=20proponendomi=20prima=20la=20domanda=20=C2=93=20vuo?= =?UTF-8?q?i=20stampare=20il=20buono=20di=20Consegna=C2=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/trunk@19551 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv3200.cpp | 198 +++++++++++++++++++++----------------------------- 1 file changed, 82 insertions(+), 116 deletions(-) diff --git a/lv/lv3200.cpp b/lv/lv3200.cpp index 39886aa9a..64231ade1 100755 --- a/lv/lv3200.cpp +++ b/lv/lv3200.cpp @@ -17,40 +17,6 @@ #include "lv3200a.h" - //////////////////////////////// - //// TPOSIZIONE_ARRAY //// - //////////////////////////////// - -//classe TPosizione_array -class TPosizione_array: public TObject -{ - TAssoc_array _pos; -public: - void aggiungi(const char* key, int pos); - int posizione(const char* key); - - TPosizione_array(){}; -}; - -//AGGIUNGI: metodo che aggiunge una coppia di valori all'array -void TPosizione_array::aggiungi(const char* key, const int pos) -{ - real tmp = pos; - _pos.add(key, tmp); -} - -//POSIZIONE: metodo che data una chiave restituisce la posizione (-1 se non esiste) -int TPosizione_array::posizione(const char* key) -{ - long posizione = -1; - if (_pos.is_key(key)) - { - real& tmp = *(real*)_pos.objptr(key); - posizione = tmp.integer(); - } - return posizione; -} - ///////////////////////////// //// TEVASIONE_MSK //// ///////////////////////////// @@ -58,12 +24,11 @@ int TPosizione_array::posizione(const char* key) //classe TEvasione_msk class TEvasione_msk: public TAutomask { - TDocumento _buonori; - TPosizione_array _posizioni; - int _ndoc; - TString4 _tpev; - - TAssoc_array _pacchi; + TDocumento _buonori; + int _ndoc; + TString4 _tpev; + int _righevase; + TAssoc_array _pacchi; protected: void setta_campi_data(); @@ -240,6 +205,8 @@ void TEvasione_msk::setta_campi_cliente() //CARICA_RIGHE: metodo che carica sullo sheet le righe di un documento selezionato void TEvasione_msk::carica_righe() { + _righevase = 0; + TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC)); TBuono_prelievo doc(kdoc); @@ -269,21 +236,6 @@ void TEvasione_msk::carica_righe() } TSheet_field& sheet = sfield(F_RIGHE); - sheet.row(-1); - //preparo l'array delle posizioni dei campi nello sheet - _posizioni.aggiungi("evaso", sheet.cid2index(S_EVASO)); - _posizioni.aggiungi("codart", sheet.cid2index(S_CODART)); - _posizioni.aggiungi("desrart", sheet.cid2index(S_ARTDESCR)); - _posizioni.aggiungi("causale", sheet.cid2index(S_CAUSALE)); - _posizioni.aggiungi("ritirato", sheet.cid2index(S_RITIRATO)); - _posizioni.aggiungi("dacons", sheet.cid2index(S_DACONS)); - _posizioni.aggiungi("consegnato", sheet.cid2index(S_CONSEGNATO)); - _posizioni.aggiungi("pacchi", sheet.cid2index(S_PACCHI)); - _posizioni.aggiungi("congpre", sheet.cid2index(S_CONGPRE)); - _posizioni.aggiungi("congatt", sheet.cid2index(S_CONGATT)); - _posizioni.aggiungi("rifbcon", sheet.cid2index(S_RIFBCON)); - _posizioni.aggiungi("rifbrit", sheet.cid2index(S_RIFBRIT)); - sheet.destroy(); for(int i = 1; i <= doc.rows(); i++) { @@ -293,29 +245,32 @@ void TEvasione_msk::carica_righe() if (rdoc.qta_dacons() > 0) { TToken_string& riga = sheet.row(-1); - riga.add(rdoc.evaso() ? "X" : "", _posizioni.posizione("evaso")); - riga.add(rdoc.codart(), _posizioni.posizione("codart")); - riga.add(rdoc.desart(), _posizioni.posizione("artdescr")); - riga.add(rdoc.causale(), _posizioni.posizione("causale")); - riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato")); - riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons")); - riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato")); + riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO)); + if(rdoc.evaso()) + _righevase++; + + riga.add(rdoc.codart(), sheet.cid2index(S_CODART)); + riga.add(rdoc.desart(), sheet.cid2index(S_ARTDESCR)); + riga.add(rdoc.causale(), sheet.cid2index(S_CAUSALE)); + riga.add(rdoc.qta_ritirata(), sheet.cid2index(S_RITIRATO)); + riga.add(rdoc.qta_dacons(), sheet.cid2index(S_DACONS)); + riga.add(rdoc.qta_consegnata(), sheet.cid2index(S_CONSEGNATO)); const TRectype& anamag = cache().get(LF_ANAMAG, rdoc.codart()); //recupero i dati di interesse dall'anagrafica di magazzino const long ppconf = anamag.get_long(ANAMAG_PPCONF); if (ppconf > 0) - riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi")); + riga.add(rdoc.num_pacchi(), sheet.cid2index(S_PACCHI)); else { - riga.add(0, _posizioni.posizione("pacchi")); - sheet.disable_cell(i, _posizioni.posizione("pacchi")); + riga.add(0, sheet.cid2index(S_PACCHI)); + sheet.disable_cell(i, sheet.cid2index(S_PACCHI)); } - riga.add(rdoc.cong_pre(), _posizioni.posizione("congpre")); - riga.add(rdoc.cong_att(), _posizioni.posizione("congatt")); - riga.add(rdoc.rifbcon(), _posizioni.posizione("rifbcon")); - riga.add(rdoc.rifbrit(), _posizioni.posizione("rifbrit")); + riga.add(rdoc.cong_pre(), sheet.cid2index(S_CONGPRE)); + riga.add(rdoc.cong_att(), sheet.cid2index(S_CONGATT)); + riga.add(rdoc.rifbcon(), sheet.cid2index(S_RIFBCON)); + riga.add(rdoc.rifbrit(), sheet.cid2index(S_RIFBRIT)); } else rdoc.set_evaso(true); @@ -521,8 +476,8 @@ void TEvasione_msk::genera_documento() //EVADI_TUTTO: metodo che forza a "evaso" tutte le righe e lancia la generazione del buono di consegna associato void TEvasione_msk::evadi_tutto() { - const int posevaso = _posizioni.posizione("evaso"); TSheet_field& sheet = sfield(F_RIGHE); + const int posevaso = sheet.cid2index(S_EVASO); FOR_EACH_SHEET_ROW(sheet, r, riga) { @@ -538,20 +493,20 @@ void TEvasione_msk::spezza_riga() FOR_EACH_SHEET_ROW_BACK(sheet, r, riga1) { - char flgev = riga1->get_char(_posizioni.posizione("evaso")); + char flgev = riga1->get_char(sheet.cid2index(S_EVASO)); if (flgev != 'X') { TToken_string& riga2 = sheet.row(-1); riga2 = *riga1; - const int dacons2 = riga2.get_int(_posizioni.posizione("ritirato")) - riga2.get_int(_posizioni.posizione("consegnato")); - riga2.add(dacons2, _posizioni.posizione("dacons")); - riga2.add(0L, _posizioni.posizione("consegnato")); - riga2.add(0L, _posizioni.posizione("pacchi")); + const int dacons2 = riga2.get_int(sheet.cid2index(S_RITIRATO)) - riga2.get_int(sheet.cid2index(S_CONSEGNATO)); + riga2.add(dacons2, sheet.cid2index(S_DACONS)); + riga2.add(0L, sheet.cid2index(S_CONSEGNATO)); + riga2.add(0L, sheet.cid2index(S_PACCHI)); - const int dacons1 = riga1->get_int(_posizioni.posizione("ritirato")) - riga1->get_int(_posizioni.posizione("consegnato")); - riga1->add(dacons1, _posizioni.posizione("dacons")); - riga1->add("X", _posizioni.posizione("evaso")); + const int dacons1 = riga1->get_int(sheet.cid2index(S_RITIRATO)) - riga1->get_int(sheet.cid2index(S_CONSEGNATO)); + riga1->add(dacons1, sheet.cid2index(S_DACONS)); + riga1->add("X", sheet.cid2index(S_EVASO)); } } sheet.sort(sort_by_codart); @@ -587,7 +542,7 @@ void TEvasione_msk::salva() TRiga_documento& row = doc.new_row("21"); TBuono_prelievo_row rdoc(row); - const char flgev = riga->get(_posizioni.posizione("evaso"))[0]; + const char flgev = riga->get(sheet.cid2index(S_EVASO))[0]; bool flag; if (flgev == 'X') flag = true; @@ -595,17 +550,17 @@ void TEvasione_msk::salva() flag = false; rdoc.set_evaso(flag); - rdoc.set_codart(riga->get(_posizioni.posizione("codart"))); - rdoc.set_desart(riga->get(_posizioni.posizione("artdescr"))); - rdoc.set_causale(riga->get(_posizioni.posizione("causale"))); - rdoc.set_qta_ritirata(riga->get_int(_posizioni.posizione("ritirato"))); - rdoc.set_qta_dacons(riga->get_int(_posizioni.posizione("dacons"))); - rdoc.set_qta_consegnata(riga->get_int(_posizioni.posizione("consegnato"))); - rdoc.set_num_pacchi(riga->get_int(_posizioni.posizione("pacchi"))); - rdoc.set_cong_att(riga->get_int(_posizioni.posizione("congpre"))); - rdoc.set_cong_pre(riga->get_int(_posizioni.posizione("congatt"))); - rdoc.set_rifbcon(riga->get(_posizioni.posizione("rifbcon"))); - rdoc.set_rifbrit(riga->get(_posizioni.posizione("rifbrit"))); + rdoc.set_codart(riga->get(sheet.cid2index(S_CODART))); + rdoc.set_desart(riga->get(sheet.cid2index(S_ARTDESCR))); + rdoc.set_causale(riga->get(sheet.cid2index(S_CAUSALE))); + rdoc.set_qta_ritirata(riga->get_int(sheet.cid2index(S_RITIRATO))); + rdoc.set_qta_dacons(riga->get_int(sheet.cid2index(S_DACONS))); + rdoc.set_qta_consegnata(riga->get_int(sheet.cid2index(S_CONSEGNATO))); + rdoc.set_num_pacchi(riga->get_int(sheet.cid2index(S_PACCHI))); + rdoc.set_cong_att(riga->get_int(sheet.cid2index(S_CONGPRE))); + rdoc.set_cong_pre(riga->get_int(sheet.cid2index(S_CONGATT))); + rdoc.set_rifbcon(riga->get(sheet.cid2index(S_RIFBCON))); + rdoc.set_rifbrit(riga->get(sheet.cid2index(S_RIFBRIT))); } doc.rewrite(); } @@ -626,29 +581,29 @@ void TEvasione_msk::annulla_operazioni() TBuono_prelievo_row rdoc(row); TToken_string& riga = sheet.row(-1); - riga.add(rdoc.evaso() ? "X" : "", _posizioni.posizione("evaso")); - riga.add(rdoc.codart(), _posizioni.posizione("codart")); - riga.add(rdoc.desart(), _posizioni.posizione("artdescr")); - riga.add(rdoc.causale(), _posizioni.posizione("causale")); - riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato")); - riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons")); - riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato")); + riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO)); + riga.add(rdoc.codart(), sheet.cid2index(S_CODART)); + riga.add(rdoc.desart(), sheet.cid2index(S_ARTDESCR)); + riga.add(rdoc.causale(), sheet.cid2index(S_CAUSALE)); + riga.add(rdoc.qta_ritirata(), sheet.cid2index(S_RITIRATO)); + riga.add(rdoc.qta_dacons(), sheet.cid2index(S_DACONS)); + riga.add(rdoc.qta_consegnata(), sheet.cid2index(S_CONSEGNATO)); const TRectype& anamag = cache().get(LF_ANAMAG, rdoc.codart()); //recupero i dati di interesse dall'anagrafica di magazzino const long ppconf = anamag.get_long(ANAMAG_PPCONF); if (ppconf > 0) - riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi")); + riga.add(rdoc.num_pacchi(), sheet.cid2index(S_PACCHI)); else { - riga.add(0, _posizioni.posizione("pacchi")); - sheet.disable_cell(i, _posizioni.posizione("pacchi")); + riga.add(0, sheet.cid2index(S_PACCHI)); + sheet.disable_cell(i, sheet.cid2index(S_PACCHI)); } - riga.add(rdoc.cong_pre(), _posizioni.posizione("congpre")); - riga.add(rdoc.cong_att(), _posizioni.posizione("congatt")); - riga.add(rdoc.rifbcon(), _posizioni.posizione("rifbcon")); - riga.add(rdoc.rifbrit(), _posizioni.posizione("rifbrit")); + riga.add(rdoc.cong_pre(), sheet.cid2index(S_CONGPRE)); + riga.add(rdoc.cong_att(), sheet.cid2index(S_CONGATT)); + riga.add(rdoc.rifbcon(), sheet.cid2index(S_RIFBCON)); + riga.add(rdoc.rifbrit(), sheet.cid2index(S_RIFBRIT)); } sheet.force_update(); } @@ -662,7 +617,7 @@ bool TEvasione_msk::controlla() FOR_EACH_SHEET_ROW(sheet, r, row) { - const char flgev = row->get(_posizioni.posizione("evaso"))[0]; + const char flgev = row->get(sheet.cid2index(S_EVASO))[0]; if (flgev != 'X') evaso = false; } @@ -733,13 +688,13 @@ void TEvasione_msk::evadi_da_barcode() //cerco la prima riga non evasa di quell'articolo FOR_EACH_SHEET_ROW(sheet, r, riga) { - if (riga->get(_posizioni.posizione("codart")) == codart && riga->get(_posizioni.posizione("evaso")) != "X") + if (riga->get(sheet.cid2index(S_CODART)) == codart && riga->get(sheet.cid2index(S_EVASO)) != "X") { - int pacchi = riga->get_int(_posizioni.posizione("pacchi")); pacchi += 1; - int qtacon = riga->get_int(_posizioni.posizione("consegnato")); qtacon += qtapacco; + int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1; + int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco; - riga->add(pacchi, _posizioni.posizione("pacchi")); - riga->add(qtacon, _posizioni.posizione("consegnato")); + riga->add(pacchi, sheet.cid2index(S_PACCHI)); + riga->add(qtacon, sheet.cid2index(S_CONSEGNATO)); trovato = true; @@ -756,13 +711,13 @@ void TEvasione_msk::evadi_da_barcode() { FOR_EACH_SHEET_ROW(sheet, r, riga) { - if (riga->get(_posizioni.posizione("codart")) == codart) + if (riga->get(sheet.cid2index(S_CODART)) == codart) { - int pacchi = riga->get_int(_posizioni.posizione("pacchi")); pacchi += 1; - int qtacon = riga->get_int(_posizioni.posizione("consegnato")); qtacon += qtapacco; + int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1; + int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco; - riga->add(pacchi, _posizioni.posizione("pacchi")); - riga->add(qtacon, _posizioni.posizione("consegnato")); + riga->add(pacchi, sheet.cid2index(S_PACCHI)); + riga->add(qtacon, sheet.cid2index(S_CONSEGNATO)); trovato = true; if (_pacchi.is_key(codpacco)) @@ -871,16 +826,27 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll { if (e == fe_modify) { - TMask& msk = sfield(F_RIGHE).sheet_mask(); + TSheet_field& sheet = sfield(F_RIGHE); + TMask& msk = sheet.sheet_mask(); //la riga risulta evasa se la quantità consegnata è maggiore o uguale alla quantità da consegnare if(msk.get_long(S_CONSEGNATO) > msk.get_long(S_DACONS)) { warning_box(TR("ATTENZIONE: stai consegnando un quantitativo maggiore al dovuto")); msk.set(S_EVASO, "X"); + TToken_string& riga = sheet.row(sheet.selected()); + riga.add("X", sheet.cid2index(S_EVASO)); } else if (msk.get_long(S_CONSEGNATO) == msk.get_long(S_DACONS)) + { msk.set(S_EVASO, "X"); + TToken_string& riga = sheet.row(sheet.selected()); + riga.add("X", sheet.cid2index(S_EVASO)); + } + sistema_pacchi(); + + if (controlla()) + genera_documento(); } } break;