inizio gestione threshold con update componenti, continuo timeEstim
This commit is contained in:
@@ -21,8 +21,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2312" />
|
||||
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2312" />
|
||||
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2316" />
|
||||
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2316" />
|
||||
<PackageReference Include="Egw.Window.Data" Version="2.7.12.2312" />
|
||||
<PackageReference Include="EgwMultiEngineManager.Data" Version="2.7.12.1" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -60,13 +60,21 @@ namespace EgwCoreLib.Lux.Core.RestPayload
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// Elenco Macchine
|
||||
/// Elenco Macchine in formato stringa join
|
||||
/// </summary>
|
||||
public string ListMachines
|
||||
public string ListMachinesJoin
|
||||
{
|
||||
get => string.Join(", ", machineCalcResults.Select(x => x.Name).OrderBy(x => x).ToList());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco effettivo macchine
|
||||
/// </summary>
|
||||
public List<string> ListMachines
|
||||
{
|
||||
get => machineCalcResults.Select(x => x.Name).OrderBy(x => x).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco delle etichette parts non OK
|
||||
/// </summary>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2312" />
|
||||
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2316" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.21" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.21" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="8.0.21" />
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using EgwCoreLib.Lux.Core.RestPayload;
|
||||
using Egw.Window.Data;
|
||||
using EgwCoreLib.Lux.Core.RestPayload;
|
||||
using EgwCoreLib.Lux.Data.Controllers;
|
||||
using EgwCoreLib.Lux.Data.DbModel.Config;
|
||||
using EgwMultiEngineManager.Data;
|
||||
@@ -85,6 +86,34 @@ namespace EgwCoreLib.Lux.Data.Services
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il dizionario dei profili + relativa lista soglie da cache REDIS
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Dictionary<string, List<Threshold>> ProfileThreshDict(Constants.EXECENVIRONMENTS execEnvironment)
|
||||
{
|
||||
Dictionary<string, List<Threshold>> result = new Dictionary<string, List<Threshold>>();
|
||||
// recupero profili per ciclare...
|
||||
List<string> profList = ProfileList(execEnvironment);
|
||||
foreach (var prof in profList)
|
||||
{
|
||||
// leggo obj da redis cache
|
||||
var currKey = $"{redisBaseKey}:{execEnvironment}:PROF:THRESH:{prof}";
|
||||
RedisValue rawData = redisDb.StringGet(currKey);
|
||||
// prendo solo i valori validi (Name <> FamilyName)
|
||||
if (rawData.HasValue)
|
||||
{
|
||||
var currList = JsonConvert.DeserializeObject<List<Threshold>>($"{rawData}") ?? new List<Threshold>();
|
||||
if (currList.Any())
|
||||
{
|
||||
result.Add(prof, currList);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Version>0.9.2512.2312</Version>
|
||||
<Version>0.9.2512.2316</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2312" />
|
||||
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2316" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.21" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.21" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Egw.Window.Data;
|
||||
using EgwCoreLib.Lux.Core;
|
||||
using EgwCoreLib.Lux.Core.RestPayload;
|
||||
using EgwCoreLib.Lux.Data.DbModel.Config;
|
||||
@@ -669,6 +670,14 @@ namespace Lux.UI.Components.Compo
|
||||
private List<Egw.Window.Data.Hardware> AvailHardwareList = new();
|
||||
private List<string> AvailMaterialList = new List<string>();
|
||||
private List<string> AvailProfileList = new List<string>();
|
||||
private Dictionary<string, List<Threshold>> AvailThresholdDict = new Dictionary<string, List<Threshold>>();
|
||||
|
||||
|
||||
private Dictionary<string, List<Threshold>> AvailThreshold { get; set; } = new Dictionary<string, List<Threshold>>()
|
||||
{
|
||||
{"Profilo78", new List<Threshold>() { new Threshold(3, "Bottom"), new Threshold(1, "Threshold")}},
|
||||
{"ProfiloSaomad", new List<Threshold>(){ new Threshold(3, "Bottom"), new Threshold(2, "BottomWaterdrip"), new Threshold(1, "Threshold")}}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Base path x network share files
|
||||
@@ -1188,14 +1197,15 @@ namespace Lux.UI.Components.Compo
|
||||
private void PrepareWindowData(string currJwd)
|
||||
{
|
||||
// preparo conf oggetti x controllo
|
||||
SetupList = SetupList = new BaseListPayload()
|
||||
SetupList = new BaseListPayload()
|
||||
{
|
||||
ColorMaterial = AvailColorMaterialList,
|
||||
FamilyHardware = AvailFamilyHardwareList,
|
||||
Glass = AvailGlassList,
|
||||
Hardware = AvailHardwareList,
|
||||
Material = AvailMaterialList,
|
||||
Profile = AvailProfileList
|
||||
Profile = AvailProfileList,
|
||||
Threshold = AvailThreshold
|
||||
};
|
||||
CurrData = new LivePayload()
|
||||
{
|
||||
@@ -1223,6 +1233,11 @@ namespace Lux.UI.Components.Compo
|
||||
rawProfiles = CDService.ProfileList(cEnvir, "Default");
|
||||
}
|
||||
AvailProfileList = rawProfiles;
|
||||
#if false
|
||||
// dizionario dei profili soglia
|
||||
AvailThresholdDict = CDService.ProfileThreshDict(cEnvir);
|
||||
#endif
|
||||
|
||||
var rawHw = CDService.HwModelList(cEnvir, "HW.AGB");
|
||||
// hw filtro solo validi...
|
||||
AllConfHardware = rawHw
|
||||
@@ -1439,7 +1454,7 @@ namespace Lux.UI.Components.Compo
|
||||
private bool ShowBom(OfferRowModel reqItem)
|
||||
{
|
||||
bool answ = false;
|
||||
if (DisplayMode == Enums.DisplayMode.Edit)
|
||||
if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
|
||||
{
|
||||
switch (reqItem.Envir)
|
||||
{
|
||||
|
||||
@@ -239,7 +239,7 @@ else
|
||||
<div class="small text-secondary" title="RockBottom Price">(@item.Original.UnitCost.ToString("C2"))</div>
|
||||
</td> *@
|
||||
|
||||
<td class="text-center align-content-center fs-4" title="@(item.WorkLoad?.ListMachines ?? "")">
|
||||
<td class="text-center align-content-center fs-4" title="@(item.WorkLoad?.ListMachinesJoin ?? "")">
|
||||
<span class="px-2">
|
||||
@(item.WorkLoad?.NumMachines ?? 0)
|
||||
</span>
|
||||
@@ -463,7 +463,7 @@ else if (WorkLoadRecord != null)
|
||||
</div>
|
||||
<div class="col-4 text-center border border-2 rounded">
|
||||
<div class="fw-bold">Workable Parts: @WorkLoadRecord.NumOk</div>
|
||||
<small class="small">@WorkLoadRecord.ListMachines</small>
|
||||
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
|
||||
</div>
|
||||
<div class="col-4 text-end fs-4">
|
||||
<button class="btn btn-lg btn-primary" @onclick="() => ReRunJob()"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
|
||||
@@ -493,7 +493,7 @@ else if (WorkLoadRecord != null)
|
||||
</div>
|
||||
<div class="col-4 text-center border border-2 rounded">
|
||||
<div class="fw-bold">Vincolated Parts: @WorkLoadRecord.NumKo</div>
|
||||
<small class="small">@WorkLoadRecord.ListMachines</small>
|
||||
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
|
||||
</div>
|
||||
<div class="col-4 text-end fs-4">
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
|
||||
@@ -520,7 +520,7 @@ else if (WorkLoadRecord != null)
|
||||
</div>
|
||||
<div class="col-4 text-center border border-2 rounded">
|
||||
<div class="fw-bold">Unworkable Parts: @WorkLoadRecord.NumKo</div>
|
||||
<small class="small">@WorkLoadRecord.ListMachines</small>
|
||||
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
|
||||
</div>
|
||||
<div class="col-4 text-end fs-4">
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
</div>
|
||||
<div class="col-4 text-center border border-2 rounded">
|
||||
<div class="fw-bold">Impianti considerati</div>
|
||||
<small class="small">@DetailRecord.ListMachines</small>
|
||||
<small class="small">@DetailRecord.ListMachinesJoin</small>
|
||||
</div>
|
||||
<div class="col-4 text-end fs-4">
|
||||
<button class="btn btn-lg btn-primary" @onclick="() => ReRunJob()"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
</div>
|
||||
<div class="col-4 text-center border border-2 rounded">
|
||||
<div class="fw-bold">Impianti considerati</div>
|
||||
<small class="small">@DetailRecord.ListMachines</small>
|
||||
<small class="small">@DetailRecord.ListMachinesJoin</small>
|
||||
</div>
|
||||
<div class="col-4 text-end fs-4">
|
||||
<button class="btn btn-lg btn-primary" @onclick="() => ReRunJob()"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
|
||||
@@ -24,80 +24,125 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
|
||||
<div class="accordion" id="accordionPanelsStayOpenExample">
|
||||
@if (DetailRecord.NumKo > 0)
|
||||
{
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
|
||||
Non producibili: <span class="fw-bold px-1">@DetailRecord.NumKo</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
|
||||
<div class="accordion-body">
|
||||
<div class="row gx-2">
|
||||
@foreach (var item in DetailRecord.ListUnWorkable)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="alert alert-danger p-1 mb-2 text-center align-content-center">@item</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (DetailRecord.NumOkVin > 0)
|
||||
{
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
|
||||
Vincolati: <span class="fw-bold px-1">@DetailRecord.NumOkVin</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse">
|
||||
<div class="accordion-body">
|
||||
<div class="row gx-2">
|
||||
@foreach (var item in DetailRecord.ListVincolated)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="alert alert-info p-1 mb-2 text-center align-content-center">@item</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (DetailRecord.NumOk > 0)
|
||||
{
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
|
||||
Producibili: <span class="fw-bold px-1">@DetailRecord.NumOk</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse">
|
||||
<div class="accordion-body">
|
||||
<div class="row gx-2">
|
||||
@foreach (var item in DetailRecord.ListWorkable)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="alert alert-success p-1 mb-2 text-center align-content-center">@item</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<table class="table table-sm table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
SEL
|
||||
</th>
|
||||
<th>
|
||||
Impianto
|
||||
</th>
|
||||
<th class="text-end">
|
||||
Perc
|
||||
</th>
|
||||
<th class="text-end">
|
||||
# Parts
|
||||
</th>
|
||||
<th class="text-end">
|
||||
Hour
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in ListTargetMachine)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
@item
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<input type="number" />
|
||||
</td>
|
||||
<td class="text-end">
|
||||
0 / 0%
|
||||
</td>
|
||||
<td class="text-end">
|
||||
0 / 0%
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="accordion" id="accordionPanelsStayOpenExample">
|
||||
@if (DetailRecord.NumKo > 0)
|
||||
{
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
|
||||
Non producibili: <span class="fw-bold px-1">@DetailRecord.NumKo</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
|
||||
<div class="accordion-body">
|
||||
<div class="row gx-2">
|
||||
@foreach (var item in DetailRecord.ListUnWorkable)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="alert alert-danger p-1 mb-2 text-center align-content-center">@item</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (DetailRecord.NumOkVin > 0)
|
||||
{
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
|
||||
Vincolati: <span class="fw-bold px-1">@DetailRecord.NumOkVin</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse">
|
||||
<div class="accordion-body">
|
||||
<div class="row gx-2">
|
||||
@foreach (var item in DetailRecord.ListVincolated)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="alert alert-info p-1 mb-2 text-center align-content-center">@item</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (DetailRecord.NumOk > 0)
|
||||
{
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
|
||||
Producibili: <span class="fw-bold px-1">@DetailRecord.NumOk</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse">
|
||||
<div class="accordion-body">
|
||||
<div class="row gx-2">
|
||||
@foreach (var item in DetailRecord.ListWorkable)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="alert alert-success p-1 mb-2 text-center align-content-center">@item</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -21,8 +21,27 @@ namespace Lux.UI.Components.Compo.WorkLoad
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
private string selUid = "";
|
||||
|
||||
protected string MainCss
|
||||
{
|
||||
get => string.IsNullOrEmpty(selUid) ? "col-12" : "col-6";
|
||||
}
|
||||
|
||||
#region Public Classes
|
||||
|
||||
protected List<string> ListTargetMachine
|
||||
{
|
||||
get
|
||||
{
|
||||
var answ = DetailRecord.ListMachines;
|
||||
// aggiungo la macchina EXT...
|
||||
answ.Add("EXT");
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Definizione richiesta di bilanciamento per il calcolo
|
||||
/// </summary>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<UserSecretsId>aspnet-Lux.UI-a758c101-a2f4-4e38-977d-1c4887dbbd50</UserSecretsId>
|
||||
<Version>0.9.2512.2312</Version>
|
||||
<Version>0.9.2512.2316</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -17,7 +17,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2312" />
|
||||
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2316" />
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2511.312" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2511.312" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.21" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>LUX - Web Windows MES</i>
|
||||
<h4>Versione: 0.9.2512.2312</h4>
|
||||
<h4>Versione: 0.9.2512.2316</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
0.9.2512.2312
|
||||
0.9.2512.2316
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>0.9.2512.2312</version>
|
||||
<version>0.9.2512.2316</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
Reference in New Issue
Block a user