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:
augusto 1997-06-12 15:30:01 +00:00
parent 0244542f38
commit 95aab17153
4 changed files with 193 additions and 32 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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