diff --git a/ve/velib.h b/ve/velib.h index 919a59e7a..4bcf0d2d1 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -402,8 +402,7 @@ class TTipo_riga_documento : public TRectype // velib02 TToken_string _field_list; TToken_string _header; bool _select_clifo; - - + TArray _genconf; int _decrp, _incrp; protected: @@ -445,6 +444,7 @@ public: const TString& provv() const { return _field_provv;} const int incr_perc_prezzo() const { return _incrp;} const int decr_perc_prezzo() const { return _decrp;} + TToken_string * genconf(int i) const { return (TToken_string *) _genconf.objptr(i);} bool formfeed() const { return get_bool("B0"); } diff --git a/ve/velib02.cpp b/ve/velib02.cpp index bc349b8d1..d494f49ea 100755 --- a/ve/velib02.cpp +++ b/ve/velib02.cpp @@ -110,6 +110,12 @@ void TTipo_riga_documento::read_formule() _field_imposta = profile.get("IMPOSTA"); _incrp = profile.get_int("VARP+"); _decrp = profile.get_int("VARP-"); + for (int i = 0; i < 4; i++) + { + const TToken_string str(profile.get("LIVGEN", NULL, i)); + if (str.full()) + _genconf.add(str, i); + } add_formula_if_needed(profile, _imponibile, "IMPONIBILE", "IMPORTO(1)"); add_formula_if_needed(profile, _quant, "QUANT", "QUANT()"); diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index 9d0f6713d..0e1955e94 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -406,6 +406,10 @@ void TDocumento_mask::user_set_row_handler(TMask& rm, short field, int index) if (field == FR_CODART) rm.set_handler(field, distinta_link_handler); break; + case 8: + if (field >= FR_LIV1 && field <= FR_LIV4) + m.set_handler(field, gen_livelli_handler); + break; default: break; } @@ -2630,3 +2634,74 @@ bool distinta_link_handler(TMask_field& f, KEY key ) return codart_handler( f, key); } +bool gen_livelli_handler(TMask_field& f, KEY key ) +{ + if (key == K_F8 && f.get().blank()) + { + TMask& row_mask = f.mask(); + TSheet_field& sh = *row_mask.get_sheet(); + TDocumento_mask & m = (TDocumento_mask & )sh.mask(); + const TDocumento & d = m.doc(); + const int row = sh.selected() + 1; + const int livello = f.dlg() - FR_LIV1; + const TRiga_documento & r = d[row]; + TToken_string * str = r.tipo().genconf(livello); + if (str != NULL) + { + const TString codart = row_mask.get(FR_CODART); + + if (codart.full()) + { + TString code; + const TRectype & anamag = cache().get(LF_ANAMAG, codart); + const int items = str->items(); + + for (int i = 0; i < items; i++) + { + const TString & name = str->get(i); + if (name.starts_with("PROG")) + { + TTable lv(format("LV%1d", livello + 1)); + const int chars = atoi(name.after("PROG")); + + lv.put("CODTAB", code); + if (lv.read(_isequal) != NOERR) + { + lv.zero(); + lv.put("CODTAB", code); + lv.write(); + } + const int prog = lv.get_int("I0") + 1; + lv.put("I0", prog); + lv.rewrite(); + TString s; s << prog; s.lpad(chars, '0'); + code << s; + } + else + if (name.starts_with("33.")) + { + TFieldref fld(name.after("33."), LF_DOC); + + code << fld.read(d); + } + else + if (name.starts_with("34.")) + { + TFieldref fld(name.after("34."), LF_RIGHEDOC); + + code << fld.read(d); + } + else + if (name.starts_with("47.")) + { + TFieldref fld(name.after("47."), LF_ANAMAG); + + code << fld.read(anamag); + } + } + row_mask.set(f.dlg(), code, 0x3); + } + } + } + return true; +}