diff --git a/REST/Insomnia_WebDoor.json b/REST/Insomnia_WebDoor.json new file mode 100644 index 0000000..36ec7c1 --- /dev/null +++ b/REST/Insomnia_WebDoor.json @@ -0,0 +1 @@ +{"_type":"export","__export_format":4,"__export_date":"2023-05-16T14:38:04.134Z","__export_source":"insomnia.desktop.app:v2023.2.0","resources":[{"_id":"req_b7cff8a2a8de4c2ca51d02adc65ce8bd","parentId":"fld_eea02778569b41469ca39839d88e5843","modified":1684243207505,"created":1684242571463,"url":"{{ _.BASE_URL_UI }}/api/DoorImage/GetImage.svg?DoorId=asbc","name":"GetImage","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1656447728541.75,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_eea02778569b41469ca39839d88e5843","parentId":"wrk_1047c5920cea47239ab6361fb305d049","modified":1684242580401,"created":1684242559791,"name":"Services","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1614755481667.875,"_type":"request_group"},{"_id":"wrk_1047c5920cea47239ab6361fb305d049","parentId":null,"modified":1683871941985,"created":1683871941985,"name":"WebDoor","description":"","scope":"collection","_type":"workspace"},{"_id":"req_9f71a801a9954749974a85db789b75f9","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1683872944892,"created":1683872677272,"url":"{{ BASE_URL }}/api/Alive","name":"Alive","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1568635147332.875,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_e967cecdcd484143b8342b2f99373f05","parentId":"wrk_1047c5920cea47239ab6361fb305d049","modified":1683872631698,"created":1683871942040,"name":"QUEUE","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1573063234794,"_type":"request_group"},{"_id":"req_33c1140eb4a9404293bcb7a050947aa6","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1683872981739,"created":1683871942041,"url":"{{ BASE_URL }}/api/Queue/ActLenght","name":"Queue: ActLenght","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1568635147328.1875,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_04af1db5d237446785789f98ee4a41b0","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1683873069615,"created":1683873052089,"url":"{{ BASE_URL }}/api/Queue/StatusList","name":"Queue: StatusList","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1568635147325.8438,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_05c7701cb30d4c65aea5701ca0fb0d7e","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1683873098900,"created":1683873061615,"url":"{{ BASE_URL }}/api/Queue/TakeNextItems?numItems=1","name":"Queue: TakeNextItems","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1568635147324.6719,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_933a8db75390410bb594290151e07e17","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1683873309749,"created":1683871942060,"url":"{{ BASE_URL }}/api/Queue/ResetQueue?passPhrase=bbbBirdIsTheWord","name":"Queue: Reset","description":"","method":"POST","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1568635147313.9297,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_86f4ce7874e840999d56b92c8d1cc4e7","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1684142639756,"created":1684142633113,"url":"{{ BASE_URL }}/api/Queue/DCCacheCleanup?passPhrase=bbbBirdIsTheWord","name":"Door: CalcCache Cleanup","description":"","method":"POST","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1568635147313.9053,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_385ec0a2d52d4e049dbafdc014401e42","parentId":"fld_e967cecdcd484143b8342b2f99373f05","modified":1683876842459,"created":1683873151011,"url":"{{ BASE_URL }}/api/Queue/SaveProcResult","name":"Queue: SaveProcResult","description":"","method":"POST","body":{"mimeType":"application/json","text":"[\n\t{\n\t\"doorIdVers\": \"194.1\",\n\t\"validated\": true,\n\t\"errorMsg\": \"\",\n\t\"svgGen\": \" \",\n\t\"artifactPath\": \"\"\n\t},\n\t{\n\t\"doorIdVers\": \"186.1\",\n\t\"validated\": true,\n\t\"errorMsg\": \"\",\n\t\"svgGen\": \" \",\n\t\"artifactPath\": \"\"\n\t}\n]"},"parameters":[],"headers":[{"id":"pair_13bcc57d5469469880e48090f553b406","name":"Content-Type","value":"application/json"}],"authentication":{},"metaSortKey":-1568635147313.8809,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ec2a19d054f240dbb5a1bc4f7aa0e073","parentId":"wrk_1047c5920cea47239ab6361fb305d049","modified":1683871941986,"created":1683871941986,"name":"Base Environment","data":{},"dataPropertyOrder":null,"color":null,"isPrivate":false,"metaSortKey":1568635121297,"_type":"environment"},{"_id":"jar_9208e8802d4545bc9dc0cab97b68ce7f","parentId":"wrk_1047c5920cea47239ab6361fb305d049","modified":1683871941997,"created":1683871941997,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_cb4cf1b0be6f4384acf7d74597615a05","parentId":"wrk_1047c5920cea47239ab6361fb305d049","modified":1683871942123,"created":1683871941999,"fileName":"WebDoor","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_26d4acddae6a4fb99807e6c5c2d4f2f6","parentId":"env_ec2a19d054f240dbb5a1bc4f7aa0e073","modified":1684242666469,"created":1683871941987,"name":"Dev","data":{"BASE_URL":"https://localhost:7043","BASE_URL_UI":"https://localhost:7196"},"dataPropertyOrder":{"&":["BASE_URL","BASE_URL_UI"]},"color":null,"isPrivate":false,"metaSortKey":1573051003227,"_type":"environment"},{"_id":"env_320dbe95decf456f80d353bd7bd63b30","parentId":"env_ec2a19d054f240dbb5a1bc4f7aa0e073","modified":1683872932739,"created":1683871941990,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/WDC/SRV"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":null,"isPrivate":false,"metaSortKey":1573051003277,"_type":"environment"},{"_id":"env_7a12ac17116349cc83a0ecd07f529797","parentId":"env_ec2a19d054f240dbb5a1bc4f7aa0e073","modified":1683872935645,"created":1683871941993,"name":"IIS02","data":{"BASE_URL":"https://iis02.egalware.com/WDC/SRV"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":null,"isPrivate":false,"metaSortKey":1573051003377,"_type":"environment"},{"_id":"env_65f3b45887104cad821f07ac19cd26ed","parentId":"env_ec2a19d054f240dbb5a1bc4f7aa0e073","modified":1683872938145,"created":1683872609078,"name":"IIS04","data":{"BASE_URL":"https://iis04.egalware.com/WDC/SRV"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":null,"isPrivate":false,"metaSortKey":1573051003327,"_type":"environment"}]} \ No newline at end of file diff --git a/WebDoorCreator.Data/DbModels/DoorModel.cs b/WebDoorCreator.Data/DbModels/DoorModel.cs index a62f594..2682d47 100644 --- a/WebDoorCreator.Data/DbModels/DoorModel.cs +++ b/WebDoorCreator.Data/DbModels/DoorModel.cs @@ -94,6 +94,25 @@ namespace WebDoorCreator.Data.DbModels [ForeignKey("TypeId")] public virtual DoorTypeModel? TypeNav { get; set; } - + + public DoorModel ObjClone(string userId) + { + DateTime adesso = DateTime.Now; + DoorModel answ = new DoorModel() + { + MeasureUnit = MeasureUnit, + TypeId = TypeId, + DoorExtCode = DoorExtCode, + DateIns = adesso, + UserIdIns = userId, + DateMod = adesso, + UserIdMod = userId, + DoorDescript = DoorDescript, + UnitCost = UnitCost, + DateLockExpiry = DateLockExpiry, + UserIdLock = UserIdLock + }; + return answ; + } } } diff --git a/WebDoorCreator.Data/Services/QueueDataService.cs b/WebDoorCreator.Data/Services/QueueDataService.cs index 244631b..55cca09 100644 --- a/WebDoorCreator.Data/Services/QueueDataService.cs +++ b/WebDoorCreator.Data/Services/QueueDataService.cs @@ -150,6 +150,30 @@ namespace WebDoorCreator.Data.Services return errVal.ToString(); } + /// + /// Cerca nelle esecuzioni ultimo SVG della porta e lo restituisce... + /// + /// + /// + public async Task DoorGetLastSvg(int DoorId) + { + string answ = ""; + // cerco in hashtable dei task eseguiti ultimo x porta corrente... + var doorData = await RequestDoneGetSingle(DoorId); + if (doorData != null && doorData.Count > 0) + { + var firstRecord = doorData.FirstOrDefault(); + // recupero da REDIS + var currSvgKey = new RedisKey($"{Constants.CALC_REQ_SVG_CACHE}:{firstRecord.Key}:{firstRecord.Value}"); + var rawData = await redisDb.StringGetAsync(currSvgKey); + if (rawData.HasValue) + { + answ = $"{rawData}"; + } + } + return answ; + } + /// /// Remove for single hash record /// @@ -370,6 +394,35 @@ namespace WebDoorCreator.Data.Services return dictResult; } + /// + /// Get LAST request done for DoorId + /// + /// + /// + public async Task> RequestDoneGetSingle(int DoorId) + { + string source = "REDIS"; + long numReq = 0; + Dictionary dictResult = new Dictionary(); + // cerco da cache + RedisKey currKey = new RedisKey(Constants.CALC_REQ_DONE); + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + numReq = redisDb.HashLength(currKey); + if (numReq > 0) + { + var rawData = await redisDb.HashGetAsync(currKey, $"{DoorId}"); + if (rawData.HasValue) + { + dictResult.Add($"{DoorId}", $"{rawData}"); + } + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"RequestDoneGetSingle | {source} in: {ts.TotalMilliseconds} ms"); + return dictResult; + } + /// /// Remove for single hash record /// @@ -609,7 +662,7 @@ namespace WebDoorCreator.Data.Services { // salvo in area REDIS currSvgKey = new RedisKey($"{Constants.CALC_REQ_SVG_CACHE}:{sDoorId}:{sCurrVers}"); - await redisDb.StringSetAsync(currSvgKey, calcTask.SvgGen, DayLongCache); + await redisDb.StringSetAsync(currSvgKey, calcTask.SvgGen, WeekLongCache); // elimino dalle code proc/err await RequestProcessingRemove(sDoorId); await RequestErrRemove(sDoorId); @@ -621,7 +674,7 @@ namespace WebDoorCreator.Data.Services { // salvo in area REDIS currSvgKey = new RedisKey($"{Constants.CALC_REQ_ERRS}:{sDoorId}:{sCurrVers}"); - await redisDb.StringSetAsync(currSvgKey, calcTask.ErrorMsg, DayLongCache); + await redisDb.StringSetAsync(currSvgKey, calcTask.ErrorMsg, WeekLongCache); // elimino dalle code proc/done await RequestProcessingRemove(sDoorId); await RequestDoneRemove(sDoorId); @@ -963,6 +1016,14 @@ namespace WebDoorCreator.Data.Services get => TimeSpan.FromSeconds(cacheTtlLong * 10 * rnd.Next(900, 1100) / 1000); } + /// + /// Durata cache di 24h + /// + private TimeSpan WeekLongCache + { + get => TimeSpan.FromHours(24 * 7); + } + #endregion Private Properties #region Private Methods diff --git a/WebDoorCreator.UI/Components/DoorDef/DoorPreview.razor.cs b/WebDoorCreator.UI/Components/DoorDef/DoorPreview.razor.cs index 0845ee7..baf28b1 100644 --- a/WebDoorCreator.UI/Components/DoorDef/DoorPreview.razor.cs +++ b/WebDoorCreator.UI/Components/DoorDef/DoorPreview.razor.cs @@ -14,8 +14,6 @@ namespace WebDoorCreator.UI.Components.DoorDef set { _svgContent = value; - //Log.Info($"Ricevuto {value}"); - //StateHasChanged(); } } diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor index 3998f80..9253987 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor @@ -4,19 +4,26 @@ {
- +
- +
- +
} +
+
+ +
+
@if (DoorsList == null || DoorsList.Count == 0) - { } + { + + } else { int idxCount = 0; @@ -26,7 +33,20 @@ imgPath = $"images/LogoEgw{idxCount % 5:00}.png"; idxCount++;
- + @if (isCloneMode) + { + + + } + else if (isAddRemMode) + { + + } + else + { + + + }
} diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs index 8a3d739..db462d3 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs @@ -177,6 +177,47 @@ namespace WebDoorCreator.UI.Components.DoorMan // rimando alla pagina... dettaglio... NavManager.NavigateTo($"/DoorDefinition?idOrd={currOrderId}&idDoor={doorId}"); } + /// + /// Path del servizio di recupero SVG delle porte + /// + /// + /// + protected string DoorSvgUrl(int doorId) + { + return $"api/DoorImage/GetImage.svg?DoorId={doorId}"; + } + + protected bool isCloneMode { get; set; } + protected bool isAddRemMode { get; set; } + + protected async void setCloneDoorMode(string message) + { + await Task.Delay(1); + isCloneMode = !isCloneMode; + isAddRemMode = false; + await InvokeAsync(StateHasChanged); + } + protected async void setAddRemDoor() + { + await Task.Delay(1); + isAddRemMode = !isAddRemMode; + isCloneMode = false; + await InvokeAsync(StateHasChanged); + } + + protected async Task doClone(string message) + { + var door2Clone = DoorsList?.Where(x => x.DoorId == int.Parse(message)).FirstOrDefault(); + + if (door2Clone != null) + { + var doorOpToAdd = door2Clone.ObjClone(userId); + + // salvo! + var done = await WDService.DoorInsert(doorOpToAdd); + await ReloadData(); + } + } protected async void sendToAbh(int ordId, int orderStat) { if (orderStat == 10) @@ -222,5 +263,26 @@ namespace WebDoorCreator.UI.Components.DoorMan } } } + + protected async Task addOneDoorNumber(string msg1, string msg2) + { + //var door = new DoorModel(); + var done = await WDService.DoorModQty(int.Parse(msg1), int.Parse(msg2), true); + if (done) + { + await InvokeAsync(StateHasChanged); + await ReloadData(); + } + } + protected async Task removeOneDoorNumber(string msg1, string msg2) + { + //var door = new DoorModel(); + var done = await WDService.DoorModQty(int.Parse(msg1), int.Parse(msg2), false); + if (done) + { + await InvokeAsync(StateHasChanged); + await ReloadData(); + } + } } } \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareList.razor b/WebDoorCreator.UI/Components/Hardware/HardwareList.razor index ee2b8f8..34595b1 100644 --- a/WebDoorCreator.UI/Components/Hardware/HardwareList.razor +++ b/WebDoorCreator.UI/Components/Hardware/HardwareList.razor @@ -4,16 +4,9 @@ @if (HwToShow != null) {
-
-
-
- @(translate(HwToShow.Label)) -
-
-
-
+ - +
diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareList.razor.cs b/WebDoorCreator.UI/Components/Hardware/HardwareList.razor.cs index bcdc041..afa1bf9 100644 --- a/WebDoorCreator.UI/Components/Hardware/HardwareList.razor.cs +++ b/WebDoorCreator.UI/Components/Hardware/HardwareList.razor.cs @@ -21,8 +21,10 @@ namespace WebDoorCreator.UI.Components.Hardware [CascadingParameter] public string UserId { get; set; } = ""; +#if false [Parameter] - public bool isDoorOpConf { get; set; } + public bool isDoorOpConf { get; set; } +#endif #endregion Public Properties @@ -191,10 +193,7 @@ namespace WebDoorCreator.UI.Components.Hardware { HwToShow = null; } - if (!isDoorOpConf) - { - await ReloadData(); - } + await ReloadData(); } protected string setBgColor(string ObjId) @@ -247,6 +246,14 @@ namespace WebDoorCreator.UI.Components.Hardware } } + protected async Task setRefOnDelete(bool isDel) + { + if (isDel) + { + await ReloadData(); + } + } + protected int getInstNumber(string hwCode) { int answ = 0; diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor index 4bfdacf..f5af628 100644 --- a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor +++ b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor @@ -1,12 +1,27 @@ -@if (DoorOpList != null) +@if (isLoading) { -
- @foreach (var item in DoorOpList) - { -
- + +} +else +{ + @if (DoorOpList != null) + { +
+
+
+ @(translate(HwLabel)) +
+
- } -
+
+
+ @foreach (var item in DoorOpList) + { +
+ +
+ } +
+ } } diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.cs b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.cs index 09d016e..91932b5 100644 --- a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.cs +++ b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.cs @@ -1,16 +1,23 @@ using Microsoft.AspNetCore.Components; +using Newtonsoft.Json; +using WebDoorCreator.Data; using WebDoorCreator.Data.DbModels; +using WebDoorCreator.UI.Components.DoorMan; using WebDoorCreator.UI.Data; +using static WebDoorCreator.UI.Data.WDCRefreshService; namespace WebDoorCreator.UI.Components.Hardware { - public partial class HardwareNewPanel + 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; } @@ -22,50 +29,182 @@ namespace WebDoorCreator.UI.Components.Hardware [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; } = ""; - protected bool _isDoorOpConf { get; set;} = false; - - [Parameter] - public bool isDoorOpConf - { - get => _isDoorOpConf; - set - { - if (_isDoorOpConf != value) - { - _isDoorOpConf = value; - var pupd = InvokeAsync(async () => await ReloadData()); - } - } - } + protected bool _isDoorOpConf { get; set; } = false; #endregion Public Properties #region Protected Properties protected List? DoorOpList { get; set; } = null!; + protected List DoorOp2ModList { get; set; } = new List(); protected int instNum { get; set; } = 1; [Inject] - protected WebDoorCreatorService WDCService { get; set; } = null!; + protected WDCRefreshService WDCRefresh { get; set; } = null!; + [Inject] + protected WebDoorCreatorService WDCService { get; set; } = null!; + [Inject] + protected WDCVocabularyService WDVService { get; set; } = null!; + + public void Dispose() + { + WDCRefresh.EA_ConfDoorOp -= WDCRefresh_EA_ConfDoorOp; + } + + protected override async Task OnInitializedAsync() + { + await Task.Delay(1); + WDCRefresh.EA_ConfDoorOp += WDCRefresh_EA_ConfDoorOp; + //return base.OnInitializedAsync(); + } + + protected string translate(string lemma) + { + string answ = ""; + + answ = WDVService.Traduci(Lingua, lemma); + + return answ; + } + + 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 Protected Properties #region Protected Methods - [Inject] - protected WDCRefreshService WDCRService { get; set; } = null!; - protected bool B_doorOpUpd { get => WDCRService.isDoorOpUpd; set => WDCRService.isDoorOpUpd = value; } + [Inject] + protected WDCRefreshService WDCRService { get; set; } = null!; + protected async Task hwToAdd() + { + await Task.Delay(1); + DateTime adesso = DateTime.Now; + List listOp = new List(); + + if (HwCode != null) + { + if (DoorOp2ModList.Count == 0) + { + 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 + }; + listOp.Add(doorOpToAdd); + // salvo Door OP associate + bool fatto = await WDCService.DoorOpInsert(DoorId, listOp); + + if (fatto) + { + //hwAdd = fatto; + await InvokeAsync(StateHasChanged); + } + } + } + } + } + } + /// /// Gestione update da oggetto sottostante /// @@ -80,15 +219,14 @@ namespace WebDoorCreator.UI.Components.Hardware var item2rem = DoorOpList.Where(x => x.DoorOpId == currItem.DoorOpId).FirstOrDefault(); if (item2rem != null) { - DoorOpList.Remove(item2rem); + DoorOp2ModList.Remove(item2rem); } await Task.Delay(1); B_doorOpUpd = true; - DoorOpList.Add(currItem); + DoorOp2ModList.Add(currItem); } } - protected override async Task OnParametersSetAsync() { await ReloadData(); @@ -98,16 +236,38 @@ namespace WebDoorCreator.UI.Components.Hardware #region Private Methods + protected bool isLoading { get; set; } = false; + + protected List? ListRecord { get; set; } = null; + + protected async Task setRefOnDelete(bool isDel) + { + if (isDel) + { + await ReloadData(); + } + } + private async Task ReloadData() { - var ListRecord = await WDCService.DoorOpGetByDoorId(DoorId); + isLoading = true; + //await Task.Delay(50); + await InvokeAsync(StateHasChanged); + ListRecord = null; + DoorOpList = null; + await Task.Delay(1); + ListRecord = await WDCService.DoorOpGetByDoorId(DoorId); var tempListVal = await WDCService.ListValuesGetAll(HwCode, "Folder"); if (ListRecord != null) { DoorOpList = ListRecord.Where(x => (x.DoorId == DoorId) && (x.ObjectId == HwCode)).ToList(); } + isLoading = false; + //await Task.Delay(50); + await InvokeAsync(StateHasChanged); } - #endregion Private Methods + + } } \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.css b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.css new file mode 100644 index 0000000..e6277c0 --- /dev/null +++ b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.css @@ -0,0 +1,49 @@ +.rectangle { + height: 2.75rem; + width: 75%; + background: #CFD8DC; + position: relative; + margin-bottom: 4rem; + margin-top: 1.25rem; + border-radius: 0.8rem; + display: flex; + flex-wrap: wrap; + align-items: center; + color: #000; + font-weight: bold; +} +.circle { + position: absolute; + height: 6.25rem; + width: 6.25rem; + border-radius: 50%; + border: 4px solid #CFD8DC; + left: 100%; + margin-left: -1.563rem; + top: -1.5rem; + background: black; +} +.rectangleDetail { + height: 2.75rem; + width: 75%; + position: relative; + margin-bottom: 4rem; + margin-top: 1.25rem; + border-radius: 0.8rem; + display: flex; + flex-wrap: wrap; + align-items: center; + color: #000; + font-weight: bold; +} +.circleDetail { + position: absolute; + height: 6.25rem; + width: 6.25rem; + border-radius: 50%; + border: 4px solid #CFD8DC; + left: 100%; + margin-left: -1.563rem; + top: -1.5rem; + background: black; +} \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.less b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.less new file mode 100644 index 0000000..5030bb7 --- /dev/null +++ b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.less @@ -0,0 +1,58 @@ +.rectangle { + height: 2.75rem; + width: 75%; + background: #CFD8DC; + position: relative; + margin-bottom: 4rem; + margin-top: 1.25rem; + border-radius: 0.8rem; + display: flex; + flex-wrap: wrap; + align-items: center; + color: #000; + font-weight: bold; +} + +.circle { + position: absolute; + height: 6.25rem; + width: 6.25rem; + border-radius: 50%; + border: 4px solid #CFD8DC; + left: 100%; + margin-left: -1.563rem; + top: -1.5rem; + background: black; +} + + +.rectangleDetail { + height: 2.75rem; + width: 75%; + //background: #CFD8DC; + position: relative; + margin-bottom: 4rem; + margin-top: 1.25rem; + border-radius: 0.8rem; + display: flex; + flex-wrap: wrap; + align-items: center; + color: #000; + font-weight: bold; +} + +.circleDetail { + position: absolute; + height: 6.25rem; + width: 6.25rem; + border-radius: 50%; + border: 4px solid #CFD8DC; + left: 100%; + margin-left: -1.563rem; + top: -1.5rem; + background: black; +} + +.all { + //width: 72rem; +} diff --git a/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.min.css b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.min.css new file mode 100644 index 0000000..7450833 --- /dev/null +++ b/WebDoorCreator.UI/Components/Hardware/HardwareNewPanel.razor.min.css @@ -0,0 +1 @@ +.rectangle{height:2.75rem;width:75%;background:#cfd8dc;position:relative;margin-bottom:4rem;margin-top:1.25rem;border-radius:.8rem;display:flex;flex-wrap:wrap;align-items:center;color:#000;font-weight:bold;}.circle{position:absolute;height:6.25rem;width:6.25rem;border-radius:50%;border:4px solid #cfd8dc;left:100%;margin-left:-1.563rem;top:-1.5rem;background:#000;}.rectangleDetail{height:2.75rem;width:75%;position:relative;margin-bottom:4rem;margin-top:1.25rem;border-radius:.8rem;display:flex;flex-wrap:wrap;align-items:center;color:#000;font-weight:bold;}.circleDetail{position:absolute;height:6.25rem;width:6.25rem;border-radius:50%;border:4px solid #cfd8dc;left:100%;margin-left:-1.563rem;top:-1.5rem;background:#000;} \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/Hardware/HwSingleInstance.razor.cs b/WebDoorCreator.UI/Components/Hardware/HwSingleInstance.razor.cs index 08e60f0..c8d354e 100644 --- a/WebDoorCreator.UI/Components/Hardware/HwSingleInstance.razor.cs +++ b/WebDoorCreator.UI/Components/Hardware/HwSingleInstance.razor.cs @@ -2,9 +2,11 @@ using Microsoft.AspNetCore.Components; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.JSInterop; using Newtonsoft.Json; +using System.Security.Policy; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.Services; using WebDoorCreator.UI.Data; +using static WebDoorCreator.UI.Data.WDCRefreshService; namespace WebDoorCreator.UI.Components.Hardware { @@ -17,6 +19,8 @@ namespace WebDoorCreator.UI.Components.Hardware [Parameter] public EventCallback E_recordUpdate { get; set; } + [Parameter] + public EventCallback E_act2Rel { get; set; } [Parameter] public string HwCode { get; set; } = ""; @@ -160,9 +164,11 @@ namespace WebDoorCreator.UI.Components.Hardware List doorOpAddList = new List() { doorOpToAdd }; // salvo! - await WDCService.DoorOpInsert(DoorOpInst.DoorId, doorOpAddList); + var done = await WDCService.DoorOpInsert(DoorOpInst.DoorId, doorOpAddList); + await E_act2Rel.InvokeAsync(done); await FullReloadData(); } +#if false protected async Task doConfirm() { @@ -177,15 +183,17 @@ namespace WebDoorCreator.UI.Components.Hardware DoorOpInst.GraphicParams = graphicParams; // salvo! await doSave(); - } + } +#endif protected async Task doDeleteInst() { - var done = await JSRuntime.InvokeAsync("confirm", "Delete PERMANENTLY the current record?"); + var delConf = await JSRuntime.InvokeAsync("confirm", "Delete PERMANENTLY the current record?"); - if (done) + if (delConf) { - await WDCService.DoorOpDelete(DoorOpInst); + var done = await WDCService.DoorOpDelete(DoorOpInst); + await E_act2Rel.InvokeAsync(done); await FullReloadData(); } } @@ -231,6 +239,35 @@ namespace WebDoorCreator.UI.Components.Hardware await FullReloadData(); } + +#if false + + private void WDCRefresh_EA_ConfDoorOp(object? sender, EventArgs e) + { + DOPEventArgs currArgs = (DOPEventArgs)e; + // SE sono sula porta indicata + objId corretto --> refresh + if (currArgs.DoorId == DoorOpInst.DoorId && currArgs.DoorOpId == DoorOpInst.DoorOpId && currArgs.ObjectId == DoorOpInst.ObjectId)//&& currArgs.ObjectId == obid ) + { + var pupd = InvokeAsync(async () => await FullReloadData()); + } + } + + public void Dispose() + { + WDCRefresh.EA_ConfDoorOp -= WDCRefresh_EA_ConfDoorOp; + } + + [Inject] + protected WDCRefreshService WDCRefresh { get; set; } = null!; + + protected override async Task OnInitializedAsync() + { + await FullReloadData(); + await Task.Delay(1); + WDCRefresh.EA_ConfDoorOp += WDCRefresh_EA_ConfDoorOp; + } +#endif + protected string translate(string lemma) { string answ = ""; @@ -252,7 +289,7 @@ namespace WebDoorCreator.UI.Components.Hardware private string pathFinder(int id) { - string answ = $"HwPdfConfirm?idHwInst={id}"; + string answ = $"HwPdfConfirm?doorOpId={id}&doorId={DoorOpInst.DoorId}&objectId={DoorOpInst.ObjectId}"; return answ; } diff --git a/WebDoorCreator.UI/Components/Order/OrderList.razor b/WebDoorCreator.UI/Components/Order/OrderList.razor index 675a1c4..314be16 100644 --- a/WebDoorCreator.UI/Components/Order/OrderList.razor +++ b/WebDoorCreator.UI/Components/Order/OrderList.razor @@ -37,10 +37,10 @@ else
*@ - @* @if (item.OrderStatus < (int)Core.Enum.OrderStatus.Sent) + @if (item.OrderStatus <= 10) { - }*@ + } } diff --git a/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor b/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor index 451d005..9a79579 100644 --- a/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor +++ b/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor @@ -1,14 +1,14 @@  - + @**@
@foreach (var item in TextData) { -
+
@item.Key
-
+
@item.Value
} @@ -17,14 +17,39 @@ - - + - - - + + + + + + + @if (ShowPlusMinus) + { + + + } + else if (ShowClone) + { + + } + - + @if (ShowPlusMinus) + { + + + + } + else if (ShowClone) + { + + } + else + { + + } diff --git a/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor.cs b/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor.cs index b7ddb01..7f21997 100644 --- a/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor.cs +++ b/WebDoorCreator.UI/Components/SvgComp/DoorSvgObj.razor.cs @@ -9,15 +9,39 @@ namespace WebDoorCreator.UI.Components.SvgComp [Parameter] public EventCallback EC_ExeFunct { get; set; } + [Parameter] + public EventCallback EC_ExeMinus { get; set; } + + [Parameter] + public EventCallback EC_ExePlus { get; set; } + + [Parameter] + public EventCallback EC_ExeClone { get; set; } + [Parameter] public string ImagePath { get; set; } = "images/LogoEgw.png"; + [Parameter] + public string LeftTextClass { get; set; } = ""; + [Parameter] public string LineColor { get; set; } = "#00838F"; [Parameter] public int LineWidth { get; set; } = 8; + [Parameter] + public string Message1 { get; set; } = ""; + + [Parameter] + public string Message2 { get; set; } = ""; + + + [Parameter] + public string PlusColor { get; set; } = "green"; + [Parameter] + public string MinusColor { get; set; } = "red"; + [Parameter] public int ObjH { get; set; } = 204; @@ -27,28 +51,28 @@ namespace WebDoorCreator.UI.Components.SvgComp [Parameter] public int ObjW { get; set; } = 450; + [Parameter] + public string RightTextClass { get; set; } = ""; + + [Parameter] + public bool ShowPlusMinus { get; set; } = false; + [Parameter] + public bool ShowClone { get; set; } = false; + [Parameter] public Dictionary TextData { get; set; } = new Dictionary(); [Parameter] public string TextStyle { get; set; } = "font-size: 1.5em; fill: #000;"; - [Parameter] - public string Message1 { get; set; } = ""; - [Parameter] - public string Message2 { get; set; } = ""; - - [Parameter] - public string LeftTextClass { get; set; } = ""; - [Parameter] - public string RightTextClass { get; set; } = ""; - #endregion Public Properties #region Protected Properties protected LineData BaseLine { get; set; } = null!; + protected LineData ClickArea { get; set; } = null!; + protected CircleData CircleImg { get; set; } = null!; protected CircleData CircleLine { get; set; } = null!; @@ -74,6 +98,20 @@ namespace WebDoorCreator.UI.Components.SvgComp EC_ExeFunct.InvokeAsync(true); } + protected void execMinus() + { + EC_ExeMinus.InvokeAsync(true); + } + + protected void execPlus() + { + EC_ExePlus.InvokeAsync(true); + } + protected void execClone() + { + EC_ExeClone.InvokeAsync(true); + } + protected override void OnParametersSet() { setupGraphParams(); @@ -155,6 +193,7 @@ namespace WebDoorCreator.UI.Components.SvgComp CircleLine = new CircleData(ObjW - LineWidth - (ObjH / 2), ObjH / 2, (ObjH - LineWidth) / 2); CircleImg = new CircleData(ObjW - LineWidth - (ObjH / 2), ObjH / 2, (ObjH - 2 * LineWidth) / 2); BaseLine = new LineData(new PointData(0, ObjH - LineWidth / 2), new PointData(ObjW - LineWidth - (ObjH / 2), ObjH - LineWidth / 2)); + ClickArea = new LineData(new PointData(ObjW - LineWidth - ObjH, 0), new PointData(ObjW, 0)); LineDist = ObjH / 4; } diff --git a/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor new file mode 100644 index 0000000..bcdd3f8 --- /dev/null +++ b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor @@ -0,0 +1,44 @@ + + + +
+
+ @ItemName +
+
+ @if (ItemCount > 0) + { + @ItemCount + } + else + { +

 

+ } +
+
+
+
+ + + + + + + + + + @if (ShowPlus) + { + + } + + + @if (ShowPlus) + { + + } + else + { + + } +
\ No newline at end of file diff --git a/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.cs b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.cs new file mode 100644 index 0000000..d5b65cf --- /dev/null +++ b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.cs @@ -0,0 +1,209 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using System.Net.Http; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.Web.Virtualization; +using Microsoft.JSInterop; +using WebDoorCreator.UI; +using WebDoorCreator.UI.Components; +using WebDoorCreator.UI.Components.Buttons; +using WebDoorCreator.UI.Components.CompMan; +using WebDoorCreator.UI.Components.DoorMan; +using WebDoorCreator.UI.Components.DoorDef; +using WebDoorCreator.UI.Components.Gen; +using WebDoorCreator.UI.Components.Order; +using WebDoorCreator.UI.Components.Users; +using WebDoorCreator.UI.Components.Hardware; +using WebDoorCreator.UI.Components.SvgComp; +using WebDoorCreator.UI.Components.Filters; +using WebDoorCreator.UI.Components.Report; +using WebDoorCreator.UI.Shared; +using WebDoorCreator.Data.DbModels; +using EgwCoreLib.Razor; + +namespace WebDoorCreator.UI.Components.SvgComp +{ + public partial class HwSvgObj + { + #region Public Properties + + [Parameter] + public EventCallback EC_ExeFunct { get; set; } + + [Parameter] + public EventCallback EC_ExePlus { get; set; } + + [Parameter] + public string ImagePath { get; set; } = "images/LogoEgw.png"; + + [Parameter] + public string LineColor { get; set; } = "#00838F"; + + [Parameter] + public int LineWidth { get; set; } = 8; + + [Parameter] + public string ItemName { get; set; } = ""; + + [Parameter] + public int ItemCount { get; set; } = 0; + + + [Parameter] + public string PlusColor { get; set; } = "green"; + + [Parameter] + public int ObjH { get; set; } = 204; + + [Parameter] + public int ObjId { get; set; } = 0; + + [Parameter] + public int ObjW { get; set; } = 450; + + [Parameter] + public bool ShowPlus { get; set; } = false; + + [Parameter] + public string TextStyle { get; set; } = "font-size: 2.5em;"; + + #endregion Public Properties + + #region Protected Properties + + + protected CircleData CircleImg { get; set; } = null!; + + protected CircleData CircleLine { get; set; } = null!; + + protected int LineDist { get; set; } = 20; + + protected int TextAreaHeight + { + get => (ObjH / 2 * 110 / 100); + } + + protected int TextAreaWidth + { + get => ObjW - (ObjH * 90 / 100); + } + + protected string cardClass + { + get => ItemCount > 0 ? "bg-primary text-light" : "bg-inactive text-dark"; + } + + #endregion Protected Properties + + #region Protected Methods + + /// + /// Invia evento principale + /// + /// se true manda sempre EC_ExeFunct, altrimenti NON invia se showPlus attivo... + protected void execFunc(bool forceSend) + { + if (forceSend || !ShowPlus) + { + EC_ExeFunct.InvokeAsync(true); + } + } + + protected void execPlus() + { + EC_ExePlus.InvokeAsync(true); + } + + protected override void OnParametersSet() + { + setupGraphParams(); + } + + #endregion Protected Methods + + #region Protected Classes + + protected class CircleData + { + #region Public Constructors + + public CircleData(int px, int py, int radius) + { + cx = px; + cy = py; + rad = radius; + } + + #endregion Public Constructors + + #region Public Properties + + public int cx { get; set; } = 0; + public int cy { get; set; } = 0; + public int rad { get; set; } = 100; + + #endregion Public Properties + } + + protected class LineData + { + #region Public Constructors + + public LineData(PointData pA, PointData pB) + { + p1 = pA; + p2 = pB; + } + + #endregion Public Constructors + + #region Public Properties + + public PointData p1 { get; set; } + public PointData p2 { get; set; } + + #endregion Public Properties + } + + protected class PointData + { + #region Public Constructors + + public PointData(int valx, int valy) + { + px = valx; + py = valy; + } + + #endregion Public Constructors + + #region Public Properties + + public int px { get; set; } = 0; + public int py { get; set; } = 0; + + #endregion Public Properties + } + + #endregion Protected Classes + + #region Private Methods + + private void setupGraphParams() + { + // calcolo i dati del cerchi... + CircleLine = new CircleData(ObjW - LineWidth - (ObjH / 2), ObjH / 2, (ObjH - LineWidth) / 2); + CircleImg = new CircleData(ObjW - LineWidth - (ObjH / 2), ObjH / 2, (ObjH - 2 * LineWidth) / 2); + LineDist = ObjH / 4; + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.css b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.css new file mode 100644 index 0000000..2434347 --- /dev/null +++ b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.css @@ -0,0 +1,7 @@ +.rectangle { + border-radius: 1.2rem; + font-weight: bold; +} +.bg-inactive { + background-color: #CFD8DC; +} \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.less b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.less new file mode 100644 index 0000000..d2f89a7 --- /dev/null +++ b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.less @@ -0,0 +1,8 @@ +.rectangle { + border-radius: 1.2rem; + font-weight: bold; +} + +.bg-inactive { + background-color: #CFD8DC; +} diff --git a/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.min.css b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.min.css new file mode 100644 index 0000000..f657e59 --- /dev/null +++ b/WebDoorCreator.UI/Components/SvgComp/HwSvgObj.razor.min.css @@ -0,0 +1 @@ +.rectangle{border-radius:1.2rem;font-weight:bold;}.bg-inactive{background-color:#cfd8dc;} \ No newline at end of file diff --git a/WebDoorCreator.UI/Controllers/DoorImageController.cs b/WebDoorCreator.UI/Controllers/DoorImageController.cs new file mode 100644 index 0000000..4ae68f7 --- /dev/null +++ b/WebDoorCreator.UI/Controllers/DoorImageController.cs @@ -0,0 +1,52 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using NLog; +using NLog.Fluent; +using WebDoorCreator.Data.Services; +using static System.Net.Mime.MediaTypeNames; + +namespace WebDoorCreator.UI.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class DoorImageController : ControllerBase + { + [HttpGet("GetImage.svg")] + public async Task GetImage(int DoorId) + { + string svgContent = await QDataServ.DoorGetLastSvg(DoorId); + var result = System.Text.Encoding.UTF8.GetBytes(svgContent); + return File(result, "image/svg+xml"); + } + + // GET: api/Alive + [HttpGet] + public string Get() + { + return "OK"; + } + + public DoorImageController(IConfiguration configuration, QueueDataService DataService) + { + Log.Info("Starting DoorImageController"); + _configuration = configuration; + QDataServ = DataService; + Log.Info("Avviato DoorImageController"); + } + + + #region Private Fields + + private static IConfiguration _configuration = null!; + + private static Logger Log = LogManager.GetCurrentClassLogger(); + + #endregion Private Fields + + #region Private Properties + + private QueueDataService QDataServ { get; set; } = null!; + + #endregion Private Properties + } +} diff --git a/WebDoorCreator.UI/Data/WDCRefreshService.cs b/WebDoorCreator.UI/Data/WDCRefreshService.cs index 9f03254..e5019ba 100644 --- a/WebDoorCreator.UI/Data/WDCRefreshService.cs +++ b/WebDoorCreator.UI/Data/WDCRefreshService.cs @@ -1,12 +1,15 @@ -namespace WebDoorCreator.UI.Data +using Microsoft.AspNetCore.Components; +using WebDoorCreator.Data; + +namespace WebDoorCreator.UI.Data { public class WDCRefreshService { #region Public Events public event Action EA_UpdDoorOp = null!; - public event Action EA_ConfDoorOp = null!; - + //public EventCallback EA_ConfDoorOp { get; set; } + public event EventHandler EA_ConfDoorOp = delegate { }; #endregion Public Events @@ -27,6 +30,7 @@ } } +#if false public bool isDoorOpConf { get => _isDoorOpConf; @@ -38,7 +42,8 @@ reportDoorOpConf(); } } - } + } +#endif #endregion Public Properties @@ -51,11 +56,18 @@ EA_UpdDoorOp?.Invoke(); } } - protected void reportDoorOpConf() + public void ReportDoorOpConf(int doorId, int doorOpId, string objId) { + DOPEventArgs currOpr = new DOPEventArgs() + { + DoorId = doorId, + DoorOpId = doorOpId, + ObjectId = objId + }; + // se qualcuno ascolta sollevo evento nuovo valore... if (EA_ConfDoorOp != null) { - EA_ConfDoorOp?.Invoke(); + EA_ConfDoorOp(this, currOpr); } } #endregion Protected Methods @@ -65,5 +77,12 @@ private bool _isDoorOpUpd { get; set; } = false; private bool _isDoorOpConf { get; set; } = false; #endregion Private Properties + + public class DOPEventArgs : EventArgs + { + public int DoorId { get; set; } = 0; + public int DoorOpId { get; set; } = 0; + public string ObjectId { get; set; } = ""; + } } } \ No newline at end of file diff --git a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs index c0d5680..ae29410 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -1389,7 +1389,7 @@ namespace WebDoorCreator.UI.Data { var dbResult = await dbController.OrderUpdate(orderId, newStatus); // elimino cache redis... - //bool answ = await DoorFlushCache(currRec.DoorId); + //bool answ = await DoorFlushCache(currRec.doorId); // elimino cache redis dati ordine... bool answ = await FlushRedisCache(); return dbResult; diff --git a/WebDoorCreator.UI/Pages/DoorDefinition.razor b/WebDoorCreator.UI/Pages/DoorDefinition.razor index c06289c..ea8fbe5 100644 --- a/WebDoorCreator.UI/Pages/DoorDefinition.razor +++ b/WebDoorCreator.UI/Pages/DoorDefinition.razor @@ -35,7 +35,7 @@ } else if (currDefStep == 20) { - + } else if (currDefStep == 30) { diff --git a/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs b/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs index 2fdaa5f..2850271 100644 --- a/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs +++ b/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs @@ -6,6 +6,7 @@ using WebDoorCreator.Data; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.Services; using WebDoorCreator.UI.Data; +using static WebDoorCreator.UI.Data.WDCRefreshService; namespace WebDoorCreator.UI.Pages { @@ -49,7 +50,7 @@ namespace WebDoorCreator.UI.Pages protected QueueDataService QDataServ { get; set; } = null!; protected string userLang { get; set; } = "EN"; - protected bool isDoorOpConf{ get; set; } = false; + protected bool isDoorOpConf { get; set; } = false; [Inject] protected WDCRefreshService WDCRService { get; set; } = null!; @@ -74,6 +75,7 @@ namespace WebDoorCreator.UI.Pages }); } + /// /// gestione rilettura info /// @@ -98,11 +100,15 @@ namespace WebDoorCreator.UI.Pages await ReloadData(); } userLang = WDCUService.currLanguage ?? "EN"; - isDoorOpConf = WDCRService.isDoorOpConf; +#if false + isDoorOpConf = WDCRService.isDoorOpConf; +#endif WDCUService.EA_CurrLanguage += WDUService_EA_CurrLanguage; QDataServ.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage; WDCRService.EA_UpdDoorOp += WDService_EA_DoorOpUpdated; - WDCRService.EA_ConfDoorOp += WDService_EA_DoorOpConfirmed; +#if false + WDCRService.EA_ConfDoorOp += WDService_EA_DoorOpConfirmed; +#endif } protected async Task ReloadData() @@ -111,6 +117,9 @@ namespace WebDoorCreator.UI.Pages ListHwDoorOp = null; orderStatus = null; await Task.Delay(1); + // cerco img porta... + DoorSvgContent = await QDataServ.DoorGetLastSvg(idDoor); + // recupero altri dati var ListRecordDoorOp = await WDService.DoorOpGetByDoorId(idDoor); if (ListRecordDoorOp != null) { @@ -225,12 +234,14 @@ namespace WebDoorCreator.UI.Pages userLang = WDCUService.currLanguage ?? "EN"; StateHasChanged(); } - + +#if false private void WDService_EA_DoorOpConfirmed() { isDoorOpConf = WDCRService.isDoorOpConf; StateHasChanged(); - } + } +#endif #endregion Private Methods } diff --git a/WebDoorCreator.UI/Pages/HwPdfConfirm.razor.cs b/WebDoorCreator.UI/Pages/HwPdfConfirm.razor.cs index 73dee08..88909a6 100644 --- a/WebDoorCreator.UI/Pages/HwPdfConfirm.razor.cs +++ b/WebDoorCreator.UI/Pages/HwPdfConfirm.razor.cs @@ -15,7 +15,9 @@ namespace WebDoorCreator.UI.Pages [Inject] protected WDCRefreshService WDCRService { get; set; } = null!; - protected int idHwInst { get; set; } = 0; + protected int doorOpId { get; set; } = 0; + protected int doorId = 0; + protected string objectId = ""; protected DoorOpModel currDoorOp { get; set; } = new DoorOpModel(); protected List allDoorOps { get; set; } = new List(); @@ -23,16 +25,31 @@ namespace WebDoorCreator.UI.Pages { await Task.Delay(1); var uri = NavManager.ToAbsoluteUri(NavManager.Uri); - if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("idHwInst", out var _idHwInst)) + QueryHelpers.ParseQuery(uri.Query).TryGetValue("objectId", out var sObjectId); + if (!string.IsNullOrEmpty(sObjectId)) { - idHwInst = int.Parse(_idHwInst); + objectId = sObjectId; + } + QueryHelpers.ParseQuery(uri.Query).TryGetValue("doorId", out var sDoorId); + if (!string.IsNullOrEmpty(sDoorId)) + { + int.TryParse(sDoorId, out doorId); + } + if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("doorOpId", out var sDoorOpId)) + { + doorOpId = int.Parse(sDoorOpId); await ReloadData(); } + +#if false + // invio fake... + WDRService.ReportDoorOpConf(doorId, doorOpId, objectId); +#endif } protected async Task ReloadData() { - currDoorOp = await WDService.DoorOpGetById(idHwInst); + currDoorOp = await WDService.DoorOpGetById(doorOpId); if (currDoorOp != null) { allDoorOps = await WDService.DoorOpGetByDoorId(currDoorOp.DoorId); @@ -42,6 +59,8 @@ namespace WebDoorCreator.UI.Pages } [Inject] protected WebDoorCreatorService WDService { get; set; } = null!; + [Inject] + protected WDCRefreshService WDRService { get; set; } = null!; protected async Task doConfirm() { @@ -53,8 +72,13 @@ namespace WebDoorCreator.UI.Pages var done = await WDService.DoorOpUpdate(doorOps2Save); if (done) { - isDoorOpConf = true; - await InvokeAsync(StateHasChanged); +#if false + isDoorOpConf = true; +#endif + WDRService.ReportDoorOpConf(doorId, doorOpId, objectId); +#if false + await InvokeAsync(StateHasChanged); +#endif } } @@ -63,11 +87,13 @@ namespace WebDoorCreator.UI.Pages get => WDCUService.currLanguage ?? "EN"; set => WDCUService.currLanguage = value; } +#if false protected bool isDoorOpConf { get => WDCRService.isDoorOpConf; set => WDCRService.isDoorOpConf = value; - } + } +#endif protected bool checkIfConf() { diff --git a/WebDoorCreator.UI/Pages/OrdersHomePage.razor b/WebDoorCreator.UI/Pages/OrdersHomePage.razor index 94d1b3a..c5b3b93 100644 --- a/WebDoorCreator.UI/Pages/OrdersHomePage.razor +++ b/WebDoorCreator.UI/Pages/OrdersHomePage.razor @@ -2,28 +2,9 @@ - @*
-
-
- ORDERS -
-
-
- -
-
Orders list
- -
-
-
*@
- @*
- -
*@
WEB DOOR CREATOR
@@ -33,9 +14,6 @@ Add new order
- @*
- -
*@
@@ -45,8 +23,6 @@
- -