diff --git a/MP-TAB/BasePage.cs b/MP-TAB/BasePage.cs
index b6f0a54b..bc62a3a1 100644
--- a/MP-TAB/BasePage.cs
+++ b/MP-TAB/BasePage.cs
@@ -54,9 +54,7 @@ namespace MoonProTablet
{
get
{
- bool answ = false;
- answ = DataLayerObj.isMaster(idxMacchina);
- return answ;
+ return DataLayerObj.isMaster(idxMacchina);
}
}
@@ -67,9 +65,7 @@ namespace MoonProTablet
{
get
{
- bool answ = false;
- answ = DataLayerObj.isMulti(idxMacchina);
- return answ;
+ return DataLayerObj.isMulti(idxMacchina);
}
}
@@ -80,9 +76,7 @@ namespace MoonProTablet
{
get
{
- bool answ = false;
- answ = DataLayerObj.isSlave(idxMacchina);
- return answ;
+ return DataLayerObj.isSlave(idxMacchina);
}
}
diff --git a/MP-TAB/WebUserControls/BaseUserControl.cs b/MP-TAB/WebUserControls/BaseUserControl.cs
index 611924b5..7d40dd73 100644
--- a/MP-TAB/WebUserControls/BaseUserControl.cs
+++ b/MP-TAB/WebUserControls/BaseUserControl.cs
@@ -7,14 +7,61 @@ using System.Web;
namespace MoonProTablet.WebUserControls
{
- public class BaseUserControl : System.Web.UI.UserControl //SteamWare.UserControl //
+ public class BaseUserControl : System.Web.UI.UserControl //SteamWare.UserControl //
{
- public string encodeAuthKey(object plainUserAuthKey)
+ #region Internal Fields
+
+ ///
+ /// classe MapoDB x uso locale
+ ///
+ internal MapoDb.MapoDb controllerMapo = new MapoDb.MapoDb();
+
+ ///
+ /// Oggetto datalayer specifico
+ ///
+ internal DataLayer DataLayerObj = new DataLayer();
+
+ #endregion Internal Fields
+
+ #region Internal Properties
+
+ ///
+ /// Verifica se la macchina MAIN sia MASTER
+ ///
+ internal bool isMaster
{
- string answ = "";
- answ = SteamCrypto.EncryptString(plainUserAuthKey.ToString(), memLayer.ML.CRS("cookieName"));
- return answ;
+ get
+ {
+ return DataLayerObj.isMaster(idxMacchina);
+ }
}
+
+ ///
+ /// Verifica se la macchina MAIN sia MULTI (da DatiMacchina / redis...)
+ ///
+ internal bool isMulti
+ {
+ get
+ {
+ return DataLayerObj.isMulti(idxMacchina);
+ }
+ }
+
+ ///
+ /// Verifica se la macchina MAIN sia SLAVE
+ ///
+ internal bool isSlave
+ {
+ get
+ {
+ return DataLayerObj.isSlave(idxMacchina);
+ }
+ }
+
+ #endregion Internal Properties
+
+ #region Public Properties
+
///
/// idx macchina selezionata
///
@@ -29,42 +76,142 @@ namespace MoonProTablet.WebUserControls
memLayer.ML.setSessionVal("IdxMacchina", value);
}
}
+
///
- /// Oggetto datalayer specifico
+ /// idxOdl corrente in sessione
///
- internal DataLayer DataLayerObj = new DataLayer();
- ///
- /// classe MapoDB x uso locale
- ///
- internal MapoDb.MapoDb controllerMapo = new MapoDb.MapoDb();
- ///
- /// effettua traduzione del lemma
- ///
- ///
- ///
- public string traduci(string lemma)
+ public int idxOdl
{
- return user_std.UtSn.Traduci(lemma);
+ get
+ {
+ return memLayer.ML.IntSessionObj("idxODL");
+ }
+ set
+ {
+ memLayer.ML.setSessionVal("idxODL", value);
+ }
}
+
///
- /// effettua traduzione del lemma
+ /// Sotto sistema (macchina) selezionato in sessione
///
- ///
- ///
- public string traduci(object _lemma)
+ public string subMaccSel
{
- _lemma = _lemma == null ? "" : _lemma;
- return user_std.UtSn.Traduci(_lemma.ToString());
+ get
+ {
+ return memLayer.ML.StringSessionObj("subMaccSel");
+ }
+ set
+ {
+ memLayer.ML.setSessionVal("subMaccSel", value);
+ }
}
+
///
- /// effettua traduzione in inglese del lemma
+ /// titolo pagina
///
- ///
- ///
- public string traduciEn(string lemma)
+ public string titolo
{
- return user_std.UtSn.TraduciEn(lemma);
+ get
+ {
+ return devicesAuthProxy.getPage(Request.Url);
+ }
}
+
+ ///
+ /// stringa UID univoca
+ ///
+ public string uid
+ {
+ get
+ {
+ return this.UniqueID.Replace("$", "_").Replace("-", "_");
+ }
+ }
+
+ #endregion Public Properties
+
+ #region Protected Methods
+
+ ///
+ /// conversione da tempo minuti centesimali a minuti/secondi
+ ///
+ ///
+ ///
+ protected TimeSpan minCent2Sec(decimal valore)
+ {
+ TimeSpan answ = new TimeSpan(0, 0, 1);
+ try
+ {
+ answ = new TimeSpan(0, Convert.ToInt32(valore), Convert.ToInt32((valore - Convert.ToInt32(valore)) * 60));
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ ///
+ /// conversione da tempo minuti/secondi a minuti centesimali
+ ///
+ ///
+ ///
+ protected decimal minSec2Cent(TimeSpan valore)
+ {
+ Decimal answ = 0;
+ try
+ {
+ answ = Math.Round((valore.Minutes + (decimal)valore.Seconds / 60), 3);
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ #endregion Protected Methods
+
+ #region Public Methods
+
+ public string encodeAuthKey(object plainUserAuthKey)
+ {
+ string answ = "";
+ answ = SteamCrypto.EncryptString(plainUserAuthKey.ToString(), memLayer.ML.CRS("cookieName"));
+ return answ;
+ }
+
+ ///
+ /// fomratta durata in minuti/ore/gg a seconda del totale...
+ ///
+ ///
+ ///
+ public string formatDurata(object min)
+ {
+ return utility.formatDurata(min);
+ }
+
+ ///
+ /// url completo immagine icona
+ ///
+ ///
+ ///
+ public string ImgUrlIcon(object url)
+ {
+ return string.Format("./images/iconDic/{0}.png", url);
+ }
+
+ ///
+ /// url completo immagine
+ ///
+ ///
+ ///
+ public string ImgUrlMacc(object url)
+ {
+ if (string.IsNullOrEmpty(url.ToString()))
+ {
+ url = "empty.png";
+ }
+ return string.Format("./images/macchine/{0}", url);
+ }
+
public string TCMinSec(object _TC)
{
string TC_MinSec = "";
@@ -83,75 +230,38 @@ namespace MoonProTablet.WebUserControls
{ }
return TC_MinSec;
}
+
///
- /// Sotto sistema (macchina) selezionato in sessione
+ /// effettua traduzione del lemma
///
- public string subMaccSel
- {
- get
- {
- return memLayer.ML.StringSessionObj("subMaccSel");
- }
- set
- {
- memLayer.ML.setSessionVal("subMaccSel", value);
- }
- }
- ///
- /// idxOdl corrente in sessione
- ///
- public int idxOdl
- {
- get
- {
- return memLayer.ML.IntSessionObj("idxODL");
- }
- set
- {
- memLayer.ML.setSessionVal("idxODL", value);
- }
- }
- ///
- /// url completo immagine
- ///
- ///
+ ///
///
- public string ImgUrlMacc(object url)
+ public string traduci(string lemma)
{
- if (string.IsNullOrEmpty(url.ToString()))
- {
- url = "empty.png";
- }
- return string.Format("./images/macchine/{0}", url);
+ return user_std.UtSn.Traduci(lemma);
}
+
///
- /// url completo immagine icona
+ /// effettua traduzione del lemma
///
- ///
+ ///
///
- public string ImgUrlIcon(object url)
+ public string traduci(object _lemma)
{
- return string.Format("./images/iconDic/{0}.png", url);
+ _lemma = _lemma == null ? "" : _lemma;
+ return user_std.UtSn.Traduci(_lemma.ToString());
}
+
///
- /// titolo pagina
+ /// effettua traduzione in inglese del lemma
///
- public string titolo
- {
- get
- {
- return devicesAuthProxy.getPage(Request.Url);
- }
- }
- ///
- /// fomratta durata in minuti/ore/gg a seconda del totale...
- ///
- ///
+ ///
///
- public string formatDurata(object min)
+ public string traduciEn(string lemma)
{
- return utility.formatDurata(min);
+ return user_std.UtSn.TraduciEn(lemma);
}
+
public string urlDisegno(object _codArticolo)
{
// default è ND...
@@ -159,7 +269,6 @@ namespace MoonProTablet.WebUserControls
// recupero da anagrafica articoli...
try
{
-
DS_ProdTempi.AnagArticoliRow riga = selData.mng.rigaArt(_codArticolo.ToString());
if (riga != null)
{
@@ -176,57 +285,7 @@ namespace MoonProTablet.WebUserControls
}
return outVal;
}
- ///
- /// Verifica se la macchina MAIN sia MULTI (da DatiMacchina / redis...)
- ///
- internal bool isMulti
- {
- get
- {
- return DataLayerObj.isMulti(idxMacchina);
- }
- }
- ///
- /// stringa UID univoca
- ///
- public string uid
- {
- get
- {
- return this.UniqueID.Replace("$", "_").Replace("-", "_");
- }
- }
- ///
- /// conversione da tempo minuti/secondi a minuti centesimali
- ///
- ///
- ///
- protected decimal minSec2Cent(TimeSpan valore)
- {
- Decimal answ = 0;
- try
- {
- answ = Math.Round((valore.Minutes + (decimal)valore.Seconds / 60), 3);
- }
- catch
- { }
- return answ;
- }
- ///
- /// conversione da tempo minuti centesimali a minuti/secondi
- ///
- ///
- ///
- protected TimeSpan minCent2Sec(decimal valore)
- {
- TimeSpan answ = new TimeSpan(0, 0, 1);
- try
- {
- answ = new TimeSpan(0, Convert.ToInt32(valore), Convert.ToInt32((valore - Convert.ToInt32(valore)) * 60));
- }
- catch
- { }
- return answ;
- }
+
+ #endregion Public Methods
}
}
\ No newline at end of file
diff --git a/MP-TAB/WebUserControls/mod_ODL.ascx.cs b/MP-TAB/WebUserControls/mod_ODL.ascx.cs
index 19fca8e8..baa0357f 100644
--- a/MP-TAB/WebUserControls/mod_ODL.ascx.cs
+++ b/MP-TAB/WebUserControls/mod_ODL.ascx.cs
@@ -10,18 +10,354 @@ namespace MoonProTablet.WebUserControls
{
public partial class mod_ODL : BaseUserControl
{
- ///
- /// registrato nuovo valore
- ///
- public event EventHandler eh_reqUpdate;
- ///
- /// Valore protected idxODL
- ///
- protected string _idxOdlMacc;
+ #region Protected Fields
+
///
/// Valore protected idxODL
///
protected string _idxOdlAltraMacc;
+
+ ///
+ /// Valore protected idxODL
+ ///
+ protected string _idxOdlMacc;
+
+ #endregion Protected Fields
+
+ #region Public Events
+
+ ///
+ /// registrato nuovo valore
+ ///
+ public event EventHandler eh_reqUpdate;
+
+ #endregion Public Events
+
+ #region Protected Properties
+
+ ///
+ /// Verifica chiave chkCloseOdl in tab Config
+ ///
+ protected bool chkCloseOdlVal
+ {
+ get
+ {
+ return memLayer.ML.cdvb("chkCloseOdl");
+ }
+ }
+
+ ///
+ /// Verifica (su tab config) se sia abilitata la gestione flusso RPO (Richieste - Promesse - ODL)
+ ///
+ protected bool enableRPO
+ {
+ get
+ {
+ return memLayer.ML.cdvb("enableRPO");
+ }
+ }
+
+ ///
+ /// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
+ ///
+ protected string idxMaccAltraTav
+ {
+ get
+ {
+ string answ = "";
+ try
+ {
+ // verifico se SIA una tavola (ha char "#")
+ int iSharp = idxMacchinaFix.IndexOf('#');
+ if (iSharp > 0)
+ {
+ // ora verifico SE ALTRA TAVOLA ha ODL...
+ string nomeTav = idxMacchinaFix.Substring(iSharp);
+ string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
+ altraTav += nomeTav.EndsWith("1") ? "2" : "1";
+ // sistemo nome
+ answ = idxMacchinaFix.Replace(nomeTav, altraTav);
+ }
+ }
+ catch
+ { }
+ return answ;
+ }
+ }
+
+ ///
+ /// Restituisce il codice IdxMacchina dell'impianto PARENT (se multi) altrimenti la stessa macchina...
+ ///
+ protected string idxMaccParent
+ {
+ get
+ {
+ string answ = "";
+ // se è multi controllo
+ if (isMulti)
+ {
+ // verifico se SIA una tavola (ha char "#")
+ int iSharp = idxMacchinaFix.IndexOf('#');
+ if (iSharp > 0)
+ {
+ // sistemo nome
+ answ = idxMacchinaFix.Substring(0, iSharp);
+ }
+ }
+ return answ;
+ }
+ }
+
+ ///
+ /// valore INT di num Pz per Pallet...
+ ///
+ protected int PzPallet
+ {
+ get
+ {
+ int answ = 0;
+ try
+ {
+ answ = cmp_selPzPallet.pzPallet;
+ }
+ catch
+ { }
+ return answ;
+ }
+ set
+ {
+ cmp_selPzPallet.pzPallet = value;
+ }
+ }
+
+ ///
+ /// Verifica chiave showChkCloseOdl in tab Config
+ ///
+ protected bool showChkCloseOdlVal
+ {
+ get
+ {
+ return memLayer.ML.cdvb("showChkCloseOdl");
+ }
+ }
+
+ ///
+ /// Verifica chiave showOdlProvv in tab Config
+ ///
+ protected bool showOdlProvvVal
+ {
+ get
+ {
+ return memLayer.ML.cdvb("showOdlProvv");
+ }
+ }
+
+ ///
+ /// Verifica visibilità btn riprendi ODL su 2° tavola SE:
+ /// - sia un impianto MULTI (= con + tavole)
+ /// - sia disattrezzata la tavola
+ /// - in tab congif: se sia abilitato la ripresa ODL sulla seconda tavola
+ /// - in tab config: sia il grace period
+ /// - NON SIANO passati i minuti indicati dalla chiusura
+ ///
+ protected bool showReopOdlTav
+ {
+ get
+ {
+ bool answ = false;
+ // se è multi controllo
+ if (isMulti)
+ {
+ // verifico se NON HA ODL...
+ if (emptyOdlMacc)
+ {
+ // verifico SE siamo nel gracePeriod
+ int gPeriod = memLayer.ML.cdvi("gPeriodReopenOdlTav");
+ DateTime adesso = DateTime.Now;
+ DateTime dtChiusura = DateTime.Now.AddHours(-1);
+ try
+ {
+ dtChiusura = DataLayerObj.taODL.getLastByMacc(idxMacchinaFix)[0].DataFine;
+ }
+ catch
+ { }
+
+ // ora verifico SE E SOLO SE è ANCORA in attrezzaggio
+ if (maccInAttr)
+ {
+ // ora verifico SE ALTRA TAVOLA ha ODL...
+ if (dtChiusura.AddMinutes(gPeriod) > adesso)
+ {
+ answ = memLayer.ML.cdvb("showReopenOdlTav");
+ }
+ }
+ }
+ }
+ return answ;
+ }
+ }
+
+ ///
+ /// Verifica visibilità btn split ODL su 2° tavola SE:
+ /// - sia un impianto MULTI (= con + tavole)
+ /// - sia già attrezzata la prima tavola
+ /// - in tab Congif: se sia abilitato lo split ODL sulla seconda tavola
+ /// - la macchina SIA ANCORA in attrezzaggio (2019.07.08) = 2
+ ///
+ protected bool showSplitOdlOnTavVal
+ {
+ get
+ {
+ bool answ = false;
+ // se è multi controllo
+ if (isMulti)
+ {
+ // verifico se NON HA ODL ma ce l'ha altra tavola...
+ if (emptyOdlMacc)
+ {
+ // ora verifico SE ALTRA TAVOLA ha ODL...
+ if (!emptyOdlAltraMacc)
+ {
+ // ora verifico SE E SOLO SE è ANCORA in attrezzaggio
+ if (maccInAttr)
+ {
+ answ = memLayer.ML.cdvb("showSplitOdlOnTav");
+ }
+ }
+ }
+ }
+ return answ;
+ }
+ }
+
+ ///
+ /// Verifica se la tavola SIA in fase di attrezzaggio, ovvero SE:
+ /// - sia un impianto MULTI (= con + tavole)
+ /// - sia già attrezzata
+ ///
+ protected bool tavHasOdl
+ {
+ get
+ {
+ bool answ = false;
+ // se è multi controllo
+ if (isMulti)
+ {
+ answ = !emptyOdlMacc;
+ }
+ return answ;
+ }
+ }
+
+ ///
+ /// valore decimal del TC richiesto...
+ ///
+ protected decimal TCRichAttr
+ {
+ get
+ {
+ decimal answ = 0;
+ try
+ {
+ answ = mod_tempoMSMC.tempoMC;
+ }
+ catch
+ { }
+ return answ;
+ }
+ set
+ {
+ mod_tempoMSMC.tempoMC = value;
+ }
+ }
+
+ #endregion Protected Properties
+
+ #region Public Properties
+
+ ///
+ /// Cod articolo dell'ODL selezionato
+ ///
+ public string CodArtSel
+ {
+ get
+ {
+ string CodArticolo = "";
+ try
+ {
+ CodArticolo = DataLayerObj.taODL.getByIdx(idxODLSel, false)[0].CodArticolo;
+ }
+ catch
+ { }
+ return CodArticolo;
+ }
+ }
+
+ ///
+ /// Verifica se la macchina NON abbia ODL (valido, > 0)
+ ///
+ public bool emptyOdlAltraMacc
+ {
+ get
+ {
+ return (idxOdlAltraMacc == "" || idxOdlAltraMacc == "0");
+ }
+ }
+
+ ///
+ /// Verifica se la macchina NON abbia ODL (valido, > 0)
+ ///
+ public bool emptyOdlMacc
+ {
+ get
+ {
+ return (idxOdlMacc == "" || idxOdlMacc == "0");
+ }
+ }
+
+ ///
+ /// idx macchina selezionata
+ ///
+ public string idxMacchinaFix
+ {
+ get
+ {
+ string answ = "";
+ try
+ {
+ answ = memLayer.ML.StringSessionObj(string.Format("idxMacchina-{0}", uid));
+ }
+ catch
+ { }
+ return answ;
+ }
+ set
+ {
+ memLayer.ML.setSessionVal(string.Format("idxMacchina-{0}", uid), value);
+ hfIdxMacchina.Value = value;
+ cmp_newODL.idxMacchina = value;
+ }
+ }
+
+ ///
+ /// IdxODL su ALTRA macchina (se multi)
+ ///
+ public string idxOdlAltraMacc
+ {
+ get
+ {
+ if (_idxOdlAltraMacc == null)
+ {
+ _idxOdlAltraMacc = DataLayerObj.currODL(idxMaccAltraTav, true);
+ }
+ return _idxOdlAltraMacc;
+ }
+ set
+ {
+ _idxOdlAltraMacc = value;
+ }
+ }
+
///
/// IdxODL sulla macchina
///
@@ -40,22 +376,60 @@ namespace MoonProTablet.WebUserControls
_idxOdlMacc = value;
}
}
+
///
- /// IdxODL su ALTRA macchina (se multi)
+ /// codice odl selezionato
///
- public string idxOdlAltraMacc
+ public int idxODLSel
{
get
{
- if (_idxOdlAltraMacc == null)
+ int answ = 0;
+ try
{
- _idxOdlAltraMacc = DataLayerObj.currODL(idxMaccAltraTav, true);
+ answ = Convert.ToInt32(ddlODL.SelectedValue);
}
- return _idxOdlAltraMacc;
+ catch
+ { }
+ return answ;
+ }
+ }
+
+ ///
+ /// Determina se sia abilitato il controllo x editing
+ ///
+ public bool isEnabled
+ {
+ get
+ {
+ bool answ = false;
+ try
+ {
+ answ = memLayer.ML.BoolSessionObj(string.Format("isEnabled-{0}", uid));
+ }
+ catch
+ { }
+ return answ;
}
set
{
- _idxOdlAltraMacc = value;
+ memLayer.ML.setSessionVal(string.Format("isEnabled-{0}", uid), value);
+ }
+ }
+
+ ///
+ /// Testo x button creazione nuovo ODL
+ ///
+ public string lblCreaOdl
+ {
+ get
+ {
+ string answ = "CREAZIONE ODL PROVVISORIO";
+ if (cmp_newODL.Visible)
+ {
+ answ = "NASCONDI creazione ODL provvisorio";
+ }
+ return answ;
}
}
@@ -86,353 +460,10 @@ namespace MoonProTablet.WebUserControls
return answ;
}
}
- ///
- /// Verifica se la macchina NON abbia ODL (valido, > 0)
- ///
- public bool emptyOdlMacc
- {
- get
- {
- return (idxOdlMacc == "" || idxOdlMacc == "0");
- }
- }
- ///
- /// Verifica se la macchina NON abbia ODL (valido, > 0)
- ///
- public bool emptyOdlAltraMacc
- {
- get
- {
- return (idxOdlAltraMacc == "" || idxOdlAltraMacc == "0");
- }
- }
- ///
- /// Verifica visibilità btn split ODL su 2° tavola SE:
- /// - sia un impianto MULTI (= con + tavole)
- /// - sia già attrezzata la prima tavola
- /// - in tab Congif: se sia abilitato lo split ODL sulla seconda tavola
- /// - la macchina SIA ANCORA in attrezzaggio (2019.07.08) = 2
- ///
- protected bool showSplitOdlOnTavVal
- {
- get
- {
- bool answ = false;
- // se è multi controllo
- if (isMulti)
- {
- // verifico se NON HA ODL ma ce l'ha altra tavola...
- if (emptyOdlMacc)
- {
- // ora verifico SE ALTRA TAVOLA ha ODL...
- if (!emptyOdlAltraMacc)
- {
- // ora verifico SE E SOLO SE è ANCORA in attrezzaggio
- if (maccInAttr)
- {
- answ = memLayer.ML.cdvb("showSplitOdlOnTav");
- }
- }
- }
- }
- return answ;
- }
- }
- ///
- /// Verifica visibilità btn riprendi ODL su 2° tavola SE:
- /// - sia un impianto MULTI (= con + tavole)
- /// - sia disattrezzata la tavola
- /// - in tab congif: se sia abilitato la ripresa ODL sulla seconda tavola
- /// - in tab config: sia il grace period
- /// - NON SIANO passati i minuti indicati dalla chiusura
- ///
- protected bool showReopOdlTav
- {
- get
- {
- bool answ = false;
- // se è multi controllo
- if (isMulti)
- {
- // verifico se NON HA ODL...
- if (emptyOdlMacc)
- {
- // verifico SE siamo nel gracePeriod
- int gPeriod = memLayer.ML.cdvi("gPeriodReopenOdlTav");
- DateTime adesso = DateTime.Now;
- DateTime dtChiusura = DateTime.Now.AddHours(-1);
- try
- {
- dtChiusura = DataLayerObj.taODL.getLastByMacc(idxMacchinaFix)[0].DataFine;
- }
- catch
- { }
- // ora verifico SE E SOLO SE è ANCORA in attrezzaggio
- if (maccInAttr)
- {
- // ora verifico SE ALTRA TAVOLA ha ODL...
- if (dtChiusura.AddMinutes(gPeriod) > adesso)
- {
- answ = memLayer.ML.cdvb("showReopenOdlTav");
- }
- }
- }
- }
- return answ;
- }
- }
- ///
- /// Verifica se la tavola SIA in fase di attrezzaggio, ovvero SE:
- /// - sia un impianto MULTI (= con + tavole)
- /// - sia già attrezzata
- ///
- protected bool tavHasOdl
- {
- get
- {
- bool answ = false;
- // se è multi controllo
- if (isMulti)
- {
- answ = !emptyOdlMacc;
- }
- return answ;
- }
- }
- ///
- /// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
- ///
- protected string idxMaccAltraTav
- {
- get
- {
- string answ = "";
- try
- {
- // verifico se SIA una tavola (ha char "#")
- int iSharp = idxMacchinaFix.IndexOf('#');
- if (iSharp > 0)
- {
- // ora verifico SE ALTRA TAVOLA ha ODL...
- string nomeTav = idxMacchinaFix.Substring(iSharp);
- string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
- altraTav += nomeTav.EndsWith("1") ? "2" : "1";
- // sistemo nome
- answ = idxMacchinaFix.Replace(nomeTav, altraTav);
- }
- }
- catch
- { }
- return answ;
- }
- }
- ///
- /// Restituisce il codice IdxMacchina dell'impianto PARENT (se multi) altrimenti la stessa macchina...
- ///
- protected string idxMaccParent
- {
- get
- {
- string answ = "";
- // se è multi controllo
- if (isMulti)
- {
- // verifico se SIA una tavola (ha char "#")
- int iSharp = idxMacchinaFix.IndexOf('#');
- if (iSharp > 0)
- {
- // sistemo nome
- answ = idxMacchinaFix.Substring(0, iSharp);
- }
- }
- return answ;
- }
- }
+ #endregion Public Properties
- ///
- /// Verifica chiave chkCloseOdl in tab Config
- ///
- protected bool chkCloseOdlVal
- {
- get
- {
- return memLayer.ML.cdvb("chkCloseOdl");
- }
- }
- ///
- /// Verifica chiave showChkCloseOdl in tab Config
- ///
- protected bool showChkCloseOdlVal
- {
- get
- {
- return memLayer.ML.cdvb("showChkCloseOdl");
- }
- }
- ///
- /// Verifica chiave showOdlProvv in tab Config
- ///
- protected bool showOdlProvvVal
- {
- get
- {
- return memLayer.ML.cdvb("showOdlProvv");
- }
- }
-
- ///
- /// idx macchina selezionata
- ///
- public string idxMacchinaFix
- {
- get
- {
- string answ = "";
- try
- {
- answ = memLayer.ML.StringSessionObj(string.Format("idxMacchina-{0}", uid));
- }
- catch
- { }
- return answ;
- }
- set
- {
- memLayer.ML.setSessionVal(string.Format("idxMacchina-{0}", uid), value);
- hfIdxMacchina.Value = value;
- cmp_newODL.idxMacchina = value;
- }
- }
- ///
- /// Determina se sia abilitato il controllo x editing
- ///
- public bool isEnabled
- {
- get
- {
- bool answ = false;
- try
- {
- answ = memLayer.ML.BoolSessionObj(string.Format("isEnabled-{0}", uid));
- }
- catch
- { }
- return answ;
- }
- set
- {
- memLayer.ML.setSessionVal(string.Format("isEnabled-{0}", uid), value);
- }
- }
- ///
- /// codice odl selezionato
- ///
- public int idxODLSel
- {
- get
- {
- int answ = 0;
- try
- {
- answ = Convert.ToInt32(ddlODL.SelectedValue);
- }
- catch
- { }
- return answ;
- }
- }
- ///
- /// Cod articolo dell'ODL selezionato
- ///
- public string CodArtSel
- {
- get
- {
- string CodArticolo = "";
- try
- {
- CodArticolo = DataLayerObj.taODL.getByIdx(idxODLSel, false)[0].CodArticolo;
- }
- catch
- { }
- return CodArticolo;
- }
- }
- ///
- /// avvio pagina
- ///
- ///
- ///
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- {
- // fix modo tempo...
- if (memLayer.ML.cdvb("TAB_TC_MinSec"))
- {
- mod_tempoMSMC.modoTempo = timeMode.MS;
- }
- else
- {
- mod_tempoMSMC.modoTempo = timeMode.MC;
- }
- }
- cmp_newODL.eh_newVal += Cmp_newODL_eh_newVal;
- }
- ///
- /// Verifica (su tab config) se sia abilitata la gestione flusso RPO (Richieste - Promesse - ODL)
- ///
- protected bool enableRPO
- {
- get
- {
- return memLayer.ML.cdvb("enableRPO");
- }
- }
-
- private void Cmp_newODL_eh_newVal(object sender, EventArgs e)
- {
- // creato nuovo ODL, faccio refresh ricaricando pagina!
- Response.Redirect("~/ODL");
- }
-
- public void hideAll()
- {
- divDettOdl.Visible = false;
- }
-
- public void checkAll()
- {
- lblOut.Text = "";
- checkBtnStatus();
- chkCloseOdl.Checked = chkCloseOdlVal;
- chkCloseOdl.Visible = showChkCloseOdlVal;
- divOdlProvv.Visible = showOdlProvvVal;
- divOpRiattr.Visible = (showSplitOdlOnTavVal || showReopOdlTav);
- lbtSplitOdlSuTav.Visible = showSplitOdlOnTavVal;
- lbtReopOdlSuTav.Visible = showReopOdlTav;
- lbtFixEndSetup.Visible = !maccInAttr && memLayer.ML.CRB("OptEnableFixSetup");
- }
- ///
- /// Sistema CSS x status enabled/disabled
- ///
- ///
- protected void fixWCtrStatus(object lbtn)
- {
- // tolgo (eventuale) classe
- try
- {
- ((WebControl)lbtn).CssClass = ((WebControl)lbtn).CssClass.Replace("disabled", "");
- // se richiesto metto disabled...
- if (!((WebControl)lbtn).Enabled)
- {
- ((WebControl)lbtn).CssClass += " disabled";
- }
- }
- catch
- { }
- }
+ #region Private Methods
///
/// controlla stato bottoni abilitato
@@ -523,9 +554,70 @@ namespace MoonProTablet.WebUserControls
divWarningArt.Visible = showWarn;
}
}
+
+ private void checkDDL()
+ {
+ if (ddlODL.SelectedIndex > 0)
+ {
+ showNoteTC(true);
+ updateTempoTc(idxODLSel, false);
+ updateNoteTC(idxODLSel);
+ }
+ else
+ {
+ showNoteTC(false);
+ }
+ }
+
+ private void Cmp_newODL_eh_newVal(object sender, EventArgs e)
+ {
+ // creato nuovo ODL, faccio refresh ricaricando pagina!
+ Response.Redirect("~/ODL");
+ }
+
+ ///
+ /// verifica se sia necessario confermare la prod dell'ODL precedente prima di chiudere e lo fa in automatico...
+ ///
+ /// boolean, true = deve confermare 0 pezzi (es. in setup)
+ private void confermaProdOdl(bool confZero)
+ {
+ // 2016.11.17 NOTA: introdotti scarti, li confermiamo SEMPRE a zero se in setup, però da valutare SE a FINE ATTREZZAGGIO chiedere num pezzi e num scarti (saldo zero buoni) da inserire...
+ if (confZero)
+ {
+ // confermo produzione ZERO pezzi (in setup)
+ DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), 0, 0, DateTime.Now);
+ }
+ else // se NON sono in setup verifico se ho pz da confermare
+ {
+ // recupero pz da confermare
+ DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayerObj.taPzProd2conf.GetData(idxMacchinaFix)[0];
+ if (rigaProd.pezziNonConfermati > 0)
+ {
+ DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), rigaProd.pezziNonConfermati, 0, DateTime.Now);
+ }
+ }
+ }
+
+ ///
+ /// sistema buttons split
+ ///
+ ///
+ private void fixSplitBtn(bool splitOdl)
+ {
+ lbtShowSplitODL.Visible = !splitOdl;
+ chkCloseOdl.Visible = !splitOdl;
+ lbtSplitODL.Visible = splitOdl;
+ showNoteTC(splitOdl);
+ ddlODL.Visible = !splitOdl;
+ chkTutti.Visible = !splitOdl;
+ lbtStartAttr.Visible = !splitOdl;
+ lbtStartProd.Visible = !splitOdl;
+ lbtEndProd.Visible = !splitOdl;
+ }
+
///
/// processa evento richiesto
- ///
+ ///
///
///
///
@@ -553,73 +645,351 @@ namespace MoonProTablet.WebUserControls
logger.lg.scriviLog(userMsg, tipoLog.INFO);
checkBtnStatus();
}
+
///
- /// valore decimal del TC richiesto...
+ /// mostra/nasconde note
///
- protected decimal TCRichAttr
+ private void showNoteTC(bool show)
{
- get
+ // mostra/nasconde note da compilare
+ divTempo.Visible = show;
+ divNote.Visible = show;
+ divPzPallet.Visible = show;
+ lbtStartAttr.Visible = show;
+ cmp_dettODL.idxODLSel = idxODLSel;
+ divDettOdl.Visible = show && idxODLSel > 0;
+ // se abilitato da config su DB mostro selezione del numPzPallet...
+ cmp_selPzPallet.enableSet = memLayer.ML.CRB("enableTabSetPzPallet");
+ }
+
+ ///
+ /// aggiorna note ODL
+ ///
+ ///
+ private void updateNoteTC(int idxOdl)
+ {
+ string testo = "";
+ if (idxOdl > 0)
{
- decimal answ = 0;
try
{
- answ = mod_tempoMSMC.tempoMC;
+ testo = DataLayerObj.taODL.getByIdx(idxOdl, false)[0].Note;
}
catch
{ }
- return answ;
- }
- set
- {
- mod_tempoMSMC.tempoMC = value;
}
+ txtNote.Text = testo;
}
+
///
- /// valore INT di num Pz per Pallet...
+ /// update TC mostrato
///
- protected int PzPallet
+ /// idx dell'ODL / PODL
+ ///
+ private void updateTempoTc(int idxOdlPodl, bool inAttr)
{
- get
+ // riporta TC
+ decimal _TCRichAttr = 0;
+ int pzPallet = 1;
+ if (enableRPO && !inAttr)
{
- int answ = 0;
- try
- {
- answ = cmp_selPzPallet.pzPallet;
- }
- catch
- { }
- return answ;
+ var rigaProm = DataLayerObj.taPODL.getByKey(idxOdlPodl)[0];
+ _TCRichAttr = rigaProm.TCAssegnato;
+ pzPallet = rigaProm.PzPallet;
}
- set
+ else
{
- cmp_selPzPallet.pzPallet = value;
- }
- }
- ///
- /// valore decimal del TC ASSEGNATO...
- ///
- protected decimal TCAssegnato(int idxODL)
- {
- decimal answ = 0;
- try
- {
- if (enableRPO)
+ DS_ProdTempi.ODLRow rigaOdl = DataLayerObj.taODL.getByIdx(idxOdlPodl, false)[0];
+ if (rigaOdl.TCRichAttr > 0)
{
- // leggo info da promessa...
- var rigaProm = DataLayerObj.taPODL.getByKey(idxODL)[0];
- answ = rigaProm.TCAssegnato;
+ _TCRichAttr = rigaOdl.TCRichAttr;
}
else
{
- // leggo idxOdl da ultimo odl attivo x macchina
- DS_ProdTempi.ODLRow rigaOdl = DataLayerObj.taODL.getByIdx(idxODL, false)[0];
- answ = rigaOdl.TCAssegnato;
+ _TCRichAttr = rigaOdl.TCAssegnato;
+ }
+ pzPallet = rigaOdl.PzPallet;
+ }
+ // aggiorno dati!
+ TCRichAttr = _TCRichAttr;
+ PzPallet = pzPallet;
+ }
+
+ #endregion Private Methods
+
+ #region Protected Methods
+
+ protected void chkTutti_CheckedChanged(object sender, EventArgs e)
+ {
+ checkBtnStatus();
+ }
+
+ ///
+ /// selezionato un ODL mostro note/tempo da validare
+ ///
+ ///
+ ///
+ protected void ddlODL_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ checkDDL();
+ }
+
+ ///
+ /// Sistema CSS x status enabled/disabled
+ ///
+ ///
+ protected void fixWCtrStatus(object lbtn)
+ {
+ // tolgo (eventuale) classe
+ try
+ {
+ ((WebControl)lbtn).CssClass = ((WebControl)lbtn).CssClass.Replace("disabled", "");
+ // se richiesto metto disabled...
+ if (!((WebControl)lbtn).Enabled)
+ {
+ ((WebControl)lbtn).CssClass += " disabled";
}
}
catch
{ }
- return answ;
}
+
+ protected void lbtConfNewRevProd_Click(object sender, EventArgs e)
+ {
+ // chiamo stored x allineare revProd a revUT
+ string CodArticolo = DataLayerObj.taODL.getByIdx(idxODLSel, false)[0].CodArticolo;
+ DataLayerObj.taAnagArt.setNewRev(CodArticolo);
+ checkBtnStatus();
+ }
+
+ ///
+ /// fine prod
+ ///
+ ///
+ ///
+ protected void lbtEndProd_Click(object sender, EventArgs e)
+ {
+ // leggo idxOdl da ultimo odl attivo x macchina
+ int idxODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
+ int idxEvento = 7; // !!!HARD CODED
+
+ // confermo prod vecchio ODL
+ confermaProdOdl(false);
+
+ // se chk flaggato ovvero richiesta di chiudere ODL procedo come prima (chiudendo ODL senza averne altri...)
+ if (chkCloseOdl.Checked)
+ {
+ // aggiungo try/catch x capire se sia qui che si "impasta" in chiusura ODL
+ try
+ {
+ // processo x macchina selezionata
+ DataLayerObj.taODL.fineProd(idxODL, idxMacchinaFix);
+ string evText = "Registrata fine produzione per ODL {0}";
+ StringBuilder sb = new StringBuilder();
+ sb.AppendLine(String.Format(evText, idxODL));
+ processaEvento(idxMacchinaFix, idxEvento, sb.ToString(), idxODL);
+ // se è multi processo ANCHE x altra tavola...
+ if (isMulti)
+ {
+ sb.AppendLine("---");
+ int idxOdlAltra = 0;
+ string _idxOdl = idxOdlAltraMacc;
+ int.TryParse(_idxOdl, out idxOdlAltra);
+ DataLayerObj.taODL.fineProd(idxOdlAltra, idxMaccAltraTav);
+ sb.AppendLine(String.Format(evText, idxOdlAltra));
+ processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
+ }
+ // se è master --> chiamo update child!
+ if (isMaster)
+ {
+ DataLayerObj.taODL.fixMachineSlave(idxMacchina, 30, 1);
+ }
+ // riporto stringa
+ lblOut.Text = sb.ToString().Replace("---", "
");
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog(string.Format("Eccezione in operazione chiusura ODL! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
+ Response.Redirect("~/DettaglioMacchina.aspx");
+ }
+ }
+ // altrimenti split ODL x completare IN FUTURO la produzione...
+ else
+ {
+ try
+ {
+ // effettuo split su nuovo ODL
+ DataLayerObj.taODL.splitODL(idxODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCAssegnato(idxODL), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxODL, TCAssegnato(idxODL)), false);
+ // processo chiusura setup
+ processaEvento(idxMacchinaFix, idxEvento, String.Format("Registrata fine produzione per ODL {0}, nuovo ODL per quantità residua", idxODL), idxODL);
+
+ // se è multi processo ANCHE x altra tavola...
+ if (isMulti)
+ {
+ int idxOdlAltra = 0;
+ string _idxOdl = idxOdlAltraMacc;
+ int.TryParse(_idxOdl, out idxOdlAltra);
+ // effettuo split su nuovo ODL
+ DataLayerObj.taODL.splitODL(idxOdlAltra, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(idxOdlAltra), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxOdlAltra, TCAssegnato(idxOdlAltra)), false);
+ // processo chiusura setup
+ processaEvento(idxMaccAltraTav, idxEvento, String.Format("Registrata fine produzione per ODL {0}, nuovo ODL per quantità residua", idxOdlAltra), idxOdlAltra);
+ }
+ // se è master --> chiamo update child!
+ if (isMaster)
+ {
+ DataLayerObj.taODL.fixMachineSlave(idxMacchina, 30, 1);
+ }
+ // sistemo buttons!
+ bool splitOdl = false;
+ fixSplitBtn(splitOdl);
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog(string.Format("Eccezione in operazione Chiusura + Split ODL su nuovo! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
+ Response.Redirect("~/DettaglioMacchina.aspx");
+ }
+ }
+ // resetto ODL su redis...
+ DataLayerObj.emptyCurrODL(idxMacchinaFix);
+ // aggiorno visualizzazione
+ checkAll();
+ // sollevo evento!
+ if (eh_reqUpdate != null)
+ {
+ eh_reqUpdate(this, new EventArgs());
+ }
+ }
+
+ protected void lbtFixEndSetup_Click(object sender, EventArgs e)
+ {
+ string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
+ string outData = $"TS:{ts}|MATR:{DataLayerObj.MatrOpr}|ODL:{idxOdlMacc}";
+ DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.fixStopSetup, outData);
+ outData = "Inserita richiesta invio Fix chiusura attrezzaggio " + outData;
+ lblOut.Text = outData;
+ }
+
+ ///
+ /// Effettua ripresa ODL su tavola
+ ///
+ ///
+ ///
+ protected void lbtReopOdlSuTav_Click(object sender, EventArgs e)
+ {
+ // chiamo stored x riprendere ODL (toglie data chiusura...)
+ DS_ProdTempi.ODLDataTable tabRes = DataLayerObj.taODL.reopenGetLast(idxMacchinaFix);
+ if (tabRes.Rows.Count > 0)
+ {
+ var riga = tabRes[0];
+ // messaggio utente
+ string evText = "Registrato riapertura ODL {0} | art {1}";
+ StringBuilder sb = new StringBuilder();
+ sb.AppendLine(String.Format(evText, riga.IdxODL, riga.CodArticolo));
+ lblOut.Text = sb.ToString();
+ }
+ // update buttons...
+ checkAll();
+ // sollevo evento!
+ if (eh_reqUpdate != null)
+ {
+ eh_reqUpdate(this, new EventArgs());
+ }
+ }
+
+ ///
+ /// toggle visualizzazione creazioen ODL provvisorio
+ ///
+ ///
+ ///
+ protected void lbtShowCreaOdlProvv_Click(object sender, EventArgs e)
+ {
+ cmp_newODL.Visible = !cmp_newODL.Visible;
+ }
+
+ ///
+ /// mostra dati ed opzione x split ODL
+ ///
+ ///
+ ///
+ protected void lbtShowSplitODL_Click(object sender, EventArgs e)
+ {
+ bool splitOdl = true;
+ fixSplitBtn(splitOdl);
+ // recupero current idx
+ int currODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
+ updateTempoTc(currODL, true);
+ updateNoteTC(currODL);
+ }
+
+ ///
+ /// split ODL con creazione nuovo ODL
+ ///
+ ///
+ ///
+ protected void lbtSplitODL_Click(object sender, EventArgs e)
+ {
+ // chiamo stored che genera nuovo ODL, mette note e tempo, chiude vecchi e assegna nuovo...
+ int currODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
+ int idxEvento = 1; // !!!HARD CODED
+ // controllo se TC è valorizzato..
+ if (TCRichAttr == 0)
+ {
+ mod_tempoMSMC.checkTC();
+ }
+
+ // confermo prod vecchio ODL
+ confermaProdOdl(false);
+
+ // effettuo split su nuovo ODL
+ DataLayerObj.taODL.splitODL(currODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCRichAttr, PzPallet, txtNote.Text, true);
+
+ // resetto ODL su redis...
+ DataLayerObj.emptyCurrODL(idxMacchinaFix);
+
+ // invio email!
+ DataLayerObj.sendWarnTcChangeReq(memLayer.ML.CRS("_adminEmail"));
+ // processo chiusura setup
+ processaEvento(idxMacchinaFix, idxEvento, String.Format("Registrato Riattrezzaggio ODL (old: {0})", currODL), currODL);
+ // sistemo buttons!
+ bool splitOdl = false;
+ fixSplitBtn(splitOdl);
+
+ // sollevo evento!
+ if (eh_reqUpdate != null)
+ {
+ eh_reqUpdate(this, new EventArgs());
+ }
+ }
+
+ ///
+ /// Effettua split ODL da ALTRA tavola su tav corrente
+ ///
+ ///
+ ///
+ protected void lbtSplitOdlSuTav_Click(object sender, EventArgs e)
+ {
+ // chiamo stored x splittare ODL...
+ int idxOdlAltra = 0;
+ int.TryParse(idxOdlAltraMacc, out idxOdlAltra);
+ // se ho trovato...
+ if (idxOdlAltra > 0)
+ {
+ DataLayerObj.taODL.dividiDaAltraTav(idxOdlAltra, DataLayerObj.MatrOpr, idxMacchinaFix);
+ // messaggio utente
+ string evText = "Registrata inizio attrezzaggio da split ODL {0} (come da altra tavola)";
+ StringBuilder sb = new StringBuilder();
+ sb.AppendLine(String.Format(evText, idxOdlAltra));
+ lblOut.Text = sb.ToString();
+ }
+ // update button x setup da altra tavola...
+ checkAll();
+ // sollevo evento!
+ if (eh_reqUpdate != null)
+ {
+ eh_reqUpdate(this, new EventArgs());
+ }
+ }
+
///
/// dichiara inizio attrezzaggio ODL indicato..
///
@@ -633,8 +1003,8 @@ namespace MoonProTablet.WebUserControls
* - ogni volta che si fa setup LEADER --> si ripete su impianti FOLLOWER (eventi!!!)
* - viene fatto reset contapezzi sui follower (+ altre operazioni opzionali, ES imposstazione nome commessa, quantità, articolo...)
* - viene fatto reset + nuovo ODL (con stessi articoli e quantità) su follower, SENZA avere gestione x ODL di un codice esterno (quindi registra TUTTO ma NON RITORNERA' dati on avendo link verso esterno)
- * - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO
- *
+ * - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO
+ *
***************************************************/
bool inAttr = false;
@@ -643,7 +1013,7 @@ namespace MoonProTablet.WebUserControls
{
try
{
- // controllo se NON SONO già in attrezzaggio...
+ // controllo se NON SONO già in attrezzaggio...
DS_applicazione.StatoMacchineRow rigaStato = selData.mng.rigaStato(idxMaccParent);
inAttr = (rigaStato.IdxStato == 2);
}
@@ -736,6 +1106,11 @@ namespace MoonProTablet.WebUserControls
// update buttons...
checkAll();
}
+ // se è master --> chiamo update child!
+ if (isMaster)
+ {
+ DataLayerObj.taODL.fixMachineSlave(idxMacchina, 30, 1);
+ }
// resetto contapezzi redis...
DataLayerObj.saveCounter(idxMacchinaFix, "0");
// imposto ODL su redis...
@@ -751,6 +1126,7 @@ namespace MoonProTablet.WebUserControls
eh_reqUpdate(this, new EventArgs());
}
}
+
///
/// inizio prod
///
@@ -776,7 +1152,7 @@ namespace MoonProTablet.WebUserControls
// invio email!
DataLayerObj.sendWarnTcChangeReq(memLayer.ML.CRS("_adminEmail"));
}
- // processo chiusura setup
+ // processo chiusura setup
string evText = "Registrata inizio produzione per ODL {0}";
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format(evText, idxODL));
@@ -793,6 +1169,11 @@ namespace MoonProTablet.WebUserControls
sb.AppendLine(String.Format(evText, idxOdlAltra));
processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
}
+ // se è master --> chiamo update child!
+ if (isMaster)
+ {
+ DataLayerObj.taODL.fixMachineSlave(idxMacchina, 30, 1);
+ }
// riporto stringa
lblOut.Text = sb.ToString().Replace("---", "
");
// nascondo note!
@@ -805,367 +1186,53 @@ namespace MoonProTablet.WebUserControls
eh_reqUpdate(this, new EventArgs());
}
}
+
///
- /// fine prod
+ /// avvio pagina
///
///
///
- protected void lbtEndProd_Click(object sender, EventArgs e)
+ protected void Page_Load(object sender, EventArgs e)
{
- // leggo idxOdl da ultimo odl attivo x macchina
- int idxODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
- int idxEvento = 7; // !!!HARD CODED
-
- // confermo prod vecchio ODL
- confermaProdOdl(false);
-
- // se chk flaggato ovvero richiesta di chiudere ODL procedo come prima (chiudendo ODL senza averne altri...)
- if (chkCloseOdl.Checked)
+ if (!Page.IsPostBack)
{
- // aggiungo try/catch x capire se sia qui che si "impasta" in chiusura ODL
- try
+ // fix modo tempo...
+ if (memLayer.ML.cdvb("TAB_TC_MinSec"))
{
- // processo x macchina selezionata
- DataLayerObj.taODL.fineProd(idxODL, idxMacchinaFix);
- string evText = "Registrata fine produzione per ODL {0}";
- StringBuilder sb = new StringBuilder();
- sb.AppendLine(String.Format(evText, idxODL));
- processaEvento(idxMacchinaFix, idxEvento, sb.ToString(), idxODL);
- // se è multi processo ANCHE x altra tavola...
- if (isMulti)
- {
- sb.AppendLine("---");
- int idxOdlAltra = 0;
- string _idxOdl = idxOdlAltraMacc;
- int.TryParse(_idxOdl, out idxOdlAltra);
- DataLayerObj.taODL.fineProd(idxOdlAltra, idxMaccAltraTav);
- sb.AppendLine(String.Format(evText, idxOdlAltra));
- processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
- }
- // riporto stringa
- lblOut.Text = sb.ToString().Replace("---", "
");
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog(string.Format("Eccezione in operazione chiusura ODL! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
- Response.Redirect("~/DettaglioMacchina.aspx");
- }
- }
- // altrimenti split ODL x completare IN FUTURO la produzione...
- else
- {
- try
- {
- // effettuo split su nuovo ODL
- DataLayerObj.taODL.splitODL(idxODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCAssegnato(idxODL), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxODL, TCAssegnato(idxODL)), false);
- // processo chiusura setup
- processaEvento(idxMacchinaFix, idxEvento, String.Format("Registrata fine produzione per ODL {0}, nuovo ODL per quantità residua", idxODL), idxODL);
-
- // se è multi processo ANCHE x altra tavola...
- if (isMulti)
- {
- int idxOdlAltra = 0;
- string _idxOdl = idxOdlAltraMacc;
- int.TryParse(_idxOdl, out idxOdlAltra);
- // effettuo split su nuovo ODL
- DataLayerObj.taODL.splitODL(idxOdlAltra, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(idxOdlAltra), PzPallet, string.Format("Fine Produzione, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", idxOdlAltra, TCAssegnato(idxOdlAltra)), false);
- // processo chiusura setup
- processaEvento(idxMaccAltraTav, idxEvento, String.Format("Registrata fine produzione per ODL {0}, nuovo ODL per quantità residua", idxOdlAltra), idxOdlAltra);
- }
- // sistemo buttons!
- bool splitOdl = false;
- fixSplitBtn(splitOdl);
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog(string.Format("Eccezione in operazione Chiusura + Split ODL su nuovo! {0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
- Response.Redirect("~/DettaglioMacchina.aspx");
- }
- }
- // resetto ODL su redis...
- DataLayerObj.emptyCurrODL(idxMacchinaFix);
- // aggiorno visualizzazione
- checkAll();
- // sollevo evento!
- if (eh_reqUpdate != null)
- {
- eh_reqUpdate(this, new EventArgs());
- }
- }
- ///
- /// verifica se sia necessario confermare la prod dell'ODL precedente prima di chiudere e lo fa in automatico...
- ///
- /// boolean, true = deve confermare 0 pezzi (es. in setup)
- private void confermaProdOdl(bool confZero)
- {
- // 2016.11.17 NOTA: introdotti scarti, li confermiamo SEMPRE a zero se in setup, però da valutare SE a FINE ATTREZZAGGIO chiedere num pezzi e num scarti (saldo zero buoni) da inserire...
- if (confZero)
- {
- // confermo produzione ZERO pezzi (in setup)
- DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), 0, 0, DateTime.Now);
- }
- else // se NON sono in setup verifico se ho pz da confermare
- {
- // recupero pz da confermare
- DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayerObj.taPzProd2conf.GetData(idxMacchinaFix)[0];
- if (rigaProd.pezziNonConfermati > 0)
- {
- DataLayerObj.confermaProdMacchina(idxMacchinaFix, memLayer.ML.CRI("modoConfProd"), rigaProd.pezziNonConfermati, 0, DateTime.Now);
- }
- }
- }
- ///
- /// mostra dati ed opzione x split ODL
- ///
- ///
- ///
- protected void lbtShowSplitODL_Click(object sender, EventArgs e)
- {
- bool splitOdl = true;
- fixSplitBtn(splitOdl);
- // recupero current idx
- int currODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
- updateTempoTc(currODL, true);
- updateNoteTC(currODL);
- }
- ///
- /// sistema buttons split
- ///
- ///
- private void fixSplitBtn(bool splitOdl)
- {
- lbtShowSplitODL.Visible = !splitOdl;
- chkCloseOdl.Visible = !splitOdl;
- lbtSplitODL.Visible = splitOdl;
- showNoteTC(splitOdl);
- ddlODL.Visible = !splitOdl;
- chkTutti.Visible = !splitOdl;
- lbtStartAttr.Visible = !splitOdl;
- lbtStartProd.Visible = !splitOdl;
- lbtEndProd.Visible = !splitOdl;
- }
- ///
- /// split ODL con creazione nuovo ODL
- ///
- ///
- ///
- protected void lbtSplitODL_Click(object sender, EventArgs e)
- {
- // chiamo stored che genera nuovo ODL, mette note e tempo, chiude vecchi e assegna nuovo...
- int currODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
- int idxEvento = 1; // !!!HARD CODED
- // controllo se TC è valorizzato..
- if (TCRichAttr == 0)
- {
- mod_tempoMSMC.checkTC();
- }
-
- // confermo prod vecchio ODL
- confermaProdOdl(false);
-
- // effettuo split su nuovo ODL
- DataLayerObj.taODL.splitODL(currODL, DataLayerObj.MatrOpr, idxMacchinaFix, TCRichAttr, PzPallet, txtNote.Text, true);
-
- // resetto ODL su redis...
- DataLayerObj.emptyCurrODL(idxMacchinaFix);
-
- // invio email!
- DataLayerObj.sendWarnTcChangeReq(memLayer.ML.CRS("_adminEmail"));
- // processo chiusura setup
- processaEvento(idxMacchinaFix, idxEvento, String.Format("Registrato Riattrezzaggio ODL (old: {0})", currODL), currODL);
- // sistemo buttons!
- bool splitOdl = false;
- fixSplitBtn(splitOdl);
-
- // sollevo evento!
- if (eh_reqUpdate != null)
- {
- eh_reqUpdate(this, new EventArgs());
- }
- }
- ///
- /// selezionato un ODL mostro note/tempo da validare
- ///
- ///
- ///
- protected void ddlODL_SelectedIndexChanged(object sender, EventArgs e)
- {
- checkDDL();
- }
-
- private void checkDDL()
- {
- if (ddlODL.SelectedIndex > 0)
- {
- showNoteTC(true);
- updateTempoTc(idxODLSel, false);
- updateNoteTC(idxODLSel);
- }
- else
- {
- showNoteTC(false);
- }
- }
-
-
- ///
- /// mostra/nasconde note
- ///
- private void showNoteTC(bool show)
- {
- // mostra/nasconde note da compilare
- divTempo.Visible = show;
- divNote.Visible = show;
- divPzPallet.Visible = show;
- lbtStartAttr.Visible = show;
- cmp_dettODL.idxODLSel = idxODLSel;
- divDettOdl.Visible = show && idxODLSel > 0;
- // se abilitato da config su DB mostro selezione del numPzPallet...
- cmp_selPzPallet.enableSet = memLayer.ML.CRB("enableTabSetPzPallet");
-
- }
- ///
- /// aggiorna note ODL
- ///
- ///
- private void updateNoteTC(int idxOdl)
- {
- string testo = "";
- if (idxOdl > 0)
- {
- try
- {
- testo = DataLayerObj.taODL.getByIdx(idxOdl, false)[0].Note;
- }
- catch
- { }
- }
- txtNote.Text = testo;
- }
-
- ///
- /// update TC mostrato
- ///
- /// idx dell'ODL / PODL
- ///
- private void updateTempoTc(int idxOdlPodl, bool inAttr)
- {
- // riporta TC
- decimal _TCRichAttr = 0;
- int pzPallet = 1;
- if (enableRPO && !inAttr)
- {
- var rigaProm = DataLayerObj.taPODL.getByKey(idxOdlPodl)[0];
- _TCRichAttr = rigaProm.TCAssegnato;
- pzPallet = rigaProm.PzPallet;
- }
- else
- {
- DS_ProdTempi.ODLRow rigaOdl = DataLayerObj.taODL.getByIdx(idxOdlPodl, false)[0];
- if (rigaOdl.TCRichAttr > 0)
- {
- _TCRichAttr = rigaOdl.TCRichAttr;
+ mod_tempoMSMC.modoTempo = timeMode.MS;
}
else
{
- _TCRichAttr = rigaOdl.TCAssegnato;
+ mod_tempoMSMC.modoTempo = timeMode.MC;
}
- pzPallet = rigaOdl.PzPallet;
}
- // aggiorno dati!
- TCRichAttr = _TCRichAttr;
- PzPallet = pzPallet;
+ cmp_newODL.eh_newVal += Cmp_newODL_eh_newVal;
}
- protected void lbtConfNewRevProd_Click(object sender, EventArgs e)
- {
- // chiamo stored x allineare revProd a revUT
- string CodArticolo = DataLayerObj.taODL.getByIdx(idxODLSel, false)[0].CodArticolo;
- DataLayerObj.taAnagArt.setNewRev(CodArticolo);
- checkBtnStatus();
- }
///
- /// toggle visualizzazione creazioen ODL provvisorio
+ /// valore decimal del TC ASSEGNATO...
///
- ///
- ///
- protected void lbtShowCreaOdlProvv_Click(object sender, EventArgs e)
+ protected decimal TCAssegnato(int idxODL)
{
- cmp_newODL.Visible = !cmp_newODL.Visible;
- }
- ///
- /// Testo x button creazione nuovo ODL
- ///
- public string lblCreaOdl
- {
- get
+ decimal answ = 0;
+ try
{
- string answ = "CREAZIONE ODL PROVVISORIO";
- if (cmp_newODL.Visible)
+ if (enableRPO)
{
- answ = "NASCONDI creazione ODL provvisorio";
+ // leggo info da promessa...
+ var rigaProm = DataLayerObj.taPODL.getByKey(idxODL)[0];
+ answ = rigaProm.TCAssegnato;
+ }
+ else
+ {
+ // leggo idxOdl da ultimo odl attivo x macchina
+ DS_ProdTempi.ODLRow rigaOdl = DataLayerObj.taODL.getByIdx(idxODL, false)[0];
+ answ = rigaOdl.TCAssegnato;
}
- return answ;
- }
- }
-
- protected void chkTutti_CheckedChanged(object sender, EventArgs e)
- {
- checkBtnStatus();
- }
- ///
- /// Effettua split ODL da ALTRA tavola su tav corrente
- ///
- ///
- ///
- protected void lbtSplitOdlSuTav_Click(object sender, EventArgs e)
- {
- // chiamo stored x splittare ODL...
- int idxOdlAltra = 0;
- int.TryParse(idxOdlAltraMacc, out idxOdlAltra);
- // se ho trovato...
- if (idxOdlAltra > 0)
- {
- DataLayerObj.taODL.dividiDaAltraTav(idxOdlAltra, DataLayerObj.MatrOpr, idxMacchinaFix);
- // messaggio utente
- string evText = "Registrata inizio attrezzaggio da split ODL {0} (come da altra tavola)";
- StringBuilder sb = new StringBuilder();
- sb.AppendLine(String.Format(evText, idxOdlAltra));
- lblOut.Text = sb.ToString();
- }
- // update button x setup da altra tavola...
- checkAll();
- // sollevo evento!
- if (eh_reqUpdate != null)
- {
- eh_reqUpdate(this, new EventArgs());
- }
- }
- ///
- /// Effettua ripresa ODL su tavola
- ///
- ///
- ///
- protected void lbtReopOdlSuTav_Click(object sender, EventArgs e)
- {
- // chiamo stored x riprendere ODL (toglie data chiusura...)
- DS_ProdTempi.ODLDataTable tabRes = DataLayerObj.taODL.reopenGetLast(idxMacchinaFix);
- if (tabRes.Rows.Count > 0)
- {
- var riga = tabRes[0];
- // messaggio utente
- string evText = "Registrato riapertura ODL {0} | art {1}";
- StringBuilder sb = new StringBuilder();
- sb.AppendLine(String.Format(evText, riga.IdxODL, riga.CodArticolo));
- lblOut.Text = sb.ToString();
- }
- // update buttons...
- checkAll();
- // sollevo evento!
- if (eh_reqUpdate != null)
- {
- eh_reqUpdate(this, new EventArgs());
}
+ catch
+ { }
+ return answ;
}
protected void txtSearchODL_TextChanged(object sender, EventArgs e)
@@ -1173,13 +1240,28 @@ namespace MoonProTablet.WebUserControls
odsODL.DataBind();
}
- protected void lbtFixEndSetup_Click(object sender, EventArgs e)
+ #endregion Protected Methods
+
+ #region Public Methods
+
+ public void checkAll()
{
- string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
- string outData = $"TS:{ts}|MATR:{DataLayerObj.MatrOpr}|ODL:{idxOdlMacc}";
- DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.fixStopSetup, outData);
- outData = "Inserita richiesta invio Fix chiusura attrezzaggio " + outData;
- lblOut.Text = outData;
+ lblOut.Text = "";
+ checkBtnStatus();
+ chkCloseOdl.Checked = chkCloseOdlVal;
+ chkCloseOdl.Visible = showChkCloseOdlVal;
+ divOdlProvv.Visible = showOdlProvvVal;
+ divOpRiattr.Visible = (showSplitOdlOnTavVal || showReopOdlTav);
+ lbtSplitOdlSuTav.Visible = showSplitOdlOnTavVal;
+ lbtReopOdlSuTav.Visible = showReopOdlTav;
+ lbtFixEndSetup.Visible = !maccInAttr && memLayer.ML.CRB("OptEnableFixSetup");
}
+
+ public void hideAll()
+ {
+ divDettOdl.Visible = false;
+ }
+
+ #endregion Public Methods
}
}
\ No newline at end of file