Patch level : 10.0 patch 250

Files correlati     : lv3, verig21.msk
Ricompilazione Demo : [ ]
Commento            :
Corretta maschera verig21 in modo da avere tutti i campi su una sola pagina e aggriunto il magazzino

Corretto caricamento dati magazzino e magazzino collegato; aggiunto handler CODMAG che evita il il controllo dei dati troppo presto


git-svn-id: svn://10.65.10.50/trunk@18398 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-03-02 16:08:37 +00:00
parent 3e930bf69c
commit d88f001e07
3 changed files with 512 additions and 60 deletions

View File

@ -35,6 +35,7 @@ protected:
static bool lv_consegnato_handler(TMask_field& f, KEY k);
static bool lv_codart_handler(TMask_field& f, KEY k);
static bool lv_causale_handler(TMask_field& f, KEY k);
static bool lv_codmag_handler(TMask_field& f, KEY k);
static bool ss_notify(TSheet_field& ss, int r, KEY key);
@ -72,6 +73,7 @@ protected:
long giac_in_mag(const TString& codart, bool odierna) const; //restituisce il valore salvato nel magazzino
public:
bool preset(const TDocumento& doc); //precarico le variabili globali della classe
bool reset(const TDocumento& doc); //svuota i TAssoc_array e carica cli e cont
bool load_row(const TRiga_documento& rdoc); //popola i TAssoc_array
real giac_att(TRiga_documento& rdoc, bool odierna); //restituisce le quantità attuali di dotazione
@ -124,8 +126,8 @@ long TGiac_per_cli::giac_in_mag(const TString& codart, bool odierna) const
return 0;
}
//RESET: metodo che distrugge i due TAssoc_array e carica la coppia cliente - contratto
bool TGiac_per_cli::reset(const TDocumento& doc)
//PRESET: metodo che carica la coppia cliente - contratto
bool TGiac_per_cli::preset(const TDocumento& doc)
{
//estraggo i dati di interesse dal documento
_clifo = doc.get_long(DOC_CODCF);
@ -133,6 +135,14 @@ bool TGiac_per_cli::reset(const TDocumento& doc)
_year = doc.get_date(DOC_DATADOC).year();
_indsped = doc.get_long(DOC_CODINDSP);
return true;
}
//RESET: metodo che distrugge i due TAssoc_array e carica la coppia cliente - contratto
bool TGiac_per_cli::reset(const TDocumento& doc)
{
preset(doc);
//distruggo i due TAssoc_array
_odierna.destroy();
_temporanea.destroy();
@ -254,6 +264,7 @@ int TGiac_per_cli::write_giac(const TMask& m)
//costruttore
TGiac_per_cli::TGiac_per_cli()
{
//estraggo i dati di interesse dal documento
_clifo = 0;
_cont = 0;
_year = 0;
@ -434,7 +445,12 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
return true;
}
else
{
doc.put(DOC_CODCF, codcf);
doc.put(DOC_DATADOC, datadoc);
doc.put(DOC_CODINDSP, indsped);
doc.put(DOC_CODCONT, codcont);
}
if (dmsk._stcodcf == codcf && dmsk._stcodcont == codcont && nrighe > 0)
return true;
@ -460,6 +476,11 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
rcont.set_var("#CODCF",codcf);
rcont.set_var("#CODCONT",codcont);
//leggo dalla configurazione i codici magazzino e deposito standard
TConfig* configlv = new TConfig(CONFIG_DITTA,"lv");
TString8 codmag;
codmag << configlv->get("CODMAG") << configlv->get("CODMAGC");
//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())
@ -488,6 +509,21 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
rdoc.put(RDOC_UMQTA,rcont.get(LVRCONDV_UM).as_string());
rdoc.put(RDOC_CODAGG1,causale);
rdoc.put(RDOC_CODIVA,anamag.get(ANAMAG_CODIVA));
rdoc.put(RDOC_CODMAG, codmag);
rdoc.put(RDOC_CODMAGC, codmag);
//gestione campi dotazione odierna e dotazione temporanea
TGiac_per_cli& giac = gbapp().giacenza();
giac.preset(doc);
real dotod = giac.giac_att(rdoc, true);
rdoc.put("DOTOD", dotod);
//scrivo la dotazione temporanea solo se esistono le date di dotazione temporanea e questa non è scaduta
if (rdoc.get_date("DADATATMP").ok() && rdoc.get_date("ADATATMP").ok() && rdoc.get_date("ADATATMP") <= doc.get_date(DOC_DATADOC))
{
real dotmp = giac.giac_att(rdoc, false);
rdoc.put("DOTMP", dotmp);
}
//elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino
const TString& sconto = rcont.get(LVRCONDV_SCONTPERC).as_string();
@ -690,8 +726,8 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k)
if (f.to_check(k, true))
{
TConfig* configlv = new TConfig(CONFIG_DITTA,"lv");
TString4 codmagdef = configlv->get("CODMAG");
TString4 coddepdef = configlv->get("CODMAGC"); //magazzino del circolante
TString4 codmagdef = configlv->get("CODMAG"); //magazzino
TString4 coddepdef = configlv->get("CODMAGC"); //magazzino del circolante (deposito)
//leggo la causale che ho scritto nella riga corrente dello sheet
TString4 causale = f.get();
@ -805,11 +841,13 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k)
if (cau.get_bool("B0"))
{
msk.field(FR_QTAGG1).enable(true);
if (codmagcoll.blank())
{
codmagcoll = codmagdef;
coddepcoll = coddepdef; //magazzino del circolante
}
if (codmagcoll.blank())
codmagcoll = codmagdef;
if (coddepcoll.blank())
coddepcoll = coddepdef; //magazzino del circolante
msk.field(FR_CODMAGC).set(codmagcoll);
msk.field(FR_CODDEPC).set(coddepcoll);
}
@ -825,12 +863,13 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k)
{
msk.field(FR_QTA).enable(true);
if (codmag.blank())
{
codmag = codmagdef;
codmag = codmagdef;
if (coddep.blank())
coddep = coddepdef;
}
msk.field(FR_CODMAG).set(codmag);
msk.field(FR_CODDEP).set( coddep);
msk.field(FR_CODDEP).set(coddep);
}
else
{
@ -843,6 +882,27 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k)
return true;
}
bool TGestione_bolle_msk::lv_codmag_handler(TMask_field& f, KEY k)
{
bool ok = true;
if (f.to_check(k,true))
{
TMask& msk = f.mask();
const TString& causale = msk.get(FR_CAULAV);
if (causale.full())
{
switch(f.dlg())
{
case FR_CODMAG: ok = codmag_handler( f, k ); break;
default: break;
}
}
}
return ok;
}
//metodo che setta gli handler sui campi di riga
void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index)
{
@ -852,6 +912,7 @@ void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index
case 4102: rm.set_handler(field, lv_consegnato_handler); break;
case 4103: rm.set_handler(field, lv_codart_handler); break;
case 4104: rm.set_handler(field, lv_causale_handler); break;
case 4105: rm.set_handler(field, lv_codmag_handler); break;
default : TDocumento_mask::user_set_row_handler(rm, field, index); break;
}
}
@ -974,6 +1035,7 @@ void TGestione_bolle_app::init_insert_mode(TMask &m)
_giac.reset(d);
mask.reset_var_mask();
mask.first_focus(F_CODCF, false);
return TMotore_application::init_insert_mode(m);
}

