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
This commit is contained in:
parent
57237d9de9
commit
1e9640d677
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user