Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : Modifiche varie git-svn-id: svn://10.65.10.50/trunk@17789 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ae33d8dd2a
commit
940a12138b
187
lv/lv0600.cpp
187
lv/lv0600.cpp
@ -1,187 +0,0 @@
|
|||||||
#include "../ve/ve0100.h"
|
|
||||||
#include "../ve/veini.h"
|
|
||||||
#include "../ve/veuml.h"
|
|
||||||
|
|
||||||
#include "lv0.h"
|
|
||||||
#include "lvlib.h"
|
|
||||||
#include "lvcondv.h"
|
|
||||||
#include "lvrcondv.h"
|
|
||||||
|
|
||||||
//definizione della maschera di inserimento
|
|
||||||
class TGestione_bolle_msk : public TDocumento_mask
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
static bool lv_bolla_handler(TMask_field& f, KEY k);
|
|
||||||
public:
|
|
||||||
virtual void user_set_handler( int fieldid, int index);
|
|
||||||
TGestione_bolle_msk(const char* tipodoc):TDocumento_mask(tipodoc) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ok && k == K_TAB && f.focusdirty())
|
|
||||||
{
|
|
||||||
TMask& msk = f.mask();
|
|
||||||
|
|
||||||
TDocumento_mask& dmsk = (TDocumento_mask&)msk;
|
|
||||||
TDocumento& doc = dmsk.doc();
|
|
||||||
|
|
||||||
static long stcodcf = 0, stcodcont = 0;
|
|
||||||
|
|
||||||
TSheet_field& sheet = dmsk.sfield(F_SHEET);
|
|
||||||
int nrighe = sheet.items();
|
|
||||||
|
|
||||||
const long codcf = msk.get_long(F_CODCF);
|
|
||||||
const int indsped = msk.get_int(F_CODINDSP);
|
|
||||||
TDate datadoc = msk.get_date(F_DATADOC);
|
|
||||||
if (!datadoc.ok())
|
|
||||||
datadoc = TODAY;
|
|
||||||
const int anno = datadoc.year();
|
|
||||||
|
|
||||||
if (codcf <= 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
const long codcont = lv_find_contract(codcf,indsped,datadoc);
|
|
||||||
|
|
||||||
if (stcodcf == codcf && stcodcont == codcont && nrighe > 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (codcont == 0)
|
|
||||||
return error_box(TR("Non ci sono contratti in essere alla data indicata"));
|
|
||||||
|
|
||||||
dmsk.mask2doc();
|
|
||||||
|
|
||||||
stcodcf = codcf;
|
|
||||||
stcodcont = codcont;
|
|
||||||
|
|
||||||
//elimino tutte le righe del documento
|
|
||||||
doc.destroy_rows();
|
|
||||||
|
|
||||||
//tipo riga
|
|
||||||
const TString4 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);
|
|
||||||
//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
|
|
||||||
|
|
||||||
//instanzio un recordset sulle righe del contratto considerato
|
|
||||||
TISAM_recordset rcont("USE LVRCONDV\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
||||||
rcont.set_var("#CODCF",codcf);
|
|
||||||
rcont.set_var("#CODCONT",codcont);
|
|
||||||
|
|
||||||
//per ogni riga estraggo l'articolo, il relativo prezzo e l'eventaule sconto da applicare,
|
|
||||||
//...riportati in bolla solo se necessario
|
|
||||||
for (bool ok = rcont.move_first(); ok; ok = rcont.move_next())
|
|
||||||
{
|
|
||||||
//creo una nuova riga documento
|
|
||||||
TRiga_documento& rdoc = doc.new_row(tprig);
|
|
||||||
|
|
||||||
//recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet
|
|
||||||
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
|
|
||||||
//instanzio una cache sulla tabella del magazzino
|
|
||||||
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
|
|
||||||
|
|
||||||
rdoc.put(RDOC_CODART,codart);
|
|
||||||
rdoc.put(RDOC_CODARTMAG,codart);
|
|
||||||
rdoc.put(RDOC_CHECKED,'X');
|
|
||||||
rdoc.put(RDOC_DESCR,anamag.get(ANAMAG_DESCR));
|
|
||||||
rdoc.put(RDOC_UMQTA,rcont.get(LVRCONDV_UM).as_string());
|
|
||||||
rdoc.put(RDOC_CAUSMAG,rcont.get(LVRCONDV_CAUSLAV).as_string());
|
|
||||||
|
|
||||||
//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;
|
|
||||||
//controllo da dove devo prendere il 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dmsk.doc2mask(false);
|
|
||||||
|
|
||||||
FOR_EACH_MASK_FIELD(dmsk, i, f)
|
|
||||||
{
|
|
||||||
if (f->has_check())
|
|
||||||
f->check(STARTING_CHECK);
|
|
||||||
if (f->is_edit())
|
|
||||||
f->on_hit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TGestione_bolle_msk::user_set_handler( int fieldid, int index)
|
|
||||||
{
|
|
||||||
if (index == 4101)
|
|
||||||
set_field_handler(fieldid, lv_bolla_handler);
|
|
||||||
else
|
|
||||||
TDocumento_mask::user_set_handler(fieldid, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Definizione della classe dell'applicazione motore
|
|
||||||
class TGestione_bolle_app : public TMotore_application
|
|
||||||
{
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual TMask* get_mask( int mode );
|
|
||||||
public:
|
|
||||||
TGestione_bolle_app() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
inline TGestione_bolle_app& gbapp() { return (TGestione_bolle_app &) main_app(); };
|
|
||||||
|
|
||||||
TMask* TGestione_bolle_app::get_mask( int mode )
|
|
||||||
{
|
|
||||||
if (mode == MODE_INS || mode == MODE_MOD)
|
|
||||||
{
|
|
||||||
TString4 tipodoc;
|
|
||||||
if (mode == MODE_MOD)
|
|
||||||
tipodoc = get_relation()->curr().get(DOC_TIPODOC); // Lo prendo dalla relazione (Gelai)
|
|
||||||
else
|
|
||||||
tipodoc = TMotore_application::get_mask(MODE_QUERY)->get(F_TIPODOC);
|
|
||||||
if (_doc_masks.objptr(tipodoc) == NULL)
|
|
||||||
{
|
|
||||||
TGestione_bolle_msk* m = new TGestione_bolle_msk(tipodoc);
|
|
||||||
_doc_masks.add(tipodoc, m);
|
|
||||||
const TTipo_documento& tdoc = m->doc().tipo();
|
|
||||||
const TString_array& handlers = tdoc.handlers();
|
|
||||||
FOR_EACH_ARRAY_ROW(handlers, i, row)
|
|
||||||
{
|
|
||||||
m->user_set_handler( row->get_int( 0 ), row->get_int( 1 ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TMotore_application::get_mask(mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
int lv0600( int argc, char* argv[])
|
|
||||||
{
|
|
||||||
TGestione_bolle_app a;
|
|
||||||
|
|
||||||
a.run( argc, argv, TR("Documenti di Trasporto"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
173
lv/lv2300a.uml
173
lv/lv2300a.uml
@ -1,173 +0,0 @@
|
|||||||
#include "lv2300a.h"
|
|
||||||
|
|
||||||
TOOLBAR "topbar" 0 0 0 2
|
|
||||||
#include "printbar.h"
|
|
||||||
ENDPAGE
|
|
||||||
|
|
||||||
PAGE "Stampa Giri" -1 -1 40 5
|
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 76 3
|
|
||||||
BEGIN
|
|
||||||
PROMPT 1 1 "@bParametri Data"
|
|
||||||
END
|
|
||||||
|
|
||||||
DATE F_DATA_FROM
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 2 "Dal "
|
|
||||||
FIELD #FROM_DATA
|
|
||||||
GROUP 1
|
|
||||||
CHECKTYPE REQUIRED
|
|
||||||
FLAGS "A"
|
|
||||||
END
|
|
||||||
|
|
||||||
DATE F_DATA_TO
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 2 "Al "
|
|
||||||
FIELD #TO_DATA
|
|
||||||
FLAGS "A"
|
|
||||||
GROUP 2
|
|
||||||
CHECKTYPE REQUIRED
|
|
||||||
VALITATE DATE_CMP_FUNC >= F_DATA_FROM
|
|
||||||
WARNING "La data finale deve essere successiva a quella iniziale"
|
|
||||||
END
|
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 76 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 1 4 "@bParametri Itinerario"
|
|
||||||
END
|
|
||||||
|
|
||||||
NUMBER F_CODITI_FROM 3
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 5 "Da Itinerario"
|
|
||||||
FLAGS "UZ"
|
|
||||||
USE &ITI
|
|
||||||
INPUT CODTAB F_CODITI_FROM
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_CODITI_FROM CODTAB
|
|
||||||
OUTPUT F_DESITI_FROM S0
|
|
||||||
CHECKTYPE SEARCH
|
|
||||||
FIELD #FROM_CODITI
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESITI_FROM 50
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 5 ""
|
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
NUMBER F_CODITI_TO 3
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 6 "A Itinerario "
|
|
||||||
FLAGS "UZ"
|
|
||||||
USE &ITI
|
|
||||||
INPUT CODTAB F_CODITI_TO
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_CODITI_TO CODTAB
|
|
||||||
OUTPUT F_DESITI_TO S0
|
|
||||||
CHECKTYPE SEARCH
|
|
||||||
FIELD #TO_CODITI
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESITI_TO 50
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 6 ""
|
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 76 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 1 8 "@bParametri Autista"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_CODAUT_FROM 6
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 9 "Da Autista "
|
|
||||||
FLAGS "U"
|
|
||||||
USE &AUT
|
|
||||||
INPUT CODTAB F_CODAUT_FROM
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_CODAUT_FROM CODTAB
|
|
||||||
OUTPUT F_DESAUT_FROM S0
|
|
||||||
CHECKTYPE SEARCH
|
|
||||||
FIELD #FROM_CODAUT
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESAUT_FROM 50
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 9 ""
|
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_CODAUT_TO 6
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 10 "Ad Autista "
|
|
||||||
FLAGS "U"
|
|
||||||
USE &AUT
|
|
||||||
INPUT CODTAB F_CODAUT_TO
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_CODAUT_TO CODTAB
|
|
||||||
OUTPUT F_DESAUT_TO S0
|
|
||||||
CHECKTYPE SEARCH
|
|
||||||
FIELD #TO_CODAUT
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESAUT_TO 50
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 10 ""
|
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 76 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 1 12 "@bParametri Cliente"
|
|
||||||
END
|
|
||||||
|
|
||||||
NUMBER F_CODCF_FROM 6
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 13 "Da Cliente "
|
|
||||||
FLAGS "U"
|
|
||||||
USE LF_CLIFO KEY 1
|
|
||||||
INPUT TIPOCF "C"
|
|
||||||
INPUT CODCF F_CODCF_FROM
|
|
||||||
DISPLAY "Codice " CODCF
|
|
||||||
DISPLAY "Ragione sociale@50" RAGSOC
|
|
||||||
OUTPUT F_CODCF_FROM CODCF
|
|
||||||
OUTPUT F_RAGSOCCF_FROM RAGSOC
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
FIELD #FROM_CODCF
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_RAGSOCCF_FROM 50
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 13 ""
|
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
NUMBER F_CODCF_TO 6
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 14 "A Cliente "
|
|
||||||
FLAGS "U"
|
|
||||||
USE LF_CLIFO KEY 1
|
|
||||||
INPUT TIPOCF "C"
|
|
||||||
INPUT CODCF F_CODCF_TO
|
|
||||||
DISPLAY "Codice " CODCF
|
|
||||||
DISPLAY "Ragione sociale@50" RAGSOC
|
|
||||||
OUTPUT F_CODCF_TO CODCF
|
|
||||||
OUTPUT F_RAGSOCCF_TO RAGSOC
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
FIELD #TO_CODCF
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_RAGSOCCF_TO 50
|
|
||||||
BEGIN
|
|
||||||
PROMPT 25 14 ""
|
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
ENDPAGE
|
|
||||||
|
|
||||||
ENDMASK
|
|
@ -41,6 +41,7 @@ class TGenera_documenti_app : public TSkeleton_application
|
|||||||
{
|
{
|
||||||
TGenera_documenti_mask* _msk;
|
TGenera_documenti_mask* _msk;
|
||||||
TAssoc_array _quantita;
|
TAssoc_array _quantita;
|
||||||
|
TAssoc_array _quantita_ritirata;
|
||||||
TConfig* _configlv;
|
TConfig* _configlv;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -202,6 +203,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
|
|||||||
const bool arrot = rcont.get_bool(LVRCONDV_ARROT);
|
const bool arrot = rcont.get_bool(LVRCONDV_ARROT);
|
||||||
const real conguaglio = rcont.get_real(LVRCONDV_QTACONG);
|
const real conguaglio = rcont.get_real(LVRCONDV_QTACONG);
|
||||||
const real& qta = *(real*)_quantita.objptr(codart);
|
const real& qta = *(real*)_quantita.objptr(codart);
|
||||||
|
const real& qta1 = *(real*)_quantita_ritirata.objptr(codart);
|
||||||
|
|
||||||
//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);
|
||||||
@ -225,9 +227,10 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
|
|||||||
|
|
||||||
//scrivo le quantità
|
//scrivo le quantità
|
||||||
rdoc.put(RDOC_QTA, quantita_arr);
|
rdoc.put(RDOC_QTA, quantita_arr);
|
||||||
rdoc.put(RDOC_QTAGG1, quantita_noarr);
|
rdoc.put(RDOC_QTAGG1, qta1);
|
||||||
rdoc.put(RDOC_QTAGG2, conguaglio);
|
rdoc.put(RDOC_QTAGG2, conguaglio);
|
||||||
rdoc.put(RDOC_QTAGG3, quantita_arr);
|
rdoc.put(RDOC_QTAGG3, quantita_arr);
|
||||||
|
rdoc.put(RDOC_QTAGG4, quantita_noarr);
|
||||||
rdoc.put(RDOC_GENERATA, true);
|
rdoc.put(RDOC_GENERATA, true);
|
||||||
|
|
||||||
//aggiorno il conguaglio sulla riga del contratto
|
//aggiorno il conguaglio sulla riga del contratto
|
||||||
@ -539,6 +542,7 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r
|
|||||||
TArticolo& art = rdoc.articolo();
|
TArticolo& art = rdoc.articolo();
|
||||||
//leggo se esiste già nel TAssoc_array
|
//leggo se esiste già nel TAssoc_array
|
||||||
real *qta = (real*)_quantita.objptr(codart);
|
real *qta = (real*)_quantita.objptr(codart);
|
||||||
|
real *qta1 = (real*)_quantita_ritirata.objptr(codart);
|
||||||
//se non esiste
|
//se non esiste
|
||||||
if (qta == NULL)
|
if (qta == NULL)
|
||||||
{
|
{
|
||||||
@ -546,6 +550,12 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r
|
|||||||
qta = new real;
|
qta = new real;
|
||||||
_quantita.add(codart,qta);
|
_quantita.add(codart,qta);
|
||||||
}
|
}
|
||||||
|
if (qta1 == NULL)
|
||||||
|
{
|
||||||
|
//per ora memorizzo zero
|
||||||
|
qta1 = new real;
|
||||||
|
_quantita_ritirata.add(codart,qta1);
|
||||||
|
}
|
||||||
//aggiorno la quantità convertendola all'unità di misura di base, aggiungendola o sottraendola
|
//aggiorno la quantità convertendola all'unità di misura di base, aggiungendola o sottraendola
|
||||||
//...se si tratta di un ritiro o di un anticipo rispettivamente; nel caso della scansione delle
|
//...se si tratta di un ritiro o di un anticipo rispettivamente; nel caso della scansione delle
|
||||||
//...bolle di consegna modificate a mano (caso 'B'), devo modificare la quantità da consegnare
|
//...bolle di consegna modificate a mano (caso 'B'), devo modificare la quantità da consegnare
|
||||||
@ -553,7 +563,8 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r
|
|||||||
switch (ritoant)
|
switch (ritoant)
|
||||||
{
|
{
|
||||||
case 'R':
|
case 'R':
|
||||||
*qta += art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA));
|
*qta += art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA));
|
||||||
|
*qta1 += art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA));
|
||||||
break;
|
break;
|
||||||
case 'A':
|
case 'A':
|
||||||
*qta -= art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA));
|
*qta -= art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA));
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "../ve/ve0100.h"
|
#include "../ve/ve0100.h"
|
||||||
#include "../ve/veini.h"
|
#include "../ve/veini.h"
|
||||||
#include "../ve/veuml.h"
|
#include "../ve/veuml.h"
|
||||||
|
#include "../ve/verig.h"
|
||||||
|
|
||||||
#include "lv0.h"
|
#include "lv0.h"
|
||||||
#include "lvlib.h"
|
#include "lvlib.h"
|
||||||
@ -12,11 +13,61 @@ class TGestione_bolle_msk : public TDocumento_mask
|
|||||||
{
|
{
|
||||||
protected:
|
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);
|
||||||
public:
|
public:
|
||||||
virtual void user_set_handler( int fieldid, int index);
|
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) {}
|
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))
|
||||||
|
{
|
||||||
|
TMask& msk = f.mask();
|
||||||
|
real ritirato = msk.get_real(FR_QTA);
|
||||||
|
if (msk.field(FR_QTAGG1).empty())
|
||||||
|
{
|
||||||
|
//recupero la maschera di testata e leggo i dati di interesse per recuperare...
|
||||||
|
//...i dati dalla riga contratto
|
||||||
|
const long codcf = atol(f.evaluate_field(-F_CODCF));
|
||||||
|
const int indsped = atoi(f.evaluate_field(-F_CODINDSP));
|
||||||
|
TDate datadoc = f.evaluate_field(-F_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);
|
||||||
|
//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);
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
arr = ppconf.integer() - arr;
|
||||||
|
ritirato += arr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msk.set(FR_QTAGG1,ritirato);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
|
bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
@ -94,6 +145,10 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
|
|||||||
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
|
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
|
||||||
//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);
|
||||||
@ -134,6 +189,16 @@ 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)
|
||||||
|
{
|
||||||
|
switch(index)
|
||||||
|
{
|
||||||
|
case 4101: set_field_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( int fieldid, int index)
|
||||||
{
|
{
|
||||||
if (index == 4101)
|
if (index == 4101)
|
||||||
|
@ -5,5 +5,6 @@ CAMPICALC=
|
|||||||
IMPONIBILE=IMPNS
|
IMPONIBILE=IMPNS
|
||||||
|
|
||||||
[HANDLERS]
|
[HANDLERS]
|
||||||
NHANDLER = 0
|
NHANDLER = 1
|
||||||
|
1 = 112|4101
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user