using MagData; using MapoDb; using Newtonsoft.Json; using SteamWare; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MP_MAG { public class BaseUserControl : System.Web.UI.UserControl { #region Internal Fields /// /// Oggetto datalayer specifico /// internal DataLayer DataLayerObj = new DataLayer(); /// /// Oggetto datalayer specifico /// internal MagDataLayer MagDataLayerObj = new MagDataLayer(); #endregion Internal Fields #region Public Events /// /// Generico evento di richiesta AddNew /// public event EventHandler eh_addNew; /// /// Generico evento di richiesta refresh a parent /// public event EventHandler eh_doRefresh; /// /// Generico evento di richiesta refresh a parent /// public event EventHandler eh_doReset; /// /// Generico evento "stato editing" /// public event EventHandler eh_editing; #endregion Public Events #region Protected Properties /// /// Codice operatore salvato in cookie /// protected string cookieCodOpr { get { return memLayer.ML.getCookieVal("CTrack_CodOpr"); } } /// /// Codice post salvato in cookie /// protected string cookieCodPost { get { return memLayer.ML.getCookieVal("CTrack_CodPost"); } } /// /// Rilegge i dati di prod da DB /// protected prodData getProdDataDb { // FIXME TODO: da rivedere gestione dei cookie di recupero dati x gestione... get { prodData answ = null; // leggo da DB ODL... var tabOdl = MagDataLayer.man.taODL.getOpenByPost(cookieCodPost); if (tabOdl.Count == 1) { var rigaOdl = tabOdl[0]; var tabArt = MagDataLayer.man.taAA.getByKey(rigaOdl.CodArticolo); string codCli = rigaOdl.CodCli; string descrArt = "ND"; if (tabArt.Count == 1) { descrArt = tabArt[0].DescrArt; } var tabEP2Q = MagDataLayer.man.taEP2Q.getByKey(cookieCodPost); string printQueue = ""; if (tabEP2Q.Count == 1) { printQueue = tabEP2Q[0].PrintQueue; } answ = new prodData() { CodPost = cookieCodPost, CodOpr = cookieCodOpr, RifExt = rigaOdl.KeyRichiesta, CurrODL = $"{rigaOdl.IdxODL}", CurrArtCod = rigaOdl.CodArticolo, CurrArtDesc = descrArt, PrintQueue = printQueue, CodCli = codCli }; // ora descr articolo } return answ; } } #endregion Protected Properties #region Public Properties /// /// Codice Cliente /// public string CodCli { get { string answ = ""; if (currProdData != null) { try { answ = currProdData.CodCli; } catch { } } return answ; } } /// /// Codice operatore /// public string CodOpr { get { string answ = ""; if (currProdData != null) { try { answ = currProdData.CodOpr; } catch { } } return answ; } } /// /// Codice post /// public string CodPost { get { string answ = ""; if (currProdData != null) { try { answ = currProdData.CodPost; } catch { } } return answ; } } /// /// Descr Articolo corrente x post /// public string CurrArtDesc { get { string answ = ""; if (currProdData != null) { var dati = currProdData; if (dati != null) { try { answ = $"{dati.CurrArtCod} | {dati.CurrArtDesc}"; } catch { } } } return answ; } } /// /// Articolo corrente x post /// public string CurrCodArt { get { string answ = ""; if (currProdData != null) { answ = currProdData.CurrArtCod; } return answ; } } /// /// Dati correnti prod /// public MagData.prodPrintData currData { get { return MagDataLayerObj.currProdPrintData; } } /// /// ODL corrente x post /// public string CurrOdl { get { string answ = ""; if (currProdData != null) { answ = currProdData.CurrODL; } return answ; } } /// /// ODL corrente x post /// public string CurrOdlDesc { get { string answ = ""; if (currProdData != null) { try { answ = $"ODL: {currProdData.CurrODL}"; } catch { } } return answ; } } /// /// Dati correnti di produzione /// FixMe Todo !!! : DA RIVEDERE: NON Può essere a livello redis condiviso se diverse postazioni... /// public prodData currProdData { get { prodData answ = null; try { string rawData = memLayer.ML.getRSV("redProdKey"); if (!string.IsNullOrEmpty(rawData)) { answ = JsonConvert.DeserializeObject(rawData); } } catch { } // se vuoto leggo da DB if (answ == null) { answ = getProdDataDb; // salvo in sessione currProdData = answ; } return answ; } set { string rawData = JsonConvert.SerializeObject(value); memLayer.ML.setRSV(redProdKey, rawData, redProdKeyTTL); } } /// /// Chiave redis dei dati di prod correnti /// public string redProdKey { get { return memLayer.ML.redHash(memLayer.ML.CRS("redProdKey")); } } /// /// TTL dati redis x prod /// public int redProdKeyTTL { get { int answ = 60; answ = memLayer.ML.CRI("redProdKeyTTL") > 0 ? memLayer.ML.CRI("redProdKeyTTL") : 60; return answ; } } /// /// Rif esterno (da ODL) /// public string RifExt { get { string answ = ""; if (currProdData != null) { try { answ = currProdData.RifExt; } catch { } } return answ; } } /// /// titolo pagina /// public string titolo { get { return devicesAuthProxy.getPage(Request.Url).Replace(".aspx", ""); } } #endregion Public Properties #region Public Methods /// /// Verifica se il cod articolo passato (tipicamente Eval DataGrid) sia OK con articolo corrente /// /// /// public bool codArtOk(object _codArt) { bool answ = false; if (_codArt != null) { if (!string.IsNullOrEmpty(_codArt.ToString())) { answ = _codArt.ToString() == CurrCodArt; } } return answ; } /// /// Chiamata evento add New /// public void raiseAddNew() { // se qualcuno ascolta sollevo evento nuovo valore... if (eh_addNew != null) { eh_addNew(this, new EventArgs()); } } /// /// Chiamata evento editing /// public void raiseEditing() { // se qualcuno ascolta sollevo evento nuovo valore... if (eh_editing != null) { eh_editing(this, new EventArgs()); } } /// /// Chiamata evento /// public void raiseEvent() { // se qualcuno ascolta sollevo evento nuovo valore... if (eh_doRefresh != null) { eh_doRefresh(this, new EventArgs()); } } /// /// Chiamata evento /// public void raiseReset() { // se qualcuno ascolta sollevo evento nuovo valore... if (eh_doReset != null) { eh_doReset(this, new EventArgs()); } } public bool resetProdData() { bool answ = false; try { // rileggo prodPrintData newProdPrintData = MagDataLayerObj.currProdPrintData; DateTime dtRif = DateTime.Now; // calcolo var tabOdl = DataLayerObj.taODL.getByIdx(newProdPrintData.IdxOdl, false); // se ODL chiuso --> uso data chiusura x indicare data controllo if (tabOdl.Rows.Count > 0) { newProdPrintData.QtaOdl = tabOdl[0].NumPezzi; if (!tabOdl[0].IsDataFineNull()) { dtRif = tabOdl[0].DataFine; } } //2022.03.31 modifica stored lettura var tabDatiProdAct = DataLayerObj.taStatoProd.getByMacchinaData(newProdPrintData.IdxMacchina, dtRif); //var tabDatiProdAct = DataLayerObj.taStatoProd.GetData(newProdPrintData.IdxMacchina, dtRif); if (tabDatiProdAct.Rows.Count > 0) { newProdPrintData.QtaConf = tabDatiProdAct[0].PzConfBuoni; } // salvo in oggetto dedicato... MagDataLayerObj.currProdPrintData = newProdPrintData; answ = true; } catch { } return answ; } /// /// Wrapper traduzione termini /// /// /// public string traduci(string lemma) { return SteamWare.user_std.UtSn.Traduci(lemma); } #endregion Public Methods } }