Patch level : 10.0

Files correlati     : lv3
Ricompilazione Demo : [ ]
Commento            :
Corretta gestione handler dei campi di riga


git-svn-id: svn://10.65.10.50/trunk@17800 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-12-04 10:18:45 +00:00
parent 4252eebd90
commit 0901a9aa32
2 changed files with 40 additions and 59 deletions

View File

@ -15,18 +15,17 @@ protected:
static bool lv_bolla_handler(TMask_field& f, KEY k);
static bool lv_qta_handler(TMask_field& f, KEY k);
public:
virtual void user_set_handler( int fieldid, int index);
virtual void user_set_row_handler(TMask& rm, int field, int index);
TGestione_bolle_msk(const char* tipodoc):TDocumento_mask(tipodoc) {}
virtual void user_set_handler( short fieldid, int index);
virtual void user_set_row_handler(TMask& rm, short field, int index);
TGestione_bolle_msk(const char* tipodoc) : TDocumento_mask(tipodoc) {}
};
bool TGestione_bolle_msk::lv_qta_handler(TMask_field& f, KEY k)
{
if (f.to_check(k, false))
if (f.to_check(k, false) && !f.empty())
{
TMask& msk = f.mask();
real ritirato = msk.get_real(FR_QTA);
if (msk.field(FR_QTAGG1).empty())
if (msk.field(FR_QTA).empty())
{
const int r = msk.get_sheet()->selected()+1;
TDocumento_mask& dmsk = (TDocumento_mask&) f.mask().get_sheet()->mask();
@ -40,34 +39,30 @@ bool TGestione_bolle_msk::lv_qta_handler(TMask_field& f, KEY k)
TDate datadoc = doc.get_date(DOC_DATADOC);
if (!datadoc.ok())
datadoc = TODAY;
const long codcont = lv_find_contract(codcf,indsped,datadoc);
//preparo la chiave per la tabella righe contratti
TToken_string keyrcont;
keyrcont.add(codcf);
keyrcont.add(codcont);
keyrcont.add(msk.get(FR_CODART));
//instanzio una cache sulla tabella delle righe contratti
const TRectype& rcont = cache().get(LF_LVRCONDV,keyrcont);
const TLaundry_contract cont(codcf, indsped, datadoc);
//leggo la riga del contratto per l'articolo corrente
const TRectype& rcont = cont.row(msk.get(FR_CODART));
//recupero i dati di interesse dalla riga del contratto
const bool arrot = rcont.get_bool(LVRCONDV_ARROT);
//instanzio una cache sulla tabella del magazzino
const TRectype& anamag = cache().get(LF_ANAMAG,msk.get(FR_CODART));
//recupero i dati di interesse dall'anagrafica di magazzino
const real ppconf = anamag.get_real(ANAMAG_PPCONF);
real ritirato = f.get();
if (arrot)
{
//calcolo di quanti pezzi sforo
long arr = ritirato.integer() % ppconf.integer();
//se sforo (arr > 0) allora calcolo quanti pezzi in più gli devo dare e aggiorno la quantità
if (arr > 0)
//instanzio una cache sulla tabella del magazzino
const TRectype& anamag = cache().get(LF_ANAMAG,msk.get(FR_CODART));
//recupero i dati di interesse dall'anagrafica di magazzino
const long ppconf = anamag.get_long(ANAMAG_PPCONF);
if (ppconf > 0)
{
arr = ppconf.integer() - arr;
ritirato += arr;
}
//calcolo di quanti pezzi sforo
const long arr = ritirato.integer() % ppconf;
//se sforo (arr > 0) allora calcolo quanti pezzi in più gli devo dare e aggiorno la quantità
if (arr > 0)
ritirato += ppconf - arr;
}
}
msk.set(FR_QTAGG1,ritirato);
msk.set(FR_QTA,ritirato);
}
}
return true;
@ -78,15 +73,14 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
bool ok = true;
switch(f.dlg())
{
case F_CODCF: ok = TDocumento_mask::clifo_handler( f, k ); break;
case F_DATADOC: ok = data_hndl( f, k ); break;
default: break;
case F_CODCF: ok = TDocumento_mask::clifo_handler( f, k ); break;
case F_DATADOC: ok = data_hndl( f, k ); break;
default: break;
}
if (ok && k == K_TAB && f.focusdirty())
{
TMask& msk = f.mask();
TDocumento_mask& dmsk = (TDocumento_mask&)msk;
TDocumento& doc = dmsk.doc();
@ -122,14 +116,10 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
doc.destroy_rows();
//tipo riga
const TString4 tprig = msk.get(F_LBTIPORIGA);
const TString& tprig = msk.get(F_LBTIPORIGA);
//preparo la chiave per la tabella contratti
TToken_string keycont;
keycont.add(codcf);
keycont.add(codcont);
//instanzio una cache sulla tabella dei contratti
const TRectype& tcont = cache().get(LF_LVCONDV,keycont);
const TLaundry_contract tcont(codcf, codcont);
//estraggo i dati di interesse dalla cache
const int tplis = tcont.get_int(LVCONDV_TIPOLIS); //tipo listino
const bool prinbo = tcont.get_bool(LVCONDV_STPRZBOL); //prezzo in bolla
@ -151,10 +141,6 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
//instanzio una cache sulla tabella del magazzino
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
TString descr = anamag.get(ANAMAG_DESCR);
TString um = rcont.get(LVRCONDV_UM).as_string();
TString cau = rcont.get(LVRCONDV_CAUSLAV).as_string();
rdoc.put(RDOC_CODART,codart);
rdoc.put(RDOC_CODARTMAG,codart);
rdoc.put(RDOC_CHECKED,'X');
@ -165,20 +151,15 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
//elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino
if (prinbo)
{
TString16 scontostr = "";
TString16 prezzostr = "";
real prezzo;
real sconto = rcont.get(LVRCONDV_SCONTPERC).as_real();
scontostr << sconto;
const TString& sconto = rcont.get(LVRCONDV_SCONTPERC).as_string();
rdoc.put(RDOC_SCONTO, sconto);
//controllo da dove devo prendere il prezzo
real prezzo;
if (tplis == 0)
prezzo = rcont.get(LVRCONDV_PREZZO).as_real();
else
{
prezzo = anamag.get_real(ANAMAG_COSTSTD);
}
prezzostr << prezzo;
rdoc.put(RDOC_PREZZO,prezzo);
rdoc.put(RDOC_PREZZO, prezzo);
}
}
dmsk.doc2mask(false);
@ -194,22 +175,22 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
return ok;
}
void TGestione_bolle_msk::user_set_row_handler(TMask& rm, int field, int index)
void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index)
{
switch(index)
{
case 4101: set_field_handler(field, lv_qta_handler); break;
case 4101: rm.set_handler(field, lv_qta_handler); break;
default : TDocumento_mask::user_set_row_handler(rm, field, index); break;
}
}
void TGestione_bolle_msk::user_set_handler( int fieldid, int index)
void TGestione_bolle_msk::user_set_handler( short fieldid, int index)
{
if (index == 4101)
set_field_handler(fieldid, lv_bolla_handler);
else
TDocumento_mask::user_set_handler(fieldid, index);
switch(index)
{
case 4101: set_field_handler(fieldid, lv_bolla_handler); break;
default : TDocumento_mask::user_set_handler(fieldid, index); break;
}
}
// Definizione della classe dell'applicazione motore

View File

@ -6,5 +6,5 @@ IMPONIBILE=IMPNS
[HANDLERS]
NHANDLER = 1
1 = 112|4101
1 = 133|4101