From 8a7d2a8472b59e6e31dbe17baccc7055ff5aa984 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 5 Feb 2021 19:28:43 +0100 Subject: [PATCH] fix logo cliente + fix gest MON + macc --- MP-MON/Controllers/MSEController.cs | 228 ++++++++++++++++------------ MP-MON/MP-MON.csproj | 3 +- MP-MON/Views/MSE/_StatusMap.cshtml | 4 +- MP-MON/Views/Shared/_Layout.cshtml | 10 +- MP-MON/Views/Shared/_footer.cshtml | 7 +- MP-MON/Views/Shared/_mmClock.cshtml | 3 +- MP-MON/images/logoCliente.png | Bin 0 -> 22301 bytes 7 files changed, 144 insertions(+), 111 deletions(-) create mode 100644 MP-MON/images/logoCliente.png diff --git a/MP-MON/Controllers/MSEController.cs b/MP-MON/Controllers/MSEController.cs index b7d9bbe0..e5ce6bd1 100644 --- a/MP-MON/Controllers/MSEController.cs +++ b/MP-MON/Controllers/MSEController.cs @@ -9,112 +9,138 @@ using System.Web.Mvc; namespace MP_MON.Controllers { - public class MSEController : Controller - { - DataLayer DataLayerObj = new DataLayer(); - private MapoMonEntities db = new MapoMonEntities(); + public class MSEController : Controller + { + #region Private Fields - // GET: StatusMap - public ActionResult StatusMap(string baseCss) - { - memLayer.ML.setSessionVal("IdxMacchina", "***ALL***"); - return SingleStatus(baseCss, "***ALL***"); - } + private DataLayer DataLayerObj = new DataLayer(); + private MapoMonEntities db = new MapoMonEntities(); - /// - /// Output MSE in formato string/json - /// - public string getData(string id) - { - int dataRefresh = 2000; - string answ = ""; - answ = DataLayerObj.currMSE; - if (!string.IsNullOrEmpty(answ)) - { - List dati = getDbSaveRedis(dataRefresh); - } - return answ; - } - // GET: StatusMap - public ActionResult SingleStatus(string baseCss, string IdxMacchina) - { - int dataRefresh = 2000; - // salvo idxMacc in sessione se c'è... - if (!string.IsNullOrEmpty(IdxMacchina)) - { - memLayer.ML.setSessionVal("IdxMacchina", IdxMacchina); - } - else - { - IdxMacchina = memLayer.ML.StringSessionObj("IdxMacchina"); - } - try - { - dataRefresh = Convert.ToInt32(System.Web.Configuration.WebConfigurationManager.AppSettings["dataRefreshMs"]); - } - catch - { } - List dati = new List(); - string currMse = DataLayerObj.currMSE; - if (!string.IsNullOrEmpty(currMse)) - { - try + #endregion Private Fields + + #region Private Methods + + /// + /// Restituisce dati da DB (e li salva su REDIS...) + /// + /// Parametro x procedura ricalcolo MSE + private List getDbSaveRedis(int dataRefresh) { - dati = JsonConvert.DeserializeObject>(currMse); + List dati = new List(); + // se non c'è rileggo... + logger.lg.scriviLog("Recuperata MSE da DB"); + dati = db.stp_MSE_getData(dataRefresh).ToList(); + // serializzo + DataLayerObj.currMSE = JsonConvert.SerializeObject(dati); + return dati; } - catch (Exception exc) + + #endregion Private Methods + + #region Protected Methods + + protected override void Dispose(bool disposing) { - dati = getDbSaveRedis(dataRefresh); - logger.lg.scriviLog(string.Format("Recuperata MSE da DB{0}{1}", Environment.NewLine, exc)); + if (disposing) + { + db.Dispose(); + } + base.Dispose(disposing); } - } - else - { - dati = getDbSaveRedis(dataRefresh); - } - // filtro dati SOLO PER la macchina che mi interessa... SE C'E'... - string reqView = "_StatusMap"; - if (IdxMacchina != "***ALL***") - { - dati = dati.Where(e => e.IdxMacchina == IdxMacchina).ToList(); - reqView = "_StatusMapSingle"; - } - ViewBag.baseCss = baseCss; - ViewBag.IdxMacchina = IdxMacchina; - // aggiungo il controllo del NUM MAX col x singola riga - int maxCol = 6; - try - { - maxCol = memLayer.ML.cdvi("MON_maxCol"); - } - catch - { } - ViewBag.maxCol = maxCol; - return PartialView(reqView, dati); - } - /// - /// Restituisce dati da DB (e li salva su REDIS...) - /// - /// Parametro x procedura ricalcolo MSE - private List getDbSaveRedis(int dataRefresh) - { - List dati = new List(); - // se non c'è rileggo... - logger.lg.scriviLog("Recuperata MSE da DB"); - dati = db.stp_MSE_getData(dataRefresh).ToList(); - // serializzo - DataLayerObj.currMSE = JsonConvert.SerializeObject(dati); - return dati; - } - protected override void Dispose(bool disposing) - { - if (disposing) - { - db.Dispose(); - } - base.Dispose(disposing); - } + #endregion Protected Methods - } -} + #region Public Methods + + /// + /// Output MSE in formato string/json + /// + public string getData(string id) + { + int dataRefresh = 2000; + string answ = ""; + answ = DataLayerObj.currMSE; + if (!string.IsNullOrEmpty(answ)) + { + List dati = getDbSaveRedis(dataRefresh); + } + return answ; + } + + // GET: StatusMap + public ActionResult SingleStatus(string baseCss, string IdxMacchina) + { + int dataRefresh = 2000; + // salvo idxMacc in sessione se c'è... + if (!string.IsNullOrEmpty(IdxMacchina)) + { + memLayer.ML.setSessionVal("IdxMacchina", IdxMacchina); + } + else + { + IdxMacchina = memLayer.ML.StringSessionObj("IdxMacchina"); + } + try + { + dataRefresh = Convert.ToInt32(System.Web.Configuration.WebConfigurationManager.AppSettings["dataRefreshMs"]); + } + catch + { } + List dati = new List(); + string currMse = DataLayerObj.currMSE; + if (!string.IsNullOrEmpty(currMse)) + { + try + { + dati = JsonConvert.DeserializeObject>(currMse); + } + catch (Exception exc) + { + dati = getDbSaveRedis(dataRefresh); + logger.lg.scriviLog(string.Format("Recuperata MSE da DB{0}{1}", Environment.NewLine, exc)); + } + } + else + { + dati = getDbSaveRedis(dataRefresh); + } + // filtro dati SOLO PER la macchina che mi interessa... SE C'E'... + string reqView = "_StatusMap"; + if (IdxMacchina != "***ALL***") + { + // se ho elenco macchine idxMacc|idxMacc + if (IdxMacchina.IndexOf("|") > 0) + { + dati = dati.Where(e => IdxMacchina.IndexOf(e.IdxMacchina) >= 0).ToList(); + reqView = "_StatusMapSingle"; + } + else + { + dati = dati.Where(e => e.IdxMacchina == IdxMacchina).ToList(); + reqView = "_StatusMapSingle"; + } + } + ViewBag.baseCss = baseCss; + ViewBag.IdxMacchina = IdxMacchina; + // aggiungo il controllo del NUM MAX col x singola riga + int maxCol = 6; + try + { + maxCol = memLayer.ML.cdvi("MON_maxCol"); + } + catch + { } + ViewBag.maxCol = maxCol; + return PartialView(reqView, dati); + } + + // GET: StatusMap + public ActionResult StatusMap(string baseCss) + { + memLayer.ML.setSessionVal("IdxMacchina", "***ALL***"); + return SingleStatus(baseCss, "***ALL***"); + } + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/MP-MON/MP-MON.csproj b/MP-MON/MP-MON.csproj index 2a7731e4..c3c8f818 100644 --- a/MP-MON/MP-MON.csproj +++ b/MP-MON/MP-MON.csproj @@ -389,6 +389,7 @@ MapoModel.Designer.cs + MapoModel.edmx @@ -532,7 +533,7 @@ - + Designer diff --git a/MP-MON/Views/MSE/_StatusMap.cshtml b/MP-MON/Views/MSE/_StatusMap.cshtml index 2c516f28..3c8e93a6 100644 --- a/MP-MON/Views/MSE/_StatusMap.cshtml +++ b/MP-MON/Views/MSE/_StatusMap.cshtml @@ -1,6 +1,6 @@ @model IEnumerable -
+
@{ // salvo variabili num blocchi x riga @@ -123,7 +123,7 @@ // controllo se ho resto zero --> uso NUOVA riga... if ((numBlock % maxCol) == maxCol - 1) { - @Html.Raw("
"); + @Html.Raw("
"); } // incremento contatore numBlock++; diff --git a/MP-MON/Views/Shared/_Layout.cshtml b/MP-MON/Views/Shared/_Layout.cshtml index 7f9ad3df..d9cf2694 100644 --- a/MP-MON/Views/Shared/_Layout.cshtml +++ b/MP-MON/Views/Shared/_Layout.cshtml @@ -11,7 +11,7 @@
diff --git a/MP-MON/Views/Shared/_footer.cshtml b/MP-MON/Views/Shared/_footer.cshtml index b5a9c6b8..bc789755 100644 --- a/MP-MON/Views/Shared/_footer.cshtml +++ b/MP-MON/Views/Shared/_footer.cshtml @@ -15,7 +15,12 @@
- MP MONitor +
+ MP MONitor +
+
+ v: @typeof(MP_MON.MvcApplication).Assembly.GetName().Version | addr: @Request.UserHostAddress +
diff --git a/MP-MON/Views/Shared/_mmClock.cshtml b/MP-MON/Views/Shared/_mmClock.cshtml index 61f135fa..d1c972b1 100644 --- a/MP-MON/Views/Shared/_mmClock.cshtml +++ b/MP-MON/Views/Shared/_mmClock.cshtml @@ -1,2 +1 @@ - -@DateTime.Now.ToLongDateString(), @DateTime.Now.ToShortTimeString() +@DateTime.Now.ToLongDateString(), @DateTime.Now.ToShortTimeString() \ No newline at end of file diff --git a/MP-MON/images/logoCliente.png b/MP-MON/images/logoCliente.png new file mode 100644 index 0000000000000000000000000000000000000000..0378e66fbfbf8c8a189b2b950a31b4408dfc88f5 GIT binary patch literal 22301 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'iJR!bA~*_^ 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