From 1e9640d67717464ed5af7bb322da98ad5af15253 Mon Sep 17 00:00:00 2001 From: alex <alex@c028cbd2-c16b-5b4b-a496-9718f37d4682> Date: Thu, 26 Feb 2009 23:32:16 +0000 Subject: [PATCH] Patch level : 10.0 250 Files correlati : ve0.exe Ricompilazione Demo : [ ] Commento : Selezione multipla articoli, spese, etc sui documenti. Se aggiunge una riga vuota sul documento e si clicca sul numero di fianco e' possibili fare una selezione multipla che poi viene riportata sul documento (Rif. CRPA) git-svn-id: svn://10.65.10.50/trunk@18365 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/velib06.cpp | 25 ++++++++++++++-- ve/velib06a.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 94 insertions(+), 8 deletions(-) diff --git a/ve/velib06.cpp b/ve/velib06.cpp index bfd3cef41..d71940f35 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -1162,8 +1162,8 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga) if (close_filter) filter << ')'; browse.set_filter(filter); } - m->set_handler(DLG_USER, link_handler); } + m->set_handler(DLG_USER, link_handler); // Quasi qualsiasi cosa analitica va bene const bool ca_active = _ges_ca && !(riga.is_descrizione() || riga.is_omaggio() || riga.is_sconto()); @@ -1460,8 +1460,6 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key ) { m.update_giacenza(); set_curr_um(rdoc.get(RDOC_UMQTA)); - const bool on = rdoc.get(RDOC_DACODNUM).not_empty(); - ss.sheet_mask().enable(DLG_USER, on); } if (rdoc.get(RDOC_CODART).empty() && rdoc.get(RDOC_DESCR).empty()) @@ -3596,6 +3594,23 @@ void TDocumento_mask::save_father_rows() } +static bool conf_num_handler(TMask_field& f, KEY key) +{ + if (key == K_TAB && f.to_check(key, true)) + { + TMask & m = f.mask(); + + __codnum = f.get(); + + TCursor * cur = m.efield(F_TIPODOC).browse()->cursor(); + TCursor * descur = m.efield(F_DESTIPODOC).browse()->cursor(); + + cur->set_filterfunction(tip_filter); + descur->set_filterfunction(tip_filter); + } + return true; +} + bool TDocumento_mask::confirm_handler( TMask_field& f, KEY key ) { bool ok = true; @@ -3622,8 +3637,11 @@ bool TDocumento_mask::confirm_handler( TMask_field& f, KEY key ) if (!ok) { + TString saved_codnum = __codnum; + m.set(F_CODNUM, codnum); m.enable(F_CODNUM, codnum.blank()); + m.set_handler(F_CODNUM, ::conf_num_handler); m.enable(F_DESNUM, codnum.blank()); m.set(F_TIPODOC, tipodoc); m.enable(F_TIPODOC, tipodoc.blank()); @@ -3634,6 +3652,7 @@ bool TDocumento_mask::confirm_handler( TMask_field& f, KEY key ) codnum = m.get(F_CODNUM); tipodoc = m.get(F_TIPODOC); } + __codnum = saved_codnum; } ok = codnum.full() && tipodoc.full(); diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index acd6c75ed..45bae40b7 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -2411,12 +2411,79 @@ bool link_handler( TMask_field& f, KEY key ) { if (key == K_SPACE) { - const TSheet_field & sf = *f.mask().get_sheet(); + TSheet_field & sf = *f.mask().get_sheet(); const TDocumento_mask & m = (const TDocumento_mask & )sf.mask(); - const TDocumento & d = m.doc(); - const int nrow = sf.selected() + 1; - const TRiga_documento & r = d[nrow]; - r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC"); + TDocumento & d = (TDocumento &) m.doc(); + int row = sf.selected(); + const TRiga_documento & r = d[row + 1]; + const TMask & row_mask = f.mask(); + + if (r.linked()) + r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC"); + else + if (!row_mask.is_running() && row_mask.id2pos(FR_CODART) >= 0) + { + TBrowse * brw = row_mask.efield(FR_CODART).browse(); + + if (row_mask.get(FR_CODART).empty() && brw) + { + TCursor& cur = *brw->cursor(); + TToken_string siblings; + + TToken_string head(brw->head()); + head.insert("@1|", 0); + TToken_string items(brw->items()); + items.insert(" |", 0); + + cur = 0L; + siblings.add(FR_CODART); + + TBrowse_sheet sht(&cur, items, "Selezione Multipla", head, 0, row_mask.efield(FR_CODART), siblings); + + if (sht.run() == K_ENTER && sht.one_checked()) + { + const int items_selected = sht.checked(); + const long totit = cur.items(); + if (items_selected * d.physical_rows() < 950) + { + int processed = 0L; + TToken_string out_id(brw->get_output_fields()); + TToken_string out_fnames(brw->get_output_field_names()); + const TString4 tipo(row_mask.get(FR_TIPORIGA)); + + cur.freeze(TRUE); + for (cur = 0L; cur.pos() < totit; ++cur) + if (sht.checked(cur.pos())) + { + if (++processed < items_selected) + sf.insert(row, false); // call notify ? + d.insert_row(row + 1); + d[row + 1].put(RDOC_TIPORIGA, tipo); + TToken_string & shrow = sf.row(row); + shrow.add(tipo, sf.cid2index(FR_TIPORIGA)); + shrow.add("", sf.cid2index(FR_CHECKED)); + + TMask & m = sf.sheet_row_mask(row); + + m.set(FR_TIPORIGA, tipo); + out_fnames.restart(); + for (short id = out_id.get_int(0); id > 0; id = out_id.get_int()) + { + const TString16 fn(out_fnames.get()); + const TFieldref fr(fn, 0); + m.set(id, fr.read(cur.curr())); + shrow.add(m.get(id), sf.cid2index(id)); + } + sf.check_row(row, 0x2); + d[row + 1].autosave(sf); + row++; + } + cur.freeze(FALSE); + sf.force_update(); + } + } + } + } } return true; }