diff --git a/ve/ve2700.cpp b/ve/ve2700.cpp index eca347f85..b5d4702a8 100755 --- a/ve/ve2700.cpp +++ b/ve/ve2700.cpp @@ -8,6 +8,7 @@ #include #include "../mg/anamag.h" +#include "../mg/umart.h" #include "condv.h" #include "rcondv.h" @@ -35,6 +36,7 @@ protected: 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) + void add_art(); //aggiunge un articolo ai listini (on_field) virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); @@ -208,7 +210,7 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co void TAggiorna_listini_edit_mask::fill_multilistini_sheet() { //popola il double-deck sheet - //cerca tutte le righe che appartengono a pedre e figli; se una riga appartiene ad un figlio e non al padre.. + //cerca tutte le righe che appartengono a padre e figli; se una riga appartiene ad un figlio e non al padre.. //..viene aggiunta al padre medesimo (i padri devono sapere tutto dei figli, sennò che genitori sono?) //se invece la riga appartiene al padre e non a uno o più figli questi ultimi saranno lasciati nella.. //..loro ignoranza di tale riga (un padre qualche vantaggio dovrà pur averlo, no?) @@ -247,7 +249,6 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet() TString query; query << "USE RCONDV\n"; query << "SELECT ANAMAG.GRMERC=#GRMERC\n"; - //giro su tutti i figli nello sheet dei figli 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"; @@ -327,7 +328,7 @@ bool TAggiorna_listini_edit_mask::one_checked() return false; } - +//checka-dechecka la colonna di spunte dello sheet void TAggiorna_listini_edit_mask::check_all(const bool checked) { TSheet_field& sf_listini = sfield(F_MULTILISTINI); @@ -338,11 +339,68 @@ void TAggiorna_listini_edit_mask::check_all(const bool checked) sf_listini.force_update(); } +//aggiunge un articolo ai listini +void TAggiorna_listini_edit_mask::add_art() +{ + //si possono aggiungere solo articoli con lo stesso GRMERC selezionato ma non ancora in listino padre, oppure.. + //..articoli orfani di grmerc (che però saranno sconsigliati!) + //(per adesso solo con l'unità di misura principale;per aggiungere gli articoli con più unità di misura.. + //..si rimanda al programma principale di gestione listini ve2500!!) + TString query; + query << "USE ANAMAG\n"; + query << "SELECT ((GRMERC=#GRMERC)||(GRMERC=\"\"))&&(RCONDV.CODRIGA=\"\")\n"; + query << "JOIN RCONDV INTO TIPO=\"L\" CATVEN=#CATVEN COD=#COD TIPORIGA=\"A\" CODRIGA=CODART\n"; + query << "JOIN UMART INTO CODART=CODART NRIGA=1\n"; + TISAM_recordset recset(query); + TString8 grmerc; + grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC)); + recset.set_var("#GRMERC", grmerc); + recset.set_var("#CATVEN", get(F_FATHCATVEN)); + recset.set_var("#COD", get(F_FATHCODLIS)); + + const int recset_items = recset.items(); + + //crea uno sheet volante con gli articoli aggiungibili + TArray_sheet sheet(-1, -1, 78, 20, TR("Articoli aggiungibili"), HR("@1|Codice@20|UM|Descrizione@50")); + + TProgind pi(recset_items, TR("Ricerca articoli aggiungibili..."), true, true); + + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + if (!pi.addstatus(1)) + break; + + TToken_string row; + //prechecka solo quelli con il corretto grmerc; gli articoli orfani no! + const TString& grmerc = recset.get(ANAMAG_GRMERC).as_string(); + if (grmerc.full()) + row.add("X"); + else + row.add(""); + const TString codart = recset.get(ANAMAG_CODART).as_string(); + row.add(codart); + const TString& um = recset.get(UMART_UM).as_string(); + row.add(um); + const TString& descr = recset.get(ANAMAG_DESCR).as_string(); + row.add(descr); + + sheet.add(row); + } + sheet.rows_array().sort(false); + sheet.run(); +} bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch(o.dlg()) { + case F_LISTINI_FIGLI: + case F_MULTILISTINI: + if (e == se_query_add) + { + return false; + } + break; case F_GRMERC: case F_SOTGRMERC: //una volta selezionati grmerc/sotgrmerc riempie la colonna ricarico dello sheet @@ -372,6 +430,14 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even check_all(!one_checked()); } break; + case DLG_ADDART: + if (e == fe_button) + { + if (field(F_GRMERC).empty()) + return error_box(TR("Per aggiungere articoli è necessario selezionare un gruppo merceologico!")); + add_art(); + } + break; default: break; } @@ -566,6 +632,8 @@ TAggiorna_listini_query_mask::TAggiorna_listini_query_mask() : TAutomask("ve2700 //////////////////////////////////////////////////////// class TAggiorna_listini : public TSkeleton_application { +protected: + virtual bool create(); public: virtual void main_loop(); }; @@ -579,6 +647,17 @@ void TAggiorna_listini::main_loop() } } +bool TAggiorna_listini::create() +{ + //controlla che solo il producer AGA possa usare questo programma + const int oem = ini_get_int(CONFIG_OEM, "MAIN", "OEM", -1); + if (oem != 0) + { + error_box(TR("Programma non autorizzato!")); + return false; + } + return TSkeleton_application::create(); +} int ve2700(int argc, char* argv[]) { diff --git a/ve/ve2700b.uml b/ve/ve2700b.uml index f9d6b3100..c7e241ce9 100755 --- a/ve/ve2700b.uml +++ b/ve/ve2700b.uml @@ -176,19 +176,13 @@ PAGE "Riga listino figlio" -1 -1 78 22 STRING F_CATVEN 2 BEGIN PROMPT 1 1 "Cat. ven. " - FLAGS "U" - KEY 1 - USE CVE - INPUT CODTAB F_CATVEN - DISPLAY "Cat." CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CATVEN CODTAB + FLAGS "UD" END STRING F_CODLIS 3 BEGIN PROMPT 1 2 "Listino " - FLAGS "U" + FLAGS "UD" END NUMBER F_RICARICO 4 @@ -199,7 +193,7 @@ END STRING F_DESLIS 50 BEGIN PROMPT 18 2 "" - FLAGS "" + FLAGS "D" END ENDPAGE