Gestione causali richiamate e sulle righe
git-svn-id: svn://10.65.10.50/trunk@4623 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
0244542f38
commit
95aab17153
148
mg/mg1100.cpp
148
mg/mg1100.cpp
@ -24,14 +24,18 @@ class TMask_movmag: public TMask {
|
||||
real price_quant;
|
||||
bool price_proposed;
|
||||
real proposed_price(TString codart, real quant);
|
||||
static bool handle_righeprezzo(TMask_field &f, KEY k); // handler delle righe
|
||||
bool update_rigamov (int r, const char * old_codcaus);
|
||||
|
||||
static bool notify_righe(TSheet_field & fld_righe, int item, KEY k); // notify delle righe di sheet
|
||||
static bool handle_righe(TMask_field &f, KEY k); // handler delle righe
|
||||
static bool handle_righeprezzo(TMask_field &f, KEY k); // handler del prezzo delle righe
|
||||
static bool handle_codcaus(TMask_field &fld, KEY k); // handler della causale
|
||||
static bool handle_datacomp(TMask_field &, KEY); // handler del numero di registrazione
|
||||
static bool handle_datacomp(TMask_field &, KEY k); // handler del numero di registrazione
|
||||
static void sheetrighe_put(TSheet_field &fld_righe, int item);
|
||||
static void sheetrighe_get(TSheet_field &fld_righe, int item);
|
||||
public:
|
||||
TMask_movmag(TMag_livelli *l_m,TMov_mag * m_m);
|
||||
virtual ~TMask_movmag();
|
||||
static void sheetrighe_put(TSheet_field &fld_righe, int item);
|
||||
static void sheetrighe_get(TSheet_field &fld_righe, int item);
|
||||
};
|
||||
|
||||
|
||||
@ -40,21 +44,22 @@ static void sheetrighe_get(TSheet_field &fld_righe, int item);
|
||||
TMask_movmag::TMask_movmag(TMag_livelli *l_m,TMov_mag * m_m)
|
||||
: TMask("mg1100")
|
||||
{
|
||||
|
||||
// oggetti dell'applicazione
|
||||
livelli_giac= l_m;
|
||||
mov_mag = m_m;
|
||||
|
||||
// setta handler e notify
|
||||
TSheet_field & ss=(TSheet_field &)field(F_RIGHE);
|
||||
set_handler(F_DATACOMP, handle_datacomp);
|
||||
set_handler(F_CODCAUS, handle_codcaus);
|
||||
((TSheet_field &)field(F_RIGHE)).sheet_mask().field(F_PREZZO).set_handler(handle_righeprezzo);
|
||||
((TSheet_field &)field(F_RIGHE)).sheet_mask().field(F_CODART).set_handler(handle_righeprezzo);
|
||||
((TSheet_field &)field(F_RIGHE)).sheet_mask().field(F_QUANT).set_handler(handle_righeprezzo);
|
||||
((TSheet_field &)field(F_RIGHE)).set_userget(sheetrighe_get);
|
||||
((TSheet_field &)field(F_RIGHE)).set_userput(sheetrighe_put);
|
||||
((TSheet_field &)field(F_RIGHE)).set_lines_record(m_m->body());
|
||||
|
||||
ss.sheet_mask().field(F_PREZZO).set_handler(handle_righeprezzo);
|
||||
ss.sheet_mask().field(F_CODART).set_handler(handle_righeprezzo);
|
||||
ss.sheet_mask().field(F_QUANT).set_handler(handle_righeprezzo);
|
||||
ss.set_notify(notify_righe);
|
||||
ss.set_handler(handle_righe);
|
||||
ss.set_userget(sheetrighe_get);
|
||||
ss.set_userput(sheetrighe_put);
|
||||
ss.set_lines_record(m_m->body());
|
||||
// setta i campi della maschera
|
||||
// per la pagina giacenze
|
||||
TSheet_field &fld_righe= (TSheet_field &)field(F_RIGHE);
|
||||
@ -137,6 +142,55 @@ void TMask_movmag::sheetrighe_put(TSheet_field &fld_righe, int item)
|
||||
}
|
||||
}
|
||||
|
||||
bool TMask_movmag::handle_righe(TMask_field &f, KEY k)
|
||||
{
|
||||
if (k == K_ENTER) {
|
||||
TSheet_field & ss=(TSheet_field & )f;
|
||||
for (int i=0; i< ss.items(); i++)
|
||||
{
|
||||
if (ss.cell(i,ss.cid2index(F_CODMAG))==NULL || *ss.cell(i,ss.cid2index(F_CODMAG)) ==' ')
|
||||
{
|
||||
f.error_box("Nella riga %d manca l'indicazione del magazzino ",i+1);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_movmag::notify_righe(TSheet_field & ss, int r, KEY key)
|
||||
{
|
||||
static TString16 old_codcaus;
|
||||
if ( key == K_DEL ) // Cancellazione
|
||||
{
|
||||
if (*ss.cell(r,ss.cid2index( F_AUTOMATICA))=='A')
|
||||
return FALSE; // can't remove auto lines directly
|
||||
if (r < ss.items()-1)
|
||||
{
|
||||
if (*ss.cell(r+1,ss.cid2index( F_AUTOMATICA))=='A')
|
||||
{
|
||||
ss.destroy(r + 1);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (key == K_INS) { // Inserimento
|
||||
{
|
||||
if (*ss.cell(r,ss.cid2index( F_AUTOMATICA))=='A')
|
||||
return FALSE; // cannot insert between a row and its generated one
|
||||
}
|
||||
|
||||
} else if (key == K_SPACE) {
|
||||
old_codcaus=ss.sheet_mask().get(F_CAUSRIG);
|
||||
if (old_codcaus.blank())
|
||||
old_codcaus=ss.mask().get(F_CODCAUS);
|
||||
|
||||
} else if (key == K_ENTER) {
|
||||
TMask_movmag &m=(TMask_movmag &)ss.mask();
|
||||
if (m.update_rigamov(r,old_codcaus))
|
||||
ss.select(r+1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TMask_movmag::handle_righeprezzo(TMask_field &f, KEY k)
|
||||
@ -161,6 +215,48 @@ bool TMask_movmag::handle_righeprezzo(TMask_field &f, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_movmag::update_rigamov (int r, const char * old_codcaus)
|
||||
{
|
||||
TSheet_field & ss=(TSheet_field & )field(F_RIGHE);
|
||||
TCausale_magazzino cau_riga();
|
||||
|
||||
TString16 new_codcaus(ss.cell(r,ss.cid2index(F_CAUSRIG)));
|
||||
if (new_codcaus.blank())
|
||||
new_codcaus=get(F_CODCAUS);
|
||||
TCausale_magazzino oldcau(old_codcaus);
|
||||
TCausale_magazzino cau(new_codcaus);
|
||||
if (*cau.get_collegata()!='\0')
|
||||
{
|
||||
// deve esserci una riga collegata
|
||||
TString16 codmag,coddep;
|
||||
real prezzo(ss.cell(r,ss.cid2index(F_PREZZO)));
|
||||
if (r < ss.items()-1 && *ss.cell(r+1,ss.cid2index( F_AUTOMATICA)) == ' ')
|
||||
{
|
||||
// manca, la inserisco
|
||||
ss.insert(r+1);
|
||||
ss.row(r+1)=ss.row(r);
|
||||
} else {
|
||||
codmag=ss.cell(r+1,ss.cid2index(F_CODMAG));
|
||||
coddep=ss.cell(r+1,ss.cid2index(F_CODDEP));
|
||||
ss.row(r+1)=ss.row(r);
|
||||
}
|
||||
ss.row(r+1).add(prezzo.string(),ss.cid2index(F_PREZZO));
|
||||
ss.row(r+1).add(codmag,ss.cid2index(F_CODMAG));
|
||||
ss.row(r+1).add(coddep,ss.cid2index(F_CODDEP));
|
||||
ss.row(r+1).add(cau.get_collegata(),ss.cid2index(F_CAUSRIG));
|
||||
ss.row(r+1).add("A",ss.cid2index(F_AUTOMATICA));
|
||||
ss.check_row(r+1);
|
||||
ss.force_update(r+1);
|
||||
return TRUE;
|
||||
} else
|
||||
if (*oldcau.get_collegata()!='\0')
|
||||
{
|
||||
// scollega la vecchia riga
|
||||
ss.destroy(r + 1);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
real TMask_movmag::proposed_price(TString codart,
|
||||
real quant)
|
||||
{
|
||||
@ -192,6 +288,28 @@ real TMask_movmag::proposed_price(TString codart,
|
||||
|
||||
bool TMask_movmag::handle_codcaus(TMask_field &fld, KEY k)
|
||||
{
|
||||
static TString16 old_codcaus;
|
||||
|
||||
if (k == K_TAB && fld.focusdirty() && old_codcaus!="") {
|
||||
// aggiorna le righe di sheet
|
||||
TMask_movmag &m=(TMask_movmag &)fld.mask();
|
||||
TSheet_field & ss=(TSheet_field & )m.field(F_RIGHE);
|
||||
bool added_some;
|
||||
|
||||
for (int i=0; i< ss.items(); i++)
|
||||
{
|
||||
if (*ss.cell(i,ss.cid2index(F_CAUSRIG)) ==' ')
|
||||
// la riga dipende dalla causale movimento
|
||||
added_some &=(m.update_rigamov(i,old_codcaus));
|
||||
}
|
||||
if (added_some)
|
||||
{
|
||||
ss.dirty();
|
||||
ss.set_focus();
|
||||
}
|
||||
}
|
||||
if (k == K_TAB)
|
||||
old_codcaus=fld.get();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -214,12 +332,6 @@ bool TMask_movmag::handle_datacomp(TMask_field &fld, KEY k)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class TApp_movmag: public TRelation_application {
|
||||
TMask_movmag *_msk; // maschera principale
|
||||
TMag_livelli * _livelli_giac;// oggetto handler per i livelli di giacenza
|
||||
|
@ -407,9 +407,10 @@ END
|
||||
SPREADSHEET F_RIGHE 77 12
|
||||
BEGIN
|
||||
PROMPT 2 7 "RIGHE DI MOVIMENTO"
|
||||
FLAGS "A"
|
||||
FLAGS "AI"
|
||||
USE LF_RMOVMAG KEY NRIG
|
||||
INPUT NUMREG F_NUMREG
|
||||
ITEM " @1F"
|
||||
ITEM "CodArt"
|
||||
ITEM "CodMag"
|
||||
ITEM "CodDep"
|
||||
@ -420,6 +421,7 @@ BEGIN
|
||||
ITEM "UM"
|
||||
ITEM "Qta"
|
||||
ITEM "Prezzo"
|
||||
ITEM "Causale"
|
||||
END
|
||||
|
||||
|
||||
|
26
mg/mg1100a.h
26
mg/mg1100a.h
@ -1,15 +1,16 @@
|
||||
// colonne visibili dello Sheet
|
||||
#define F_CODART 101
|
||||
#define F_CODMAG 102
|
||||
#define F_CODDEP 103
|
||||
#define F_LIV1 104
|
||||
#define F_LIV2 105
|
||||
#define F_LIV3 106
|
||||
#define F_LIV4 107
|
||||
#define F_UM 108
|
||||
#define F_QUANT 109
|
||||
#define F_PREZZO 110
|
||||
|
||||
#define F_AUTOMATICA 101
|
||||
#define F_CODART 102
|
||||
#define F_CODMAG 103
|
||||
#define F_CODDEP 104
|
||||
#define F_LIV1 105
|
||||
#define F_LIV2 106
|
||||
#define F_LIV3 107
|
||||
#define F_LIV4 108
|
||||
#define F_UM 109
|
||||
#define F_QUANT 110
|
||||
#define F_PREZZO 111
|
||||
#define F_CAUSRIG 112
|
||||
|
||||
// colonne non visibili dello Sheet
|
||||
#define F_DESMAG 150
|
||||
@ -18,4 +19,7 @@
|
||||
#define H_GESTGIA 153
|
||||
#define F_UBICAZD 154
|
||||
#define F_DESART 155
|
||||
#define F_VALORE 156
|
||||
#define F_DESCAUSRIG 157
|
||||
|
||||
#define G_NOAUTO 1
|
@ -20,6 +20,15 @@ ENDPAGE
|
||||
|
||||
PAGE "Righe movimenti" -1 -1 80 23
|
||||
|
||||
STRING F_AUTOMATICA 1
|
||||
BEGIN
|
||||
PROMPT 2 1 "Tipo riga "
|
||||
FIELD AUTOMATICA
|
||||
FLAGS "DG"
|
||||
MESSAGE EMPTY ENABLE,G_NOAUTO@
|
||||
MESSAGE DISABLE,G_NOAUTO@
|
||||
END
|
||||
|
||||
STRING F_CODART 20
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice articolo "
|
||||
@ -32,12 +41,12 @@ BEGIN
|
||||
OUTPUT F_CODART CODART
|
||||
OUTPUT F_DESART DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
STRING F_DESART 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Descrizione "
|
||||
FIELD CODART
|
||||
FLAGS "U"
|
||||
USE LF_ANAMAG KEY 2
|
||||
INPUT DESCR F_DESART
|
||||
@ -45,6 +54,7 @@ BEGIN
|
||||
DISPLAY "Codice@20" CODART
|
||||
COPY OUTPUT F_CODART
|
||||
CHECKTYPE NORMAL
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
STRING F_CODMAG 3
|
||||
@ -139,8 +149,8 @@ BEGIN
|
||||
DISPLAY "Descr.@30" S0
|
||||
OUTPUT F_LIV1 CODTAB[2,12]
|
||||
CHECKTYPE NORMAL
|
||||
|
||||
MESSAGE EMPTY RESET,F_LIV2|RESET,F_LIV3|RESET,F_LIV4
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
STRING F_LIV2 6
|
||||
@ -155,6 +165,7 @@ BEGIN
|
||||
OUTPUT F_LIV2 CODTAB[2,12]
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE EMPTY RESET,F_LIV3|RESET,F_LIV4
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
STRING F_LIV3 6
|
||||
@ -167,6 +178,7 @@ BEGIN
|
||||
COPY DISPLAY F_LIV1
|
||||
OUTPUT F_LIV3 CODTAB[2,12]
|
||||
CHECKTYPE NORMAL
|
||||
GROUP G_NOAUTO
|
||||
MESSAGE EMPTY RESET,F_LIV4
|
||||
END
|
||||
|
||||
@ -180,6 +192,7 @@ BEGIN
|
||||
COPY DISPLAY F_LIV1
|
||||
OUTPUT F_LIV4 CODTAB[2,12]
|
||||
CHECKTYPE NORMAL
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
STRING F_UM 2
|
||||
@ -195,6 +208,7 @@ BEGIN
|
||||
OUTPUT F_CODART CODART
|
||||
OUTPUT F_UM UM
|
||||
CHECKTYPE REQUIRED
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
NUMBER F_QUANT 15 5
|
||||
@ -203,6 +217,7 @@ BEGIN
|
||||
FIELD QUANT
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Indicare la quantità"
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
NUMBER F_PREZZO 18 3
|
||||
@ -213,6 +228,34 @@ BEGIN
|
||||
WARNING "Indicare il prezzo"
|
||||
END
|
||||
|
||||
NUMBER F_VALORE 15 5
|
||||
BEGIN
|
||||
FLAGS "D"
|
||||
PROMPT 42 14 "Valore totale "
|
||||
NUM_CALC #F_PREZZO*#F_QUANT
|
||||
END
|
||||
|
||||
STRINGA F_CAUSRIG 4
|
||||
BEGIN
|
||||
PROMPT 2 15 "Codice causale "
|
||||
FIELD CAUS
|
||||
USE CAU
|
||||
FLAGS "U"
|
||||
INPUT CODTAB F_CAUSRIG
|
||||
DISPLAY "Codice " CODTAB
|
||||
DISPLAY "Descrizione@50 " S0
|
||||
OUTPUT F_CAUSRIG CODTAB
|
||||
OUTPUT F_DESCAUSRIG S0
|
||||
MESSAGE EMPTY RESET,F_DESCAUSRIG
|
||||
GROUP G_NOAUTO
|
||||
END
|
||||
|
||||
NUMBER F_DESCAUSRIG 50 30
|
||||
BEGIN
|
||||
FLAGS "D"
|
||||
PROMPT 42 15 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
Loading…
x
Reference in New Issue
Block a user