using MapoDb; using SteamWare; using System; using System.Web.UI.WebControls; namespace MoonProTablet.WebUserControls { public partial class mod_dichiarazione : System.Web.UI.UserControl { /// /// classe MapoDB x uso locale /// protected MapoDb.MapoDb controllerMapo = new MapoDb.MapoDb(); /// /// registrato nuovo valore /// public event EventHandler eh_newVal; /// /// idx macchina selezionata /// public string idxMacchina { get { return memLayer.ML.StringSessionObj("IdxMacchina"); } set { memLayer.ML.setSessionVal("IdxMacchina", value); } } /// /// caricamento principale /// /// /// protected void Page_Load(object sender, EventArgs e) { repLI.DataBind(); } /// /// rimanda alla pagina di dettaglio della macchina scelta /// /// /// protected void hlEvento_Click(object sender, EventArgs e) { LinkButton lnkbtn = (LinkButton)sender; int idxEvento = 0; try { idxEvento = Convert.ToInt32(lnkbtn.CommandArgument); } catch { } if (idxEvento > 0) { DS_applicazione.AnagraficaEventiRow rigaEvento = DataLayer.obj.taAnagEventi.GetByIdx(idxEvento)[0]; if (rigaEvento != null) { DS_applicazione.StatoMacchineRow rigaStato = DataLayer.obj.taStatoMacchine.GetDataByIdxMacchina(idxMacchina.ToString())[0]; // processo evento... if (insRealtime) { // se realtime controllerMapo.scriviRigaEventoBarcode(idxMacchina.ToString(), idxEvento, rigaStato.CodArticolo, "DRT", DataLayer.MatrOpr, rigaStato.pallet); } else { // in primis disabilito insert... DataLayer.obj.taStatoMacchine.setInsEnabled(idxMacchina.ToString(), false); // calcolo evento string evento = idxEvento.ToString(); string commento = ""; try { evento = DataLayer.obj.taAnagEventi.GetByIdx(idxEvento)[0].Nome.Replace("Barcode - ", ""); } catch { } // genero stringa pseudo-univoca string codRich = string.Format("{0:yyMMddHHmmss}-{1}", DateTime.Now, idxEvento); // x prima cosa scrivo un evento tipo "1" x chiudere la durata appena prima dell'evento successivo try { // cerco da 1 sec DOPO evento... DS_applicazione.DiarioDiBordoDataTable tabNext = controllerMapo.nextEventoImpiantoFrom(idxMacchina.ToString(), dataOraEv.AddSeconds(1)); DateTime nextEvDT = DateTime.Now; if (tabNext.Rows.Count > 0) { nextEvDT = tabNext[0].InizioStato; } // se non trovo chiusura evento inserisco a 1 minuto prima di adesso la chiusura... else { nextEvDT = DateTime.Now.AddMinutes(-1); } // fix salvo la dichiarazione di chiusura commento = string.Format("999 - M.Lav EndEvt: {0} [{1}]", evento, codRich); controllerMapo.scriviRigaEventoBarcode(idxMacchina.ToString(), 1, rigaStato.CodArticolo, commento, DataLayer.MatrOpr, rigaStato.pallet, nextEvDT.AddSeconds(-1), DateTime.Now); // 1 hard-coded x resettare } catch { } // update commento! commento = string.Format("999 - Dich StartEvt: {0} [{1}]", evento, codRich); // recupero data/ora evento da inserire (quella selezionata) ed AGGIUNGO 1 sec!!! così rimane traccia controllerMapo.scriviRigaEventoBarcode(idxMacchina.ToString(), idxEvento, rigaStato.CodArticolo, commento, DataLayer.MatrOpr, rigaStato.pallet, dataOraEv.AddSeconds(1), DateTime.Now); // eseguo ricalcolo! DateTime startRicalcolo = dataOraEv.AddMinutes(memLayer.ML.confReadInt("minAnticipoRicalcolo")); // leggo parametri x esecuzione... int rdm_nEvStep = memLayer.ML.CRI("rdm_nEvStep"); int rdm_nEvCheck = memLayer.ML.CRI("rdm_nEvCheck"); bool rdm_ChkOnly = memLayer.ML.CRB("rdm_ChkOnly"); DataLayer.obj.taComm.stp_ricalcolaDatiMacchinaFromDate(idxMacchina.ToString(), startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); // nella stored imposto macchina OFFline e poi ONline, parto da "minAnticipoRicalcolo" minuti prima... // aggiorno data evento x insert eventuale commento (5 sec...) dataOraEv = dataOraEv.AddSeconds(5); // riabilito insert... anche se non dovrebbe servire x stored ricalcolo precedente... DataLayer.obj.taStatoMacchine.setInsEnabled(idxMacchina.ToString(), true); } // mostro esito lblOut.Text = "Registrata dichiarazione fermata"; } else { lblOut.Text = string.Format("Codice evento non valido! {0}", idxEvento); } } repLI.DataBind(); // sollevo evento! if (eh_newVal != null) { eh_newVal(this, new EventArgs()); } } /// /// url completo immagine /// /// /// public string ImgUrl(object url) { return string.Format("./images/iconDic/{0}.png", url); } /// /// update (resetta testo) /// public void doUpdate() { lblOut.Text = ""; } /// /// determina se insert sia realtime o dataOra (in base a diff tra dataora sel ed evento, se superiore ad X minuto NON è realtime) /// public bool insRealtime { get { bool answ = true; try { if (Math.Abs(dataOraEv.Subtract(DateTime.Now).TotalMinutes) > memLayer.ML.confReadInt("dltMinRealtime")) { answ = false; } } catch { } return answ; } } /// /// data-ora selezionata /// protected DateTime dataOraEv { set { memLayer.ML.setSessionVal("dataOraEv", value); } get { DateTime answ = DateTime.Now; try { answ = Convert.ToDateTime(memLayer.ML.objSessionObj("dataOraEv")); } catch { } return answ; } } } }