From 1be4579e67183e726f7f833dd1ac1a2336638449 Mon Sep 17 00:00:00 2001 From: Mattia Tollari Date: Tue, 23 Jul 2019 16:04:34 +0200 Subject: [PATCH] Patch level : 12.0 no-patch Files correlati : ve2.exe ve2400.uml Commento : Aggiunta gestione conai negli articoli Implemented #56 --- src/ve/ve2400.cpp | 97 ++++++++++++++++++++++++++++++++--- src/ve/ve2400.h | 16 ++++-- src/ve/ve2400.uml | 124 +++------------------------------------------ src/ve/ve2400e.uml | 2 +- src/ve/ve2400f.uml | 55 ++++++++++++++++++++ 5 files changed, 163 insertions(+), 131 deletions(-) create mode 100644 src/ve/ve2400f.uml diff --git a/src/ve/ve2400.cpp b/src/ve/ve2400.cpp index 05b51015b..ee01a7135 100755 --- a/src/ve/ve2400.cpp +++ b/src/ve/ve2400.cpp @@ -9,8 +9,9 @@ #include #include #include +#include "conart.h" - const char * get_token(TSheet_field & s, int r, int dlg) +const char * get_token(TSheet_field & s, int r, int dlg) { TString & tmp = get_tmp_string(50); TToken_string & row = s.row(r); @@ -141,7 +142,9 @@ protected: virtual void on_firm_change(); bool search_on_file(const char * key, int file, int nkey, const char * field); virtual bool protected_record(TRectype&); - + + void fill_conai(const TString& codart, TSheet_field& fld_con) const; + int write_conai(const TMask& m) const; virtual int read(TMask& m); void load_um(TMask& m); virtual bool remove(); @@ -1987,8 +1990,79 @@ bool TAnagrafica_magazzino::protected_record(TRectype& rec) return TRUE; else return search_on_file(art, LF_RMOVMAG, 2, "CODART"); -} - +} + +void TAnagrafica_magazzino::fill_conai(const TString& codart, TSheet_field& fld_con) const +{ + // Distruggo e nascondo lo sheet + fld_con.destroy(); + fld_con.hide(); + + TArticolo_conai ac(codart); + auto mcon = ac.get_map(); + for(auto i = mcon.begin(); i != mcon.end(); ++i) + { + const TString cat = i->first; + for(auto j = i->second.begin(); j != i->second.end(); ++j) + { + TToken_string& row = fld_con.row(-1); + row.add(cat); + row.add(j->first); + row.add(j->second); + } + } + + // Lo rimostro + fld_con.show(); +} + +int TAnagrafica_magazzino::write_conai(const TMask& m) const +{ + int ok = NOERR; + // Prima di tutto svuoto i campi del conai sull'articolo + TLocalisamfile anamag(LF_ANAMAG); + anamag.put(ANAMAG_CODART, m.get(F_CODART)); + if(anamag.read() == NOERR) + { + anamag.put(ANAMAG_CONAISC, ""); + anamag.put(ANAMAG_CONACC, ""); + anamag.put(ANAMAG_CONALL, ""); + anamag.put(ANAMAG_CONCAR, ""); + anamag.put(ANAMAG_CONLEG, ""); + anamag.put(ANAMAG_CONPLA, ""); + anamag.put(ANAMAG_CONVET, ""); + ok |= anamag.rewrite(); + } + + // Adesso svuoto i record presenti in CONART + TLocalisamfile conart(LF_CONART); + TRelation rel_conart(LF_CONART); + TRectype filter_conart(LF_CONART); + filter_conart.put(ANAMAG_CODART, m.get(F_CODART)); + + TCursor cur_conart(&rel_conart, "", 1, &filter_conart, &filter_conart); + while(cur_conart.items() > 0) + { + ok |= conart.remove(cur_conart.curr()); + } + + // Infine salvo i nuovi dati in conart + + TSheet_field& sheet_conai = m.sfield(F_SHEETCON); + FOR_EACH_SHEET_ROW(sheet_conai, num_riga, row) + { + conart.zero(); + conart.put(CONART_CODART, m.get(F_CODART)); + conart.put(CONART_NRIGA, num_riga +1); + conart.put(CONART_CATEGORIA, row->get(cid2index(FS_CAT_CONAI))); + conart.put(CONART_SOTTOCAT, row->get(cid2index(FS_SCAT_CONAI))); + conart.put(CONART_PESO, row->get(cid2index(FS_PES_CONAI))); + ok |= conart.write(); + } + + return ok; +} + bool TAnagrafica_magazzino::user_create() { open_files(LF_TAB, LF_TABCOM, LF_ANAMAG, LF_MAG, LF_STOMAG, @@ -2042,6 +2116,10 @@ int TAnagrafica_magazzino::read(TMask& m) fld_giac.sort(cmp_rows); ((TMask_anamag&) m).giacs() = fld_giac.rows_array(); + + // Lettura sheet CONAI + TSheet_field &fld_con = m.sfield(F_SHEETCON); + fill_conai(m.get(F_CODART), fld_con); return err; } @@ -2073,7 +2151,7 @@ bool TAnagrafica_magazzino::remove() TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura TLocalisamfile distinte(LF_DIST); distinte.put("CODDIST", m.get(F_CODART)); - int err = distinte.read();// esiste la distinta ? + const int err = distinte.read();// esiste la distinta ? switch(err) { case _iskeynotfound : @@ -2096,6 +2174,8 @@ int TAnagrafica_magazzino::write(const TMask& m) { TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura err = f.record()->write(FALSE); + // Salvo il conai + err |= write_conai(m); } return err; } @@ -2176,12 +2256,15 @@ int TAnagrafica_magazzino::rewrite(const TMask& m) fld_giac.autoload(*get_relation()); fld_giac.sort(cmp_rows); } + int err =TRelation_application::rewrite(m); if (err == NOERR) { - TSheet_field& f= m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura - err|=f.record()->write(TRUE); + TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura + err |= f.record()->write(TRUE); + // Salvo il conai + err |= write_conai(m); } ((TMask_anamag &)m).ricalcola_giacenze(); return err; diff --git a/src/ve/ve2400.h b/src/ve/ve2400.h index 0284fdbee..2257d9c0f 100755 --- a/src/ve/ve2400.h +++ b/src/ve/ve2400.h @@ -112,10 +112,11 @@ #define F_DESCRALT 200 #define F_SHEETUM 201 -#define F_SHEETDESLIN 202 -#define F_SHEETCOD 203 -#define F_SHEETGIAC 204 -#define F_SHEETSTOMAG 205 +#define F_SHEETCON 202 +#define F_SHEETDESLIN 203 +#define F_SHEETCOD 204 +#define F_SHEETGIAC 205 +#define F_SHEETSTOMAG 206 #define F_STOULTCOS1 210 #define F_STOULTCOS2 211 #define F_STOCOSTOSTD 212 @@ -240,6 +241,11 @@ #define FS_PREZZO 103 #define FS_PREZZO_LORDO 104 +// definizioni per l'archivio del calcolo del CONAI +#define FS_CAT_CONAI 101 +#define FS_SCAT_CONAI 102 +#define FS_PES_CONAI 103 + // definizioni per l'archivio descrizioni in lingua estera #define FS_CODLIN 101 #define FS_DESCR 102 @@ -255,7 +261,7 @@ #define FS_TIPOCF 108 #define FS_CODCF 109 #define FS_RAGCF 110 -#define FS_DESCRC 111 +#define FS_DESCRC 111 // definizioni per l'archivio giacenze #include "ve2400d.h" diff --git a/src/ve/ve2400.uml b/src/ve/ve2400.uml index 657bd9196..273ea6b8b 100755 --- a/src/ve/ve2400.uml +++ b/src/ve/ve2400.uml @@ -605,126 +605,13 @@ BEGIN FLAGS "R" END -TEXT DLG_NULL +SPREADSHEET F_SHEETCON 78 8 BEGIN - PROMPT 1 14 "Sottocategorie" + PROMPT 0 13 "" + ITEM "Categoria@20" + ITEM "Sottocategoria@20" + ITEM "Peso@20" END - -STRING F_SCAACC 4 -BEGIN - PROMPT 1 15 "Acciaio " - FIELD CONAISC[1,4] - USE &SCC SELECT CODTAB[1,2]=="AC" - INPUT CODTAB F_SCAACC - DISPLAY "Categoria" CODTAB[1,2] - DISPLAY "Sottocategoria" CODTAB[3,4] - DISPLAY "Descrizione@50" S0 - MESSAGE EMPTY CLEAR,F_CONACC - MESSAGE ENABLE,F_CONACC - OUTPUT F_SCAACC CODTAB -END - -STRING F_SCAALL 4 -BEGIN - PROMPT 27 15 "Alluminio " - FIELD CONAISC[5,8] - USE &SCC SELECT CODTAB[1,2]=="AL" - INPUT CODTAB F_SCAALL - COPY DISPLAY F_SCAACC - OUTPUT F_SCAALL CODTAB - MESSAGE EMPTY CLEAR,F_CONALL - MESSAGE ENABLE,F_CONALL -END - -STRING F_SCACAR 4 -BEGIN - PROMPT 54 15 "Carta " - FIELD CONAISC[9,12] - USE &SCC SELECT CODTAB[1,2]=="CA" - INPUT CODTAB F_SCACAR - COPY DISPLAY F_SCAACC - OUTPUT F_SCACAR CODTAB - MESSAGE EMPTY CLEAR,F_CONCAR - MESSAGE ENABLE,F_CONCAR -END - -STRING F_SCAPLA 4 -BEGIN - PROMPT 1 16 "Plastica " - FIELD CONAISC[13,16] - USE &SCC SELECT CODTAB[1,2]=="PL" - INPUT CODTAB F_SCAPLA - COPY DISPLAY F_SCAACC - OUTPUT F_SCAPLA CODTAB - MESSAGE EMPTY CLEAR,F_CONPLA - MESSAGE ENABLE,F_CONPLA -END - -STRING F_SCALEG 4 -BEGIN - PROMPT 27 16 "Legno " - FIELD CONAISC[17,20] - USE &SCC SELECT CODTAB[1,2]=="LE" - INPUT CODTAB F_SCALEG - COPY DISPLAY F_SCAACC - OUTPUT F_SCALEG CODTAB - MESSAGE EMPTY CLEAR,F_CONLEG - MESSAGE ENABLE,F_CONLEG -END - -STRING F_SCAVET 4 -BEGIN - PROMPT 54 16 "Vetro " - FIELD CONAISC[21,24] - USE &SCC SELECT CODTAB[1,2]=="VE" - INPUT CODTAB F_SCAVET - COPY DISPLAY F_SCAACC - OUTPUT F_SCAVET CODTAB - MESSAGE EMPTY CLEAR,F_CONVET - MESSAGE ENABLE,F_CONVET -END - -TEXT DLG_NULL -BEGIN - PROMPT 1 17 "Pesi (Kg)" -END - -NUMBER F_CONACC 15 5 -BEGIN - PROMPT 1 18 "Acciaio " - FIELD CONACC -END - -NUMBER F_CONALL 15 5 -BEGIN - PROMPT 27 18 "Alluminio " - FIELD CONALL -END - -NUMBER F_CONCAR 15 5 -BEGIN - PROMPT 54 18 "Carta " - FIELD CONCAR -END - -NUMBER F_CONPLA 15 5 -BEGIN - PROMPT 1 19 "Plastica " - FIELD CONPLA -END - -NUMBER F_CONLEG 15 5 -BEGIN - PROMPT 27 19 "Legno " - FIELD CONLEG -END - -NUMBER F_CONVET 15 5 -BEGIN - PROMPT 54 19 "Vetro " - FIELD CONVET -END - ENDPAGE @@ -1675,5 +1562,6 @@ ENDMASK #include "ve2400c.uml" #include "ve2400b.uml" #include "ve2400a.uml" +#include "ve2400f.uml" #include "ve2400d.uml" #include "ve2400e.uml" diff --git a/src/ve/ve2400e.uml b/src/ve/ve2400e.uml index 89c44bcf4..dbd07fcaf 100755 --- a/src/ve/ve2400e.uml +++ b/src/ve/ve2400e.uml @@ -23,8 +23,8 @@ PAGE "Storico giacenze" -1 -1 80 23 STRING F_STOTIPORIGA 1 BEGIN - FLAGS "D" PROMPT 2 100 "Tipo riga" + FLAGS "D" END diff --git a/src/ve/ve2400f.uml b/src/ve/ve2400f.uml new file mode 100644 index 000000000..585e8ca31 --- /dev/null +++ b/src/ve/ve2400f.uml @@ -0,0 +1,55 @@ +// SHEET 3 (CONAI) DI VE2400 + +PAGE "Pagina CONAI" 5 5 75 15 + +LIST FS_CAT_CONAI 12 +BEGIN + PROMPT 3 2 "Codice categoria " + ITEM "|" + ITEM "AC|Acciaio" + ITEM "AL|Alluminio" + ITEM "CA|Carta" + ITEM "LE|Legno" + ITEM "PL|Plastica" + ITEM "VE|Vetro" +END + +STRING FS_SCAT_CONAI 2 +BEGIN + PROMPT 2 4 "Sottocategoria " + USE &SCC + INPUT CODTAB[1,2] FS_CAT_CONAI + INPUT CODTAB[3,4] FS_SCAT_CONAI + DISPLAY "Categoria" CODTAB[1,2] + DISPLAY "Sottocategoria" CODTAB[3,4] + DISPLAY "Descrizione@50" S0 + OUTPUT FS_CAT_CONAI CODTAB[1,2] + OUTPUT FS_SCAT_CONAI CODTAB[3,4] + CHECKTYPE REQUIRED +END + +NUMBER FS_PES_CONAI 15 5 +BEGIN + PROMPT 2 6 "Peso in Kg " + CHECKTYPE REQUIRED +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -33 -1 "Elimina" + MESSAGE EXIT,K_DEL +END + +ENDPAGE + +ENDMASK \ No newline at end of file