From 668c6227c4a14be039601c37b7ad746496e29031 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 9 Nov 2009 10:20:47 +0000 Subject: [PATCH] Patch level : 10.0 505 Files correlati : ve2 Ricompilazione Demo : [ ] Commento : Corretta eliminazione articoli a prezzo nullo git-svn-id: svn://10.65.10.50/trunk@19590 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve2700.cpp | 113 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 46 deletions(-) diff --git a/ve/ve2700.cpp b/ve/ve2700.cpp index 9969a03c2..b9c8e3298 100755 --- a/ve/ve2700.cpp +++ b/ve/ve2700.cpp @@ -42,6 +42,7 @@ protected: bool one_checked() const; //controlla se nella colonna dei check ce ne č almeno 1 checkato (on_field) void check_all(const bool checked); //checka-dechecka la colonna dei check (on_field) void add_art(); //aggiunge un articolo ai listini (on_field) + void kill_priceless_articles(const TString& catven, const TString& codlist, int pos); void save_listini(); //salva tutte le righe listini (padre e figli) cosė come sono sullo sheet (on_field) real get_price(TSheet_field& sf, const int row, const short dlg_id) const; @@ -219,14 +220,13 @@ real TAggiorna_listini_edit_mask::get_price(TMask_field& fld) const real TAggiorna_listini_edit_mask::get_price(TSheet_field& sf, const int row, const short dlg_id) const { const int col = sf.cid2index(dlg_id); + TString16 str_prezzo = sf.cell(row, col); if (dlg_id == S2_PREZZO) { - TString16 str_prezzo = sf.cell(row, col); str_prezzo.strip("."); str_prezzo.replace(',', '.'); - return real(str_prezzo); } - return real(sf.cell(row, col)); + return real(str_prezzo); } bool TAggiorna_listini_edit_mask::arrotonda(const short dlg_id, real& price) @@ -274,7 +274,6 @@ void TAggiorna_listini_edit_mask::set_price(TSheet_field& sf, const int row, con sf.row(row).add(price.string(), prezzo_pos); } - void TAggiorna_listini_edit_mask::set_price(TMask_field& fld, real& price) { const bool is_father_list = arrotonda(fld.dlg(), price); @@ -292,14 +291,21 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co //cerca la riga tra quelle esistenti const int codart_pos = sf.cid2index(S2_CODRIGA); const int codum_pos = codart_pos + 1; - - for (int i = 1; i < sf.items(); i += 2) + const int sf_items = sf.items(); + for (int i = 1; i < sf_items; i += 2) { const char* art = sf.cell(i, codart_pos); - TString4 um = sf.cell(i - 1, codum_pos); - um.trim(); - if (codart == art && (!_ges_um || codum == um)) + if (codart == art) + { + if (_ges_um) // Controllo anche l'unita' di misura solo se necessario + { + TString4 um = sf.cell(i - 1, codum_pos); + um.trim(); + if (codum != um) + continue; + } return i - 1; + } } return -1; } @@ -603,6 +609,51 @@ void TAggiorna_listini_edit_mask::add_art() } } +void TAggiorna_listini_edit_mask::kill_priceless_articles(const TString& catven, const TString& codlist, int pos) +{ + TSheet_field& sf_listini = sfield(F_MULTILISTINI); + + TString query; + query << "USE RCONDV\n"; + query << "SELECT ANAMAG.GRMERC?=#GRMERC\n"; + query << "JOIN ANAMAG INTO CODART==CODRIGA\n"; + query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n"; + query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n"; + + TISAM_recordset recset_rows(query); + TString8 grmerc; get_correct_grmerc(grmerc, true); + + recset_rows.set_var("#GRMERC", grmerc); + recset_rows.set_var("#CATVEN", catven); + recset_rows.set_var("#COD", codlist); + const long recset_rows_items = recset_rows.items(); + + TLocalisamfile& file = recset_rows.cursor()->file(); + + //eliminatore di articoli cancellati dallo sheet + for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next()) + { + //prende codart e um dal record su file rcondv + const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string(); + const TString& um = recset_rows.get(RCONDV_UM).as_string(); + //cerca sullo sheet la coppia codart+um + const int riga_alta = find_codart(sf_listini, codart, um); + const real prezzo = riga_alta >= 0 ? get_price(sf_listini, riga_alta + 1, S2_PREZZO + pos) : ZERO; + //se non la trova o se il prezzo č 0 elimina la riga dal file + if (prezzo.is_zero()) + { + const int err = file.remove(); + if (err != NOERR) + { + TString80 msg; + msg.format(FR("Errore %d in cancellazione dell'articolo %s dal listino %s"), + err, (const char*)codart, file.curr().build_key()); + xvtil_popup_error(msg); + } + } + } +} + //salva i listini cosė come li trova sulle righe dello sheet multilistini void TAggiorna_listini_edit_mask::save_listini() { @@ -624,41 +675,11 @@ void TAggiorna_listini_edit_mask::save_listini() key = tok; //assegnamento necessario causa tipo (se usasse tok direttamente non funzionerebbe) const int pos = keys_listini.get_pos(key); + const TString4 catven = key.get(0); + const TString4 codlist = key.get(1); + kill_priceless_articles(catven, codlist, pos); - TString query; - query << "USE RCONDV\n"; - query << "SELECT ANAMAG.GRMERC?=#GRMERC\n"; - query << "JOIN ANAMAG INTO CODART==CODRIGA\n"; - query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n"; - query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n"; - - TISAM_recordset recset_rows(query); - TString8 grmerc; - get_correct_grmerc(grmerc, false); - - recset_rows.set_var("#GRMERC", grmerc); - const TString4 catven = key.get(0); - recset_rows.set_var("#CATVEN", catven); - const TString4 cod = key.get(1); - recset_rows.set_var("#COD", cod); - const long recset_rows_items = recset_rows.items(); - - TLocalisamfile& file = recset_rows.cursor()->file(); - - //eliminatore di articoli cancellati dallo sheet - for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next()) - { - //prende codart e um dal record su file rcondv - const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string(); - const TString& um = recset_rows.get(RCONDV_UM).as_string(); - //cerca sullo sheet la coppia codart+um - const int riga_alta = find_codart(sf_listini, codart, um); - const real prezzo = get_price(sf_listini, riga_alta + 1, S2_PREZZO + pos); - //se non la trova o se il prezzo č 0 elimina la riga dal file - if (riga_alta < 0 || prezzo == ZERO) - file.remove(); - } - + TLocalisamfile file(LF_RCONDV); TRectype key_rec(LF_RCONDV); //alla fine della storia registra tutto lo sheet sul file @@ -674,8 +695,7 @@ void TAggiorna_listini_edit_mask::save_listini() key_rec.zero(); key_rec.put(RCONDV_TIPO, "L"); key_rec.put(RCONDV_CATVEN, catven); - key_rec.put(RCONDV_COD, cod); - + key_rec.put(RCONDV_COD, codlist); key_rec.put(RCONDV_TIPORIGA, "A"); key_rec.put(RCONDV_CODRIGA, codart); if (_ges_um) @@ -702,7 +722,8 @@ void TAggiorna_listini_edit_mask::save_listini() } } //if(err==NOERR.. if (err != NOERR) - error_box(FR("Errore %d durante l'aggiornamento dell'articolo %s nel listino %s"), err, (const char*)codart, (const char*)cod); + error_box(FR("Errore %d durante l'aggiornamento dell'articolo %s nel listino %s"), + err, (const char*)codart, (const char*)codlist); } } //FOR_EACH_SHEET_ROW... } //FOR_EACH_TOKEN...