using MapoDb; using System; namespace MoonPro.WebUserControls { public partial class mod_statoMacchina : System.Web.UI.UserControl { #region area protected / private /// /// seriale associato alla macchina da controllare /// protected string _IdxMacchina; /// /// posizione macchina nella tabella /// protected string _locazione; protected bool _linkActive = true; protected DS_ProdTempi.MappaStatoExplDataTable tabMSE; protected DS_applicazione.AnagraficaStatiDataTable tabAnagStati; protected DS_applicazione.KeepAliveDataTable tabKeepAlive; /// /// caricamento pagina /// /// /// protected void Page_Load(object sender, EventArgs e) { updateMe(); } /// /// aggiorna controllo /// public void updateMe() { //SE E SOLO SE ho una macchina e/o locazione... if (IdxMacchina != "") { //DateTime tick = DateTime.Now; // effettua update visualizzazione retrieveData(); updateLayout(); updateText(); updateImg(); updateHL(); // controllo se link attivo... if (!_linkActive) { valMacchina.Enabled = false; } //logger.lg.scriviLog(string.Format("Retrieve: {0}", DateTime.Now.Subtract(tick).Milliseconds), tipoLog.INFO); divSegnaposto.Visible = false; } else { pnlMacchina.Visible = false; } } /// /// recupera i dati /// private void retrieveData() { try { // popolazione tabelle tabMSE = MapoDb.DataLayer.obj.taMSE.getByIdxMacchina(IdxMacchina); tabAnagStati = MapoDb.DataLayer.obj.taAnagStati.GetData(); tabKeepAlive = MapoDb.DataLayer.obj.taKeepAlive.GetData(); } catch { } } /// /// sistema il testo /// private void updateText() { if (_IdxMacchina != "nd" && _IdxMacchina != "") { // labels lblCodArticolo.Text = "Articolo"; lblStato.Text = "Stato"; lblProd.Text = "T.Ciclo medio"; // era OEE lblDurata.Text = "Durata"; // 2018.02.05 cambio x fix nuovi impianti // valMacchina.Text = tabMacchine.FindByIdxMacchina(IdxMacchina).Nome; // valCodArticolo.Text = tabStatoMacchine.FindByIdxMacchina(IdxMacchina).CodArticolo; // leggo valori da MSE... valMacchina.Text = tabMSE[0].Nome; valCodArticolo.Text = tabMSE[0].CodArticolo; // carico ultimo stato che sia durato almeno 6 sec (0.1 min) int idxStato = 0; int oreTot = 0; float minuti = 0; try { MapoDb.DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow rigaStato = DataLayer.obj.taDatiStatoMacch.GetData(IdxMacchina, 0.1)[0]; idxStato = rigaStato.idxStato; oreTot = Convert.ToInt32(Math.Floor(rigaStato.Minuti / 60)); minuti = (float)rigaStato.Minuti - 60 * oreTot; } catch { // 2018.02.05 cambio x fix nuovi impianti //idxStato = tabStatoMacchine.FindByIdxMacchina(IdxMacchina).IdxStato; //DateTime inizioStato = tabStatoMacchine.FindByIdxMacchina(IdxMacchina).InizioStato; //DateTime ora = DateTime.Now; //TimeSpan durata = ora.Subtract(inizioStato); //oreTot = durata.Days * 24 + durata.Hours; //minuti = durata.Minutes; idxStato = tabMSE[0].idxStato; oreTot=(int)tabMSE[0].durata/60; minuti = (int)tabMSE[0].durata - 60 * oreTot; } // 2018.02.05 cambio x fix nuovi impianti //valStato.Text = tabAnagStati.FindByIdxStato(idxStato).Descrizione; valStato.Text = tabMSE[0].DescrizioneStato; valDurata.Text = string.Format("{0}h {1}min", oreTot, minuti); // solo se in stato NON di run... if (idxStato != 13) { lblCausale.Text = "Causale fermo"; string cauFermo = "nd"; try { cauFermo = tabAnagStati.FindByIdxStato(tabMSE[0].idxStato).Descrizione; //cauFermo = tabAnagStati.FindByIdxStato(Convert.ToInt32(tabStatoMacchine.FindByIdxMacchina(IdxMacchina).IdxStato)).Descrizione; } catch { // 2018.02.05 cambio x fix nuovi impianti //cauFermo = string.Format("IN: {0}", tabStatoMacchine.FindByIdxMacchina(IdxMacchina).Value); cauFermo = string.Format("IN: {0}", tabMSE[0].idxStato); } valCausale.Text = cauFermo; } else { lblCausale.Text = ""; valCausale.Text = ""; } // ATTENZIONE! dati generati casualmente, da cambiare in produzione!!! bool demoRandom = false; if (demoRandom) { // indico a caso % pz prodotti... Random RandomClass = new Random(DateTime.Now.Millisecond); if (idxStato == 13) { valProd.Text = string.Format("{0:P}", RandomClass.NextDouble() / 4 + 0.75); } else if (oreTot > 8) { valProd.Text = string.Format("{0:P}", 0); } else { valProd.Text = string.Format("{0:P}", RandomClass.NextDouble() / 2 + 0.25); } } else // mostra lo stesso valore per tutti e due { // prova...se non ha dati relativa mostra n/a - not available DateTime Ora = DateTime.Now; valProd.Text = "1H: "; string emptyVal = "n/a
"; int numPezzi = 0; // prova l'ultima ora try { // conto num pezzi e divido 1h/pezzi numPezzi = DataLayer.obj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, Ora.AddHours(-1), Ora).Rows.Count; if (numPezzi > 0) { valProd.Text += String.Format("{0:#.00}m
", Math.Round((double)60 / numPezzi, 3)); } else { valProd.Text += emptyVal; } } catch { valProd.Text += emptyVal; } // prova le ultime 8 ore valProd.Text += "8H: "; numPezzi = 0; try { // conto num pezzi e divido 1h/pezzi numPezzi = DataLayer.obj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, Ora.AddHours(-8), Ora).Rows.Count; if (numPezzi > 0) { valProd.Text += String.Format("{0:#.00}m ", Math.Round((double)480 / numPezzi, 3)); } else { valProd.Text += emptyVal; } } catch { valProd.Text += emptyVal; } } } } /// /// rimanda alla pagina di dettaglio della macchina scelta /// /// /// protected void lnkMacchina_Click(object sender, EventArgs e) { if (linkActive) { Session["IdxMacchina"] = IdxMacchina; Response.Redirect(string.Format("~/DettaglioMacchina?IdxMacchina={0}", IdxMacchina)); } } /// /// aggiorna il layout grafico /// private void updateLayout() { if (_IdxMacchina != "nd") { try { // in base allo stato recupero il colore... string codColore = resoconti.mngr.semaforoDaIdxStato(resoconti.mngr.statoMacchina(_IdxMacchina)); pnlMacchina.CssClass = codColore; } catch { } } } /// /// sistema hiperLink /// private void updateHL() { bool answ = false; if (_IdxMacchina != "nd") { int minuti = SteamWare.memLayer.ML.confReadInt("keepAliveMin"); // controllo se il keep alive è oltre il termine... DateTime lastKA = DateTime.Now.AddMinutes(-minuti); try { lastKA = tabKeepAlive.FindByIdxMacchina(IdxMacchina).DataOraServer; } catch { } if (lastKA.AddMinutes(minuti) < DateTime.Now) { answ = true; } } hlComWarning.Visible = answ; } /// /// metto a posto l'immagine /// protected void updateImg() { string urlMacchina; if (_IdxMacchina != "nd") { urlMacchina = string.Format("~/images/macchine/{0}", resoconti.mngr.urlMacchina(IdxMacchina)); if (urlMacchina == "thumb_") { urlMacchina = "~/images/empty.png"; } else { imgThumb.ToolTip = resoconti.mngr.nomeMacchina(IdxMacchina); } imgThumb.ImageUrl = urlMacchina; } else { urlMacchina = "~/images/empty.png"; imgThumb.ImageUrl = urlMacchina; } } #endregion #region area public /// /// Idx della macchina controllata /// public string IdxMacchina { get { return _IdxMacchina; } set { if (resoconti.mngr == null) { resoconti.mngr = new resoconti(); } _IdxMacchina = value; _locazione = resoconti.mngr.locazioneDaIdx(_IdxMacchina); } } /// /// stringa locazione macchina in tabella /// public string locazione { get { return _locazione; } set { if (resoconti.mngr == null) { resoconti.mngr = new resoconti(); } _locazione = value; try { _IdxMacchina = resoconti.mngr.idxDaLocazione(_locazione); } catch { _IdxMacchina = "nd"; } } } /// /// definisce se sia attivo il link della pagina /// public bool linkActive { get { return _linkActive; } set { _linkActive = value; } } #endregion } }