From 95aab1715327a0bec4ef068b924fe0eafdac2644 Mon Sep 17 00:00:00 2001 From: augusto Date: Thu, 12 Jun 1997 15:30:01 +0000 Subject: [PATCH] Gestione causali richiamate e sulle righe git-svn-id: svn://10.65.10.50/trunk@4623 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- mg/mg1100.cpp | 148 +++++++++++++++++++++++++++++++++++++++++++------ mg/mg1100.uml | 4 +- mg/mg1100a.h | 26 +++++---- mg/mg1100a.uml | 47 +++++++++++++++- 4 files changed, 193 insertions(+), 32 deletions(-) diff --git a/mg/mg1100.cpp b/mg/mg1100.cpp index bd2a6d3dc..b6e4fbe27 100755 --- a/mg/mg1100.cpp +++ b/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 diff --git a/mg/mg1100.uml b/mg/mg1100.uml index b4f633b66..c3df78b7d 100755 --- a/mg/mg1100.uml +++ b/mg/mg1100.uml @@ -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 diff --git a/mg/mg1100a.h b/mg/mg1100a.h index 46e1d698b..c50441dd0 100755 --- a/mg/mg1100a.h +++ b/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 \ No newline at end of file diff --git a/mg/mg1100a.uml b/mg/mg1100a.uml index eef5bacfb..c8d8e8ebb 100755 --- a/mg/mg1100a.uml +++ b/mg/mg1100a.uml @@ -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