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:
alex 2009-02-26 23:32:16 +00:00
parent 57237d9de9
commit 1e9640d677
2 changed files with 94 additions and 8 deletions

View File

@ -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();

View File

@ -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;
}