View File

@ -5,8 +5,9 @@ CAMPICALC=
IMPONIBILE=IMPNS
[HANDLERS]
NHANDLER = 4
NHANDLER = 5
1 = 133|4101
2 = 112|4102
3 = 105|4103
4 = 152|4104
4 = 152|4104
5 = 103|4105

View File

@ -1,50 +1,439 @@
#include "..\ve\verigdef.h"
#include "..\ve\verig.h"
#define FULL_SCREEN
// else
// #define MASK_WIDTH 60
// #define MASK_HEIGHT 14
//
#define MASK_TITLE1 "Merce Lavanderie"
#define PAGE_2
TOOLBAR "" 0 0 0 2
DEFINE_FIELD(CODMAG)
DEFINE_FIELD(DESMAG)
DEFINE_FIELD(CODDEP)
DEFINE_FIELD(DESDEP)
DEFINE_FIELD(CODART)
DEFINE_FIELD(DESCRART)
DEFINE_FIELD(UMQTA)
DEFINE_FIELD(QTA)
F_POS(QTA, 21, 10,"Consegnato " )
F_DEC(QTA, 0)
DEFINE_FIELD(PREZZO)
F_POS(PREZZO, 47, 9,"Prezzo " )
DEFINE_FIELD(SCONTO)
F_POS(SCONTO, 2, 11,"Sconto " )
DEFINE_FIELD(PERCPROV)
F_POS(PERCPROV, 42, 11,"Provvigione" )
DEFINE_FIELD(CODIVA)
DEFINE_FIELD(DESIVA)
DEFINE_FIELD(CAULAV)
F_POS(CAULAV, 47, 10,"Caus. Lavanderie " )
DEFINE_FIELD(RITIRO)
F_POS(RITIRO, 21, 9,"Ritirato " )
F_DEC(RITIRO, 0)
DEFINE_FIELD(NCOLLI)
DEFINE_FIELD(PNETTO)
DEFINE_FIELD(TARA)
DEFINE_FIELD(DESCRCAUS)
DEFINE_FIELD(CODMAGC)
F_POS(CODMAGC, 2, 15,"Mag.Coll. ")
DEFINE_FIELD(DESMAGC)
F_POS(DESMAGC, 22, 15,"")
DEFINE_FIELD(CODDEPC)
F_POS(CODDEPC, 2, 16,"Deposito ")
DEFINE_FIELD(DESDEPC)
F_POS(DESDEPC, 22, 16,"")
#define USR_PAGE_1 "..\lv\lvrig21.inc"
BUTTON DLG_OK 10 2
BEGIN
PROMPT -14 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -24 -1 ""
END
#include "..\ve\verig.uml"
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -34 -1 "Elimina"
MESSAGE EXIT,K_DEL
END
BUTTON DLG_USER 10 2
BEGIN
PROMPT -44 -1 "~Collega"
PICTURE BMP_LINK
END
ENDPAGE
PAGE "Merce Lavanderia" 0 2 0 0
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 1 ""
END
LIST FR_TIPORIGA 2 50
BEGIN
PROMPT 2 2 "Tipo riga "
FIELD TIPORIGA
END
GROUPBOX DLG_NULL 78 10
BEGIN
PROMPT 1 4 "@bArticolo"
END
STRING FR_CODART 8
BEGIN
PROMPT 2 5 "Articolo "
USE LF_ANAMAG KEY 1
INPUT CODART FR_CODART
DISPLAY "Codice@6" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_CODART CODART
OUTPUT FR_DESCRART DESCR
FLAGS "U"
FIELD CODART
ADD RUN ve2 -3
END
STRING FR_DESCRART 50
BEGIN
PROMPT 25 5 ""
USE LF_ANAMAG KEY 2
INPUT DESCR FR_DESCRART
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@8" CODART
COPY OUTPUT FR_CODART
ADD RUN ve2 -3
FIELD DESCR
END
STRING FR_HDESC 50
BEGIN
PROMPT 100 100 "Descrizione "
USE LF_ANAMAG KEY 2
INPUT DESCR FR_HDESC
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT FR_CODART
END
STRING FR_CODARTMAG 20
BEGIN
PROMPT 200 7 ""
FIELD CODARTMAG
FLAGS "G"
END
BOOLEAN FR_CHECKED
BEGIN
PROMPT 51 50 ""
FIELD CHECKED
FLAGS "D"
END
STRING FR_LIV1 15
BEGIN
PROMPT 2 6 "Liv.Gia. "
FLAGS "U"
USE GCG
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "1"
INPUT CODTAB[2,] FR_LIV1
DISPLAY "Livello@20" 500@->S0
DISPLAY "Gruppo@15" CODTAB[2,]
DISPLAY "Descrizione@30" S0
OUTPUT FR_LIV1 CODTAB[2,]
MESSAGE EMPTY RESET,FR_LIV2|RESET,FR_LIV3|RESET,FR_LIV4
MESSAGE ENABLE,FR_LIV2
CHECKTYPE NORMAL
END
STRING FR_LIV2 15
BEGIN
PROMPT 28 6 ""
FLAGS "U"
USE GCG
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "2"
INPUT CODTAB[2,] FR_LIV2
DISPLAY "Livello@20" 500@->S0
DISPLAY "Gruppo@15" CODTAB[2,]
DISPLAY "Descrizione@30" S0
OUTPUT FR_LIV2 CODTAB[2,]
MESSAGE EMPTY RESET,FR_LIV3|RESET,FR_LIV4
MESSAGE ENABLE,FR_LIV3
CHECKTYPE NORMAL
END
STRING FR_LIV3 15
BEGIN
PROMPT 45 6 ""
FLAGS "U"
USE GCG
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "3"
INPUT CODTAB[2,] FR_LIV3
DISPLAY "Livello@20" 500@->S0
DISPLAY "Gruppo@15" CODTAB[2,]
DISPLAY "Descrizione@30" S0
OUTPUT FR_LIV3 CODTAB[2,]
MESSAGE EMPTY RESET,FR_LIV4
MESSAGE ENABLE,FR_LIV4
CHECKTYPE NORMAL
END
STRING FR_LIV4 15
BEGIN
PROMPT 62 6 ""
FLAGS "U"
USE GCG
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "4"
INPUT CODTAB[2,] FR_LIV4
DISPLAY "Livello@20" 500@->S0
DISPLAY "Gruppo@15" CODTAB[2,]
DISPLAY "Descrizione@30" S0
OUTPUT FR_LIV4 CODTAB[2,]
CHECKTYPE NORMAL
END
STRING FR_UMQTA 3
BEGIN
PROMPT 2 7 "U.M. "
USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM
INPUT CODART FR_CODARTMAG SE
INPUT UM FR_UMQTA
DISPLAY "Codice@20" UM
DISPLAY "Descrizione@50" %UMS->S0
OUTPUT FR_UMQTA UM
FIELD UMQTA
FLAG "U"
CHECKTYPE REQUIRED
END
STRING FR_UMQTA2 2
BEGIN
PROMPT 2 7 "U.M. "
USE %UMS
INPUT CODTAB FR_UMQTA2
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_UMQTA2 CODTAB
FIELD UMQTA
FLAG "U"
CHECKTYPE NORMAL
END
CURRENCY FR_PREZZO 15
BEGIN
PROMPT 13 7 "Prezzo "
FLAGS "U"
FIELD PREZZO
END
STRING FR_SCONTO 15
BEGIN
PROMPT 38 7 "Sconto "
FIELD SCONTO
END
NUMBER FR_PERCPROV 5 2
BEGIN
PROMPT 65 7 "Provv. "
FIELD PERCPROV
END
STRING FR_CAULAV 3
BEGIN
PROMPT 2 8 "Cau. Lav. "
USE &LVCAU
INPUT CODTAB FR_CAULAV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CAULAV CODTAB
OUTPUT FR_FLCONS B1
OUTPUT FR_FLRIT B0
CHECKTYPE REQUIRED
FLAGS "U"
FIELD CODAGG1
END
BOOLEAN FR_FLCONS
BEGIN
PROMPT 50 50 "Flag consegnato"
FLAGS "HG"
END
BOOLEAN FR_FLRIT
BEGIN
PROMPT 50 50 "Flag ritirato"
FLAGS "HG"
END
NUMBER FR_RITIRO 6 0
BEGIN
PROMPT 20 8 "Ritirato "
FIELD QTAGG1
END
NUMBER FR_QTA 6 0
BEGIN
PROMPT 39 8 "Consegnato "
FIELD QTA
END
STRING FR_JOLLY1 6
BEGIN
PROMPT 2 9 "Dot. Od. "
FIELD DOTOD
FLAGS "R"
END
STRING FR_JOLLY2 6
BEGIN
PROMPT 20 9 "Dot. Tem. "
FIELD DOTMP
FLAGS "R"
END
DATE FR_JOLLY3
BEGIN
PROMPT 40 9 "Inizio "
FIELD DADATATMP
END
DATE FR_JOLLY4
BEGIN
PROMPT 60 9 "Fine "
FIELD ADATATMP
END
NUMBER FR_NCOLLI 7
BEGIN
PROMPT 2 10 "N. Colli "
FIELD NCOLLI
END
NUMBER FR_TARA 15 2
BEGIN
PROMPT 25 10 "Tara "
FIELD TARA
END
NUMBER FR_PNETTO 6 2
BEGIN
PROMPT 60 10 "Peso netto "
FIELD PNETTO
END
STRING FR_CODIVA 4
BEGIN
PROMPT 2 12 "IVA "
USE %IVA
INPUT CODTAB FR_CODIVA
DISPLAY "Codice@20" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODIVA CODTAB
OUTPUT FR_DESIVA S0
FLAGS "U"
VALIDATE ZEROFILL_FUNC 2
CHECKTYPE NORMAL
FIELD CODIVA
END
STRING FR_DESIVA 50
BEGIN
PROMPT 13 12 ""
USE %IVA KEY 2
INPUT S0 FR_DESIVA
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@20" CODTAB
OUTPUT FR_CODIVA CODTAB
OUTPUT FR_DESIVA S0
END
STRING FR_TIPODET 1
BEGIN
PROMPT 67 12 "Indetr. "
USE %DET
INPUT CODTAB FR_TIPODET
DISPLAY "Codice" CODTAB
DISPLAY "Tipo" I0
DISPLAY "Descrizione@50" S0
OUTPUT FR_TIPODET CODTAB
CHECKTYPE NORMAL
FLAGS "U"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 14 "@bMagazzino"
END
STRING FR_CODMAG 4
BEGIN
PROMPT 2 15 "Magazzino "
USE MAG SELECT CODTAB[4,5]==""
INPUT CODTAB FR_CODMAG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODMAG CODTAB
OUTPUT FR_DESMAG S0
WARNING "Magazzino assente"
FLAGS "U"
CHECKTYPE NORMAL
FIELD CODMAG[1,3]
END
STRING FR_DESMAG 50
BEGIN
PROMPT 26 15 ""
FLAGS "D"
END
STRING FR_CODDEP 4
BEGIN
PROMPT 2 16 "Deposito "
USE MAG SELECT (CODTAB[1,3]==#FR_CODMAG) && (CODTAB[4,5]!="")
INPUT CODTAB[1,3] FR_CODMAG
INPUT CODTAB[4,5] FR_CODDEP
DISPLAY "Codice mag." CODTAB[1,3]
DISPLAY "Codice dep." CODTAB[4,5]
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODMAG CODTAB[1,3]
OUTPUT FR_CODDEP CODTAB[4,5]
OUTPUT FR_DESDEP S0
MESSAGE DIRTY,FR_CODMAG|K_TAB,FR_CODMAG
CHECKTYPE NORMAL
WARNING "Deposito assente"
FLAGS "U"
FIELD CODMAG[4,5]
END
STRING FR_DESDEP 50
BEGIN
PROMPT 26 16 ""
FLAGS "D"
END
STRING FR_CODMAGC 4
BEGIN
PROMPT 2 17 "Magazzino Col. "
COPY USE FR_CODMAG
INPUT CODTAB FR_CODMAGC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODMAGC CODTAB
OUTPUT FR_DESMAGC S0
WARNING "Magazzino assente"
FLAGS "U"
CHECKTYPE NORMAL
FIELD CODMAGC[1,3]
END
STRING FR_DESMAGC 50
BEGIN
PROMPT 26 17 ""
FLAGS "D"
END
STRING FR_CODDEPC 4
BEGIN
PROMPT 2 18 "Deposito "
USE MAG SELECT (CODTAB[1,3]==#FR_CODMAGC) && (CODTAB[4,5]!="")
INPUT CODTAB[1,3] FR_CODMAGC
INPUT CODTAB[4,5] FR_CODDEPC
DISPLAY "Codice mag." CODTAB[1,3]
DISPLAY "Codice dep." CODTAB[4,5]
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODMAGC CODTAB[1,3]
OUTPUT FR_CODDEPC CODTAB[4,5]
OUTPUT FR_DESDEPC S0
MESSAGE DIRTY,FR_CODMAGC|K_TAB,FR_CODMAGC
CHECKTYPE NORMAL
WARNING "Deposito assente"
FLAGS "U"
FIELD CODMAGC[4,5]
END
STRING FR_DESDEPC 50
BEGIN
PROMPT 26 18 ""
FLAGS "D"
END
ENDPAGE
PAGE "Analitica" 0 2 0 0
GROUPBOX DLG_NULL 78 14
BEGIN
PROMPT 1 0 "Contabilita' analitica"
END
ENDPAGE
ENDMASK