- fix review stats ODL con modulo
- completata ottimizzazione componente display files
This commit is contained in:
Samuele Locatelli
2024-10-15 18:52:28 +02:00
parent a559357005
commit d8c8d8dbb9
10 changed files with 314 additions and 267 deletions
+3 -3
View File
@@ -20,7 +20,7 @@
<ItemGroup>
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageReference Include="Blazored.SessionStorage" Version="2.4.0" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2408.2710" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2409.2607" />
<PackageReference Include="MailKit" Version="4.7.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="6.0.33" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.33" />
@@ -33,7 +33,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
<PackageReference Include="MongoDB.Driver" Version="2.19.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.3.3" />
<PackageReference Include="StackExchange.Redis" Version="2.8.0" />
<PackageReference Include="NLog" Version="5.3.4" />
<PackageReference Include="StackExchange.Redis" Version="2.8.12" />
</ItemGroup>
</Project>
+1 -112
View File
@@ -199,123 +199,12 @@ else
<div class="modal-body col-12">
@if (statRecord != null && showStats)
{
<div class="d-flex justify-content-between">
<div class="col-8">
<div>
<table class="table">
<tbody>
<tr>
<td style="width: 270px">
<div class="small textConsensed"><b>N° pezzi:</b> @statRecord.NumPezzi</div>
<div class="small textConsensed"><b>T. Ciclo:</b> @statRecord.Tcassegnato.ToString("N3")</div>
</td>
<td style="width: 300px">
<div class="small d-flex justify-content-between">
<div>
<div><b>@($"{@statRecord.DataInizio:yyyy/MM/dd}")</b></div>
<div>@($"{@statRecord.DataInizio:ddd HH:mm:ss}")</div>
</div>
<div class="p-0">
<i class="fa-solid fa-angles-right"></i>
</div>
<div>
@if (@statRecord.DataFine != null)
{
<div><b>@($"{@statRecord.DataFine:yyyy/MM/dd}")</b></div>
<div>@($"{@statRecord.DataFine:ddd HH:mm:ss}")</div>
}
else
{
<div class="text-secondary">
<div><b>@($"{DateTime.Now:yyyy/MM/dd}")</b></div>
<div>@($"{DateTime.Now:ddd HH:mm:ss}")</div>
</div>
}
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="table">
<tbody>
<tr>
<td>
<div>
@tradFase(statRecord.KeyRichiesta)
</div>
@if (statRecord.Note != "")
{
<div class="small textConsensed text-secondary badge text-bg-light border border-secondary rounded">
<b class="text-dark"></b> <span class="text-wrap text-start"> @statRecord.Note </span>
</div>
}
</td>
<td>
<div class="input-group input-group-sm">
<div class="input-group-text">
<span class="me-1 @leftStringCSS">Tutti gli Stati</span>
<span class="form-check form-check-sm form-switch py-1" title="Mostra/Nascondi macchina spenta">
<input class="form-check-input" type="checkbox" id="switchSpenta" @onchange="() => toggleSpenta()" value="@hideSpenta">
</span>
<span class="@rightStringCSS">Nascondi Spenta</span>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
@if (statRecord != null)
{
@if (ListOdlStatsAct != null)
{
@foreach (var stat in ListOdlStatsAct)
{
<div class="p-1">
<div class="d-flex justify-content-between">
<div class="text-uppercase">
@stat.Descrizione
</div>
<div>
<b>@(formDurata(stat.TotDurata))</b>
</div>
</div>
<div class="progress">
<div class="progress-bar @colorChanger(@stat.Css)" role="progressbar" aria-valuenow="0" aria-valuemin="0" style="width: @Math.Round(calcolaPerc(stat.TotDurata),0)%; background-color:@pbStyle(@stat.Css);" aria-valuemax="100">@($"{calcolaPerc(stat.TotDurata):N1}%")</div>
</div>
</div>
}
}
}
</div>
</div>
<div class="col-4 dcContainer">
@if (statRecord != null && ListOdlStats != null)
{
<div class="dcBox">
<ODLPlot SelectedOdl="@statRecord.IdxOdl" hideSpenta="@hideSpenta"></ODLPlot>
</div>
<div class="dcBox dcOverlay d-flex">
<div class="align-self-center text-center w-100">
<b class="fs-3">@durataFilt</b>
@*<b class="fs-3">@statRecord.DurataMinuti</b>*@
</div>
</div>
}
</div>
</div>
<StatsOdl ListOdlStats="@ListOdlStats" ListStati="@ListStati" statRecord="@statRecord"></StatsOdl>
}
</div>
</div>
</div>
</div>
<div class="modal fade" id="odlDirModal" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-xl">
<div class="modal-content">
+10 -144
View File
@@ -49,16 +49,10 @@ namespace MP.SPEC.Components
ListRecords = null;
ListStati = null;
ListOdlStats = null;
ListOdlStatsNetto = null;
statRecord = null;
GC.Collect();
}
public string formDurata(double durataMin)
{
return MP.Data.Utils.FormDurata(durataMin);
}
#endregion Public Methods
#region Protected Fields
@@ -108,16 +102,6 @@ namespace MP.SPEC.Components
await reloadData();
}
protected string colorChanger(string colorCSS)
{
string answ = "";
if (colorCSS == "yellow")
{
answ = "text-dark";
}
return answ;
}
/// <summary>
/// Richiesta invio sync all'IOB-WIN
/// </summary>
@@ -224,6 +208,16 @@ namespace MP.SPEC.Components
browseRecord = currRec;
}
protected async Task selRecord(ODLExpModel? currRec)
{
await Task.Delay(1);
browseRecord = null;
selDtFine = DateTime.Now;
currRecord = currRec;
showStats = false;
ListOdlStats = null;
}
protected async Task selStatRecord(ODLExpModel? currRec)
{
browseRecord = null;
@@ -242,27 +236,6 @@ namespace MP.SPEC.Components
}
}
protected async Task selRecord(ODLExpModel? currRec)
{
await Task.Delay(1);
browseRecord = null;
selDtFine = DateTime.Now;
currRecord = currRec;
showStats = false;
ListOdlStats = null;
ListOdlStatsNetto = null;
}
protected async Task toggleSpenta()
{
hideSpenta = !hideSpenta;
await Task.Delay(1);
if (statRecord != null)
{
await reloadStatsData(statRecord);
}
}
protected async Task UpdateData()
{
await selRecord(null);
@@ -285,8 +258,6 @@ namespace MP.SPEC.Components
private List<StatODLModel>? ListOdlStats;
private List<StatODLModel>? ListOdlStatsNetto;
private List<ODLExpModel>? ListRecords;
private List<ListValues>? ListStati;
@@ -307,39 +278,6 @@ namespace MP.SPEC.Components
set => currFilter.CurrPage = value;
}
private string durataFilt
{
get
{
string answ = "ND";
if (statRecord != null)
{
if (hideSpenta)
{
if (ListOdlStatsNetto != null)
{
var tsDurata = TimeSpan.FromMinutes(ListOdlStatsNetto.Sum(x => x.TotDurata));
if (tsDurata.TotalDays < 1)
{
answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'";
}
else
{
answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h";
}
}
}
else
{
answ = statRecord.DurataMinuti;
}
}
return answ;
}
}
private bool hideSpenta { get; set; } = false;
/// <summary>
/// Indica se si tratti di ODL correnti
/// </summary>
@@ -350,39 +288,12 @@ namespace MP.SPEC.Components
private bool isLoading { get; set; } = false;
private string leftStringCSS
{
get => hideSpenta ? "text-secondary" : "text-dark fw-bold";
}
private List<StatODLModel>? ListOdlStatsAct
{
get
{
List<StatODLModel>? answ = new List<StatODLModel>();
if (hideSpenta)
{
answ = ListOdlStatsNetto;
}
else
{
answ = ListOdlStats;
}
return answ;
}
}
private int numRecord
{
get => currFilter.NumRec;
set => currFilter.NumRec = value;
}
private string rightStringCSS
{
get => hideSpenta ? "text-dark fw-bold" : "text-secondary";
}
private DateTime selDtFine { get; set; } = DateTime.Now;
private bool showBrowse { get; set; } = false;
@@ -424,28 +335,6 @@ namespace MP.SPEC.Components
}
}
private double calcolaPerc(double durata)
{
double answ = 0;
double tot = 0;
if (ListOdlStatsAct != null)
{
tot = ListOdlStatsAct.Sum(x => x.TotDurata);
double perc = (durata / tot) * 100;
if (perc > 1)
{
answ = Math.Round(perc, 2);
}
else
{
answ = Math.Round(perc, 4);
}
}
return answ;
}
/// <summary>
/// Chiama metodo x chiedere sync DB
/// </summary>
@@ -457,27 +346,6 @@ namespace MP.SPEC.Components
await addTask2Exe(IdxMacc, "syncDbData", "");
}
private string pbStyle(string css)
{
string answ = "";
if (ListOdlStats != null)
{
if (css == "yellow")
{
answ = "orange";
}
else if (css == "blue")
{
answ = "#2874A6";
}
else
{
answ = css;
}
}
return answ;
}
private async Task reloadData()
{
isLoading = true;
@@ -495,12 +363,10 @@ namespace MP.SPEC.Components
if (currRec != null)
{
ListOdlStats = await MDService.StatOdl(currRec.IdxOdl);
ListOdlStatsNetto = ListOdlStats.Where(x => x.Semaforo != "sGr").ToList();
}
else
{
ListOdlStats = null;
ListOdlStatsNetto = null;
}
}
-1
View File
@@ -38,7 +38,6 @@ namespace MP.SPEC.Components
#region Protected Properties
//protected DataLogFilter _SelFilter { get; set; } = new DataLogFilter();
protected int _selParam { get; set; } = -1;
[Inject]
+110
View File
@@ -0,0 +1,110 @@
<div class="d-flex justify-content-between">
<div class="col-8">
<div>
<table class="table">
<tbody>
<tr>
<td style="width: 270px">
<div class="small textConsensed"><b>N° pezzi:</b> @statRecord.NumPezzi</div>
<div class="small textConsensed"><b>T. Ciclo:</b> @statRecord.Tcassegnato.ToString("N3")</div>
</td>
<td style="width: 300px">
<div class="small d-flex justify-content-between">
<div>
<div><b>@($"{@statRecord.DataInizio:yyyy/MM/dd}")</b></div>
<div>@($"{@statRecord.DataInizio:ddd HH:mm:ss}")</div>
</div>
<div class="p-0">
<i class="fa-solid fa-angles-right"></i>
</div>
<div>
@if (@statRecord.DataFine != null)
{
<div><b>@($"{@statRecord.DataFine:yyyy/MM/dd}")</b></div>
<div>@($"{@statRecord.DataFine:ddd HH:mm:ss}")</div>
}
else
{
<div class="text-secondary">
<div><b>@($"{DateTime.Now:yyyy/MM/dd}")</b></div>
<div>@($"{DateTime.Now:ddd HH:mm:ss}")</div>
</div>
}
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="table">
<tbody>
<tr>
<td>
<div>
@tradFase(statRecord.KeyRichiesta)
</div>
@if (statRecord.Note != "")
{
<div class="small textConsensed text-secondary badge text-bg-light border border-secondary rounded">
<b class="text-dark"></b> <span class="text-wrap text-start"> @statRecord.Note </span>
</div>
}
</td>
<td>
<div class="input-group input-group-sm">
<div class="input-group-text">
<span class="me-1 @leftStringCSS">Tutti gli Stati</span>
<span class="form-check form-check-sm form-switch py-1" title="Mostra/Nascondi macchina spenta">
<input class="form-check-input" type="checkbox" id="switchSpenta" @onchange="() => toggleSpenta()" value="@hideSpenta">
</span>
<span class="@rightStringCSS">Nascondi Spenta</span>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
@if (ListOdlStatsAct != null)
{
@foreach (var stat in ListOdlStatsAct)
{
<div class="p-1">
<div class="d-flex justify-content-between">
<div class="text-uppercase">
@stat.Descrizione
</div>
<div>
<b>@(formDurata(stat.TotDurata))</b>
</div>
</div>
<div class="progress">
<div class="progress-bar @colorChanger(@stat.Css)" role="progressbar" aria-valuenow="0" aria-valuemin="0" style="width: @Math.Round(calcolaPerc(stat.TotDurata),0)%; background-color:@pbStyle(@stat.Css);" aria-valuemax="100">@($"{calcolaPerc(stat.TotDurata):N1}%")</div>
</div>
</div>
}
}
</div>
</div>
<div class="col-4 dcContainer">
@if (ListOdlStats != null)
{
<div class="dcBox">
<ODLPlot SelectedOdl="@statRecord.IdxOdl" hideSpenta="@hideSpenta"></ODLPlot>
</div>
<div class="dcBox dcOverlay d-flex">
<div class="align-self-center text-center w-100">
<b class="fs-3">@durataFilt</b>
</div>
</div>
}
</div>
</div>
+183
View File
@@ -0,0 +1,183 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.SPEC.Data;
namespace MP.SPEC.Components
{
public partial class StatsOdl
{
#region Public Properties
[Parameter]
public List<StatODLModel>? ListOdlStats { get; set; }
protected List<StatODLModel>? ListOdlStatsNetto
{
get => ListOdlStats != null ? ListOdlStats.Where(x => x.Semaforo != "sGr").ToList() : null;
}
[Parameter]
public List<ListValues>? ListStati { get; set; }
[Parameter]
public ODLExpModel statRecord { get; set; } = null!;
#endregion Public Properties
#region Protected Properties
[Inject]
protected MpDataService MDService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected string colorChanger(string colorCSS)
{
string answ = "";
if (colorCSS == "yellow")
{
answ = "text-dark";
}
return answ;
}
protected string formDurata(double durataMin)
{
return MP.Data.Utils.FormDurata(durataMin);
}
protected void toggleSpenta()
{
hideSpenta = !hideSpenta;
}
#endregion Protected Methods
#region Private Properties
private string durataFilt
{
get
{
string answ = "ND";
if (statRecord != null)
{
if (hideSpenta)
{
if (ListOdlStatsNetto != null)
{
var tsDurata = TimeSpan.FromMinutes(ListOdlStatsNetto.Sum(x => x.TotDurata));
if (tsDurata.TotalDays < 1)
{
answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'";
}
else
{
answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h";
}
}
}
else
{
answ = statRecord.DurataMinuti;
}
}
return answ;
}
}
private bool hideSpenta { get; set; } = false;
private string leftStringCSS
{
get => hideSpenta ? "text-secondary" : "text-dark fw-bold";
}
private List<StatODLModel>? ListOdlStatsAct
{
get
{
List<StatODLModel>? answ = new List<StatODLModel>();
if (hideSpenta)
{
answ = ListOdlStatsNetto;
}
else
{
answ = ListOdlStats;
}
return answ;
}
}
private string rightStringCSS
{
get => hideSpenta ? "text-dark fw-bold" : "text-secondary";
}
#endregion Private Properties
#region Private Methods
private double calcolaPerc(double durata)
{
double answ = 0;
double tot = 0;
if (ListOdlStatsAct != null)
{
tot = ListOdlStatsAct.Sum(x => x.TotDurata);
double perc = (durata / tot) * 100;
if (perc > 1)
{
answ = Math.Round(perc, 2);
}
else
{
answ = Math.Round(perc, 4);
}
}
return answ;
}
private string pbStyle(string css)
{
string answ = "";
if (ListOdlStats != null)
{
if (css == "yellow")
{
answ = "orange";
}
else if (css == "blue")
{
answ = "#2874A6";
}
else
{
answ = css;
}
}
return answ;
}
private string tradFase(string codFase)
{
string answ = codFase;
if (ListStati != null && ListStati.Count > 0)
{
var recSel = ListStati.FirstOrDefault(x => x.value == codFase);
if (recSel != null)
{
answ = recSel.label;
}
}
return answ;
}
#endregion Private Methods
}
}
+4 -4
View File
@@ -5,7 +5,7 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP.SPEC</RootNamespace>
<Version>6.16.2410.1512</Version>
<Version>6.16.2410.1518</Version>
<UserSecretsId>1800a78a-6ff1-40f9-b490-87fb8bfc1394</UserSecretsId>
</PropertyGroup>
@@ -40,11 +40,11 @@
<ItemGroup>
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageReference Include="Blazored.SessionStorage" Version="2.4.0" />
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2408.2710" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2408.2710" />
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2409.2607" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2409.2607" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.9" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.12" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.14" />
<PackageReference Include="StackExchange.Redis" Version="2.8.12" />
</ItemGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2410.1512</h4>
<h4>Versione: 6.16.2410.1518</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2410.1512
6.16.2410.1518
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2410.1512</version>
<version>6.16.2410.1518</version>
<url>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>