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

View File

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