From 4c1a9eef7569df646eae67b12ef6d3e5f171129e Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 6 Oct 2009 15:21:40 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : adesso calcola, checka e dechecka! git-svn-id: svn://10.65.10.50/trunk@19384 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve2700.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/ve/ve2700.cpp b/ve/ve2700.cpp index 2d478edf6..0ba589f01 100755 --- a/ve/ve2700.cpp +++ b/ve/ve2700.cpp @@ -23,14 +23,18 @@ class TAggiorna_listini_edit_mask : public TAutomask TString8 _curr_grmerc; //iniziale grmerc-sotgrmerc protected: + //Metodi dello sheet listini figli void fill_children_list(); //riempie lo sheet dei listini figli (costruttore) void fill_ricarichi_children_list(); //aggiunge il ricarico nello sheet dei listini figli (on_field) void save_children_list(); //salva i ricarichi (modificabili) dello sheet dei figli (on_field) + //Metodi dello sheet aggiornamento multilistini void set_header_multilistini_sheet(); //compila le intestazioni delle colonne dello sheet multilistino (costruttore) void fill_multilistini_sheet(); //riempie lo sheet multilistino (on_field) void update_sons_prices(); //aggiorna i prezzi dei listini figli (on_field) int find_codart(TSheet_field& sf, const TString& codart, const TString& um); //cerca l'articolo nello sheet (on_field) + bool one_checked(); //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) virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); @@ -193,6 +197,7 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co row_alta.add(codum, codum_pos); TToken_string& row_bassa = sf.row(-1); + row_bassa.add("X"); row_bassa.add(codart, codart_pos); return sf.items() - 2; //ritorna la penultima riga (riga alta) @@ -209,7 +214,7 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet() //..loro ignoranza di tale riga (un padre qualche vantaggio dovrà pur averlo, no?) TString query; query << "USE RCONDV\n"; - query << "SELECT (TIPORIGA=\"A\")&&((CATVEN=#FATHCATVEN)&&(COD=#FATHCOD))"; + query << "SELECT (TIPORIGA=\"A\")&&(ANAMAG.GRMERC=#GRMERC)&&(((CATVEN=#FATHCATVEN)&&(COD=#FATHCOD))"; //giro su tutti i figli nello sheet dei figli TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI); TToken_string keys_figli(140, ';'); @@ -223,12 +228,15 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet() //prosegue la select query << "||((CATVEN=\"" << key.get(0) << "\")&&(COD=\"" << key.get(1) << "\"))"; } - query << "\n"; - + query << ")\n"; + query << "JOIN ANAMAG INTO CODART==CODRIGA\n"; query << "FROM TIPO=L\n"; query << "TO TIPO=L\n"; TISAM_recordset recset_rows(query); + TString8 grmerc; + grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC)); + recset_rows.set_var("#GRMERC", grmerc); recset_rows.set_var("#FATHCATVEN", get(F_FATHCATVEN)); recset_rows.set_var("#FATHCOD", get(F_FATHCODLIS)); const long recset_rows_items = recset_rows.items(); @@ -275,21 +283,50 @@ void TAggiorna_listini_edit_mask::update_sons_prices() //PrezzoNuovoFiglio = Ricaricofiglio * PrezzoPadre (questo vale per ogni articolo) TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI); TSheet_field& sf_listini = sfield(F_MULTILISTINI); - const int prezzo_pos = sf_listini.cid2index(F_PREZZO); + const int fath_prezzo_pos = sf_listini.cid2index(F_PREZZO); FOR_EACH_SHEET_ROW(sf_figli, r, riga_figlio) { const real ricarico = riga_figlio->get(2); - FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (i & 1) //è come dire mod(i,2)=1 (ignoranti!) + const int son_prezzo_pos = fath_prezzo_pos + 1 + r; + FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (riga->get_char(0) > ' ') //è come dire checked (ignoranti!) { - const real fath_prezzo = riga->get(prezzo_pos); - const TPrice son_prezzo = fath_prezzo * (CENTO + ricarico) / CENTO; - riga->add(son_prezzo.get_num().string(), r + prezzo_pos + 1); + const real old_son_prezzo = sf_listini.cell(r - 1, son_prezzo_pos); + if (old_son_prezzo > ZERO) + { + const real fath_prezzo = riga->get(fath_prezzo_pos); + const TPrice son_prezzo = fath_prezzo * (CENTO + ricarico) / CENTO; + riga->add(son_prezzo.get_num().string(), son_prezzo_pos); + } } } sf_listini.force_update(); } +//controlla sulla colonna delle spunte se almeno una è checkata +bool TAggiorna_listini_edit_mask::one_checked() +{ + TSheet_field& sf_listini = sfield(F_MULTILISTINI); + + FOR_EACH_SHEET_ROW(sf_listini, i, riga) + { + if ((i & 1) && riga->get_char(0) > ' ') + return true; + } + return false; +} + + +void TAggiorna_listini_edit_mask::check_all(const bool checked) +{ + TSheet_field& sf_listini = sfield(F_MULTILISTINI); + + FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (i & 1) + riga->add(checked ? "X" : "", 0); + + sf_listini.force_update(); +} + bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { @@ -318,6 +355,12 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even save_children_list(); } break; + case DLG_CHECKALL: + if (e == fe_button) + { + check_all(!one_checked()); + } + break; default: break; }