using Microsoft.AspNetCore.Components; using Newtonsoft.Json; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.Services; using WebDoorCreator.UI.Components.SvgComp; using WebDoorCreator.UI.Data; using static WebDoorCreator.UI.Data.WDCRefreshService; namespace WebDoorCreator.UI.Components.Hardware { public partial class HardwareNewPanel : IDisposable { #region Public Properties [Parameter] public int DoorId { get; set; } = 0; [Parameter] public EventCallback E_act2Rel { get; set; } [Parameter] public EventCallback E_recordUpdate { get; set; } [Parameter] public EventCallback E_selTemplate { get; set; } [Parameter] public bool HwAdded { get; set; } = false; [Parameter] public string HwCode { get; set; } = ""; [Parameter] public string HwLabel { get; set; } = ""; [Parameter] public string Lingua { get; set; } = "EN"; [CascadingParameter] public string UserId { get; set; } = ""; [CascadingParameter(Name = "orderStatus")] public int orderStatus { get; set; } = 10; #endregion Public Properties #region Public Methods public void Dispose() { WDCRefresh.EA_ConfDoorOp -= WDCRefresh_EA_ConfDoorOp; } #endregion Public Methods #region Protected Properties protected bool _isDoorOpConf { get; set; } = false; protected bool B_doorOpUpd { get => WDCRService.isDoorOpUpd; set => WDCRService.isDoorOpUpd = value; } protected List DoorOp2ModList { get; set; } = new List(); protected List? DoorOpList { get; set; } = null!; protected int HwInst { get { int answ = 0; if (DoorOpList != null) { answ = DoorOpList .Where(x => x.ObjectId == HwCode) .ToList() .Count(); } return answ; } } //protected int instNum { get; set; } = 1; protected bool isLoading { get; set; } = false; protected List? ListRecord { get; set; } = null; [Inject] protected WDCRefreshService WDCRefresh { get; set; } = null!; [Inject] protected WDCRefreshService WDCRService { get; set; } = null!; [Inject] protected WebDoorCreatorService WDCService { get; set; } = null!; [Inject] protected WDCVocabularyService WDVService { get; set; } = null!; [Inject] protected NavigationManager NavMan { get; set; } = null!; [Inject] protected WDCUserService WDCUService { get; set; } = null!; #endregion Protected Properties #region Protected Methods protected async Task exeFun(HwSvgObj.ActionReq action) { await Task.Delay(1); switch (action) { case HwSvgObj.ActionReq.Minus: // nulla (x ora) break; case HwSvgObj.ActionReq.Plus: await hwToAdd(""); break; case HwSvgObj.ActionReq.Select: default: await E_act2Rel.InvokeAsync(true); break; } } protected int getDoorOpInstNum(int doorOpId) { int answ = 0; if (DoorOpList != null) { answ = DoorOpList.FindIndex(x => x.DoorOpId == doorOpId); } return answ + 1; } protected async Task hwToAdd(string message) { await Task.Delay(1); DateTime adesso = DateTime.Now; List listOp = new List(); if (HwCode != null) { var listRecordFolder = await WDCService.ListValuesGetAll(HwCode, "Folder"); var listRecordTmp = await WDCService.ListValuesGetAll(HwCode, "template"); if (listRecordTmp!.Count == 0) { listRecordTmp = await WDCService.ListValuesGetAll(HwCode, "shape"); } Dictionary> defaultDict = new Dictionary>(); List listDefVal = new List(); Dictionary actDict = new Dictionary(); List defaultParamsList = new List(); string default2Design = ""; if (listRecordFolder != null) { var firstFolder = listRecordFolder.FirstOrDefault(); if (firstFolder != null) { actDict.Add(firstFolder.FieldName, firstFolder.Value.Trim()); if (listRecordTmp != null) { var listRecordTemplates = listRecordTmp.Where(x => x.Value.Contains(firstFolder.Value)).ToList(); if (listRecordTemplates != null) { var firstTemplate = listRecordTemplates.FirstOrDefault(); if (firstTemplate != null) { if (firstTemplate.DefaultVal != "") { default2Design = firstTemplate.DefaultVal; } else { default2Design = "1"; } actDict.Add(firstTemplate.FieldName, firstTemplate.Value.Trim()); } } } } var listRecordGP = await WDCService.ListValuesGetAll(HwCode, $"Graphic Parameters{default2Design}"); if (listRecordGP != null) { foreach (var item in listRecordGP) { if (item.isSerializable && item.DefaultVal.Contains(",")) { listDefVal = item.DefaultVal.Trim().Split(",").ToList(); actDict.Add(item.Value.Trim(), item.DefaultVal.Trim().Split(",")[0].Split("/")[0]); } else { if (item.DefaultVal.Contains("/")) { listDefVal = new List() { item.DefaultVal.Trim().Split("/")[0] }; actDict.Add(item.Value.Trim(), item.DefaultVal.Trim().Split("/")[0]); } else { listDefVal = new List() { item.DefaultVal.Trim() }; actDict.Add(item.Value.Trim(), item.DefaultVal.Trim()); } } //defaultParamsList.Add(listDefVal); defaultDict.Add(item.Value.Trim(), listDefVal); } //actDict.Add(HwToShow.TableName, actParamsList); var jsonDef = JsonConvert.SerializeObject(defaultDict); var jsonAct = JsonConvert.SerializeObject(actDict); DoorOpModel doorOpToAdd = new DoorOpModel() { DateIns = adesso, DateMod = adesso, UserIdIns = UserId, UserIdMod = UserId, ObjectId = HwCode, DoorId = DoorId, JsoncConfigVal = jsonDef, JsoncActVal = jsonAct }; // se debug + superadmin --> auto confirm if (autoApprove) { doorOpToAdd.userConfirm = UserId; doorOpToAdd.DtConfirm = DateTime.Now; } listOp.Add(doorOpToAdd); // salvo Door OP associate bool fatto = await WDCService.DoorOpInsert(DoorId, listOp); if (fatto) { //hwAdd = fatto; //await InvokeAsync(StateHasChanged); await ReloadData(); } } } } } private bool autoApprove = false; /// /// Gestione update da oggetto sottostante /// /// /// protected async Task manageUpdate(DoorOpModel currItem) { await Task.Delay(1); // aggiorna nelle DoorOpList... if (DoorOpList != null) { var item2rem = DoorOpList.Where(x => x.DoorOpId == currItem.DoorOpId).FirstOrDefault(); if (item2rem != null) { DoorOp2ModList.Remove(item2rem); } await Task.Delay(1); B_doorOpUpd = true; DoorOp2ModList.Add(currItem); } } /// /// Blazor: get query parm from the URL /// /// /// protected string GetQueryParm(string parmName) { var uriBuilder = new UriBuilder(NavMan.Uri); var q = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query); return q[parmName] ?? ""; } protected override async Task OnInitializedAsync() { await Task.Delay(1); var currMode = GetQueryParm("currMode"); if (!string.IsNullOrEmpty(currMode) && WDCUService.userRole == "SuperAdmin") { autoApprove = currMode.Equals("debug"); } WDCRefresh.EA_ConfDoorOp += WDCRefresh_EA_ConfDoorOp; } protected override async Task OnParametersSetAsync() { await ReloadData(); } protected async Task setRefOnDelete(bool isDel) { if (isDel) { await ReloadData(); } } protected string translate(string lemma) { string answ = ""; answ = WDVService.Traduci(Lingua, lemma); return answ; } #endregion Protected Methods #region Private Methods private async Task ReloadData() { isLoading = true; //await Task.Delay(50); await InvokeAsync(StateHasChanged); ListRecord = null; DoorOpList = null; await Task.Delay(1); ListRecord = await WDCService.DoorOpGetByDoorId(DoorId); if (ListRecord != null) { DoorOpList = ListRecord.Where(x => (x.DoorId == DoorId) && (x.ObjectId == HwCode)).ToList(); } isLoading = false; //await Task.Delay(50); await InvokeAsync(StateHasChanged); } private void WDCRefresh_EA_ConfDoorOp(object? sender, EventArgs e) { DOPEventArgs currArgs = (DOPEventArgs)e; // SE sono sula porta indicata + objId corretto --> refresh if (currArgs.DoorId == DoorId && currArgs.ObjectId == HwCode) { var pupd = InvokeAsync(async () => await ReloadData()); } } #endregion Private Methods } }