Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c9c57208bf | |||
| af314cd578 | |||
| 788bd6d730 | |||
| e1eb5c6cdf | |||
| 1bf5cfc0be | |||
| 491365e8df | |||
| 40b16d2e83 | |||
| 39cf45869c | |||
| ea930b308d | |||
| b07c610edd | |||
| 185e27f31d | |||
| 6a44e7b0c9 | |||
| eb11533338 | |||
| 8b91210115 | |||
| 9f9f44f604 | |||
| dee4b63ca4 | |||
| bb19bb02c4 | |||
| fd69a196d2 | |||
| dcfaa6257a | |||
| 1271b44b15 | |||
| 132f5966dd | |||
| 02c46c99db | |||
| 485808e8d4 | |||
| d78c2d3173 | |||
| 2a1602c5b9 | |||
| a096f6a13e | |||
| 1cae70c244 | |||
| 18ee183b05 | |||
| d88c4cc2bd | |||
| 67922520b8 | |||
| c5b5b54586 | |||
| ae3864a614 | |||
| f878f1c496 | |||
| d453c1d944 | |||
| 921bf52659 | |||
| e948ae31af | |||
| b344180da2 | |||
| 4b885d780c | |||
| 01e181a4fc | |||
| 56f342a488 | |||
| ed72bdfa24 | |||
| 5e6924f0fe | |||
| cae7e50cbd | |||
| e769227bb3 | |||
| 60f757965e | |||
| 603ed3782f | |||
| 71177e04c7 | |||
| 1a211ebca5 | |||
| 591b66b52d | |||
| 96f4bb3b4c |
@@ -0,0 +1,4 @@
|
|||||||
|
[*.cs]
|
||||||
|
|
||||||
|
# CS8765: Nullability of type of parameter doesn't match overridden member (possibly because of nullability attributes).
|
||||||
|
dotnet_diagnostic.CS8765.severity = none
|
||||||
@@ -7,6 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.SPEC", "MP.SPEC\MP.SPEC.csproj", "{C777A098-6F91-45AF-A85E-0AD08CBCAC52}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.SPEC", "MP.SPEC\MP.SPEC.csproj", "{C777A098-6F91-45AF-A85E-0AD08CBCAC52}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1B6A7550-F6C9-468E-B3B4-C30FF6FE8933}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
.editorconfig = .editorconfig
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
|||||||
@@ -183,11 +183,11 @@ namespace MP.Data.Controllers
|
|||||||
{
|
{
|
||||||
dbResult = dbCtx
|
dbResult = dbCtx
|
||||||
.DbSetArticoli
|
.DbSetArticoli
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(x => (x.Azienda == azienda || azienda == "*") && (x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal) || string.IsNullOrEmpty(searchVal)))
|
.Where(x => (x.Azienda == azienda || azienda == "*") && (x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal) || string.IsNullOrEmpty(searchVal)))
|
||||||
.OrderBy(x => x.CodArticolo)
|
.OrderBy(x => x.CodArticolo)
|
||||||
.Take(numRecord)
|
.Take(numRecord)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
return dbResult;
|
return dbResult;
|
||||||
}
|
}
|
||||||
@@ -354,6 +354,32 @@ namespace MP.Data.Controllers
|
|||||||
return dbResult;
|
return dbResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// insert di un record Dossier
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="editRec">record dossier da modificare</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> DossiersInsert(Dossiers newRec)
|
||||||
|
{
|
||||||
|
bool fatto = false;
|
||||||
|
using (var dbCtx = new MoonProContext(_configuration))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dbCtx
|
||||||
|
.DbSetDossiers
|
||||||
|
.Add(newRec);
|
||||||
|
await dbCtx.SaveChangesAsync();
|
||||||
|
fatto = true;
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
Log.Error($"Eccezione durante DossiersInsert{Environment.NewLine}{exc}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fatto;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Effettua salvataggio snapshot parametri (con stored) + svuota eventuale cache redis
|
/// Effettua salvataggio snapshot parametri (con stored) + svuota eventuale cache redis
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -401,7 +427,7 @@ namespace MP.Data.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update ddel campo VALORE di un dossier (che contiene json flux log serializzati)
|
/// Update del campo VALORE di un dossier (che contiene json flux log serializzati)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="editRec">record dossier da modificare</param>
|
/// <param name="editRec">record dossier da modificare</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
@@ -555,7 +581,7 @@ namespace MP.Data.Controllers
|
|||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Include(m => m.MachineNav)
|
.Include(m => m.MachineNav)
|
||||||
.Include(a => a.ArticoloNav)
|
.Include(a => a.ArticoloNav)
|
||||||
.OrderBy(x => x.InsertDate)
|
.OrderByDescending(x => x.InsertDate)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
return dbResult;
|
return dbResult;
|
||||||
@@ -744,7 +770,7 @@ namespace MP.Data.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Recupero Odl CORRENTI
|
/// Recupero Odl CORRENTI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<ODLModel> OdlGetCurrent()
|
public List<ODLModel> OdlGetCurrent()
|
||||||
@@ -1001,6 +1027,24 @@ namespace MP.Data.Controllers
|
|||||||
return dbResult;
|
return dbResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco Vocabolario (completo)
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<VocabolarioModel> VocabolarioGetAll()
|
||||||
|
{
|
||||||
|
List<VocabolarioModel> dbResult = new List<VocabolarioModel>();
|
||||||
|
using (var dbCtx = new MoonProContext(_configuration))
|
||||||
|
{
|
||||||
|
dbResult = dbCtx
|
||||||
|
.DbSetVocabolario
|
||||||
|
.AsNoTracking()
|
||||||
|
.OrderBy(x => x.Lemma)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
return dbResult;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
// <Auto-Generated>
|
||||||
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
// </Auto-Generated>
|
||||||
|
namespace MP.Data.DatabaseModels
|
||||||
|
{
|
||||||
|
[Table("Vocabolario")]
|
||||||
|
public partial class VocabolarioModel
|
||||||
|
{
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
public string Lingua { get; set; }
|
||||||
|
public string Lemma { get; set; }
|
||||||
|
public string Traduzione { get; set; }
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,10 @@
|
|||||||
<Compile Remove="DatabaseModels\TurniParetoOdl.cs" />
|
<Compile Remove="DatabaseModels\TurniParetoOdl.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\.editorconfig" Link=".editorconfig" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.9" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.9" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.9" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.9" />
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ namespace MP.Data
|
|||||||
|
|
||||||
private bool enableLog = false;
|
private bool enableLog = false;
|
||||||
private IConnectionMultiplexer redis;
|
private IConnectionMultiplexer redis;
|
||||||
private IDatabase? redisDb;
|
private IDatabase redisDb;
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ namespace MP.Data
|
|||||||
//Subscribe to the channel named messages
|
//Subscribe to the channel named messages
|
||||||
sub.Subscribe(_channel, (channel, message) =>
|
sub.Subscribe(_channel, (channel, message) =>
|
||||||
{
|
{
|
||||||
Log.Trace($"ch {channel} | {message}");
|
Log.Trace($"req setup ch {channel} | {message}");
|
||||||
// messaggio
|
// messaggio
|
||||||
PubSubEventArgs mea = new PubSubEventArgs(message);
|
PubSubEventArgs mea = new PubSubEventArgs(message);
|
||||||
// se qualcuno ascolta sollevo evento nuovo valore...
|
// se qualcuno ascolta sollevo evento nuovo valore...
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ namespace MP.Data
|
|||||||
public virtual DbSet<StatODLModel> DbSetStatOdl { get; set; }
|
public virtual DbSet<StatODLModel> DbSetStatOdl { get; set; }
|
||||||
public virtual DbSet<StatoProdModel> DbSetStatoProd { get; set; }
|
public virtual DbSet<StatoProdModel> DbSetStatoProd { get; set; }
|
||||||
public virtual DbSet<EventListModel> DbSetEvList { get; set; }
|
public virtual DbSet<EventListModel> DbSetEvList { get; set; }
|
||||||
|
public virtual DbSet<VocabolarioModel> DbSetVocabolario { get; set; }
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
@@ -303,7 +304,12 @@ namespace MP.Data
|
|||||||
|
|
||||||
modelBuilder.Entity<EventListModel>(entity =>
|
modelBuilder.Entity<EventListModel>(entity =>
|
||||||
{
|
{
|
||||||
entity.HasKey(e => new { e.IdxMacchina, e.InizioStato, e.IdxTipo});
|
entity.HasKey(e => new { e.IdxMacchina, e.InizioStato, e.IdxTipo });
|
||||||
|
|
||||||
|
});
|
||||||
|
modelBuilder.Entity<VocabolarioModel>(entity =>
|
||||||
|
{
|
||||||
|
entity.HasKey(e => new { e.Lingua, e.Lemma });
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<RootNamespace>MP.Land</RootNamespace>
|
<RootNamespace>MP.Land</RootNamespace>
|
||||||
<Version>6.16.2209.2118</Version>
|
<Version>6.16.2210.2110</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -60,6 +60,12 @@
|
|||||||
<ProjectReference Include="..\MP.AppAuth\MP.AppAuth.csproj" />
|
<ProjectReference Include="..\MP.AppAuth\MP.AppAuth.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="post-build.ps1">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\post-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)" />
|
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\post-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<body>
|
<body>
|
||||||
<i>Modulo gestione Programmi MAPO</i>
|
<i>Modulo gestione Programmi MAPO</i>
|
||||||
<h4>Versione: 6.16.2209.2118</h4>
|
<h4>Versione: 6.16.2210.2110</h4>
|
||||||
<br />
|
<br />
|
||||||
Note di rilascio:
|
Note di rilascio:
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6.16.2209.2118
|
6.16.2210.2110
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<item>
|
<item>
|
||||||
<version>6.16.2209.2118</version>
|
<version>6.16.2210.2110</version>
|
||||||
<url>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip</url>
|
<url>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip</url>
|
||||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html</changelog>
|
<changelog>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html</changelog>
|
||||||
<mandatory>false</mandatory>
|
<mandatory>false</mandatory>
|
||||||
|
|||||||
@@ -48,6 +48,9 @@
|
|||||||
<None Update="logs\.placeholder">
|
<None Update="logs\.placeholder">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="post-build.ps1">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\post-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)" />
|
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\post-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)" />
|
||||||
|
|||||||
@@ -26,13 +26,12 @@ namespace MP.SPEC.Components.Chart
|
|||||||
public ChartType Type { get; set; }
|
public ChartType Type { get; set; }
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public double[] Data { get; set; }
|
public double[] Data { get; set; } = null!;
|
||||||
|
[Parameter]
|
||||||
|
public List<DoughnutStyling> BackgroundColor { get; set; } = null!;
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public List<DoughnutStyling> BackgroundColor { get; set; }
|
public string[] Labels { get; set; } = null!;
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public string[] Labels { get; set; }
|
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
version = typeof(Program).Assembly.GetName().Version;
|
var rawVers = typeof(Program).Assembly.GetName().Version; ;
|
||||||
|
version = rawVers != null ? rawVers : new Version("0.0.0.0");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|||||||
@@ -10,7 +10,10 @@
|
|||||||
<div class="px-2">
|
<div class="px-2">
|
||||||
<i class="fas fa-user-alt"></i> <b>@userName</b>
|
<i class="fas fa-user-alt"></i> <b>@userName</b>
|
||||||
</div>
|
</div>
|
||||||
<div class="px-2 flex-grow-1 text-end">
|
<div class="pe-2">
|
||||||
|
<button class="btn btn-primary" @onclick="() => flushCache()" title="Forza Refresh Dati correnti"> Force Reload </button>
|
||||||
|
</div>
|
||||||
|
@* <div class="px-2 flex-grow-1 text-end">
|
||||||
<span class="text-secondary">@TipoSearch</span>
|
<span class="text-secondary">@TipoSearch</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="px-2 text-end">
|
<div class="px-2 text-end">
|
||||||
@@ -18,7 +21,7 @@
|
|||||||
{
|
{
|
||||||
<SearchMod></SearchMod>
|
<SearchMod></SearchMod>
|
||||||
}
|
}
|
||||||
</div>
|
</div>*@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
@@ -62,4 +65,22 @@
|
|||||||
userName = "N.A.";
|
userName = "N.A.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task flushCache()
|
||||||
|
{
|
||||||
|
await Task.Delay(1);
|
||||||
|
await MDService.FlushRedisCache();
|
||||||
|
await JSRuntime.InvokeAsync<bool>("location.reload");
|
||||||
|
// rimando a home
|
||||||
|
//NavManager.NavigateTo("", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private NavigationManager NavManager { get; set; } = null!;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected IJSRuntime JSRuntime { get; set; } = null!;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
public async Task resetCurrPage()
|
public void resetCurrPage()
|
||||||
{
|
{
|
||||||
await Task.Delay(1);
|
//await Task.Delay(1);
|
||||||
currPage = 1;
|
currPage = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,25 @@
|
|||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<a class="pt-2 text-dark" data-bs-toggle="offcanvas" data-bs-target="#paramsFilterExample" aria-controls="paramsFilterExample">
|
<div class="d-flex justify-content-between pt-2">
|
||||||
<i class="fa-solid fa-bars"></i>
|
@if (filtActive)
|
||||||
</a>
|
{
|
||||||
|
<div class=" rounded small d-flex justify-content-between" title="Filtri attivi">
|
||||||
|
@*<i class="fas fa-exclamation text-warning"></i>*@
|
||||||
|
@if (selMacchina != "*")
|
||||||
|
{
|
||||||
|
<button class="btn btn-outline-primary btn-sm mx-2" @onclick="()=>resetMacchina()" title="Rimuovi Filtro Impianto"><i class="fa-solid fa-hard-drive"></i>   <i class="fa-solid fa-xmark text-warning"></i></button>
|
||||||
|
}
|
||||||
|
@if (selArticolo != "*")
|
||||||
|
{
|
||||||
|
<button class="btn btn-outline-primary btn-sm mx-2" @onclick="()=>resetArticolo()" title="Rimuovi Filtro Articolo"><i class="fa-solid fa-sliders"></i>   <i class="fa-solid fa-xmark text-warning"></i></button>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<div class="p-2">
|
||||||
|
<a class="" data-bs-toggle="offcanvas" data-bs-target="#paramsFilterExample" aria-controls="paramsFilterExample">
|
||||||
|
<i class="fa-solid fa-bars text-dark"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="paramsFilterExample" aria-labelledby="paramsFilterExampleLabel">
|
<div class="offcanvas offcanvas-end" tabindex="-1" id="paramsFilterExample" aria-labelledby="paramsFilterExampleLabel">
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h3 class="offcanvas-title" id="paramsFilterExampleLabel"><b>FILTRI</b></h3>
|
<h3 class="offcanvas-title" id="paramsFilterExampleLabel"><b>FILTRI</b></h3>
|
||||||
@@ -11,7 +29,10 @@
|
|||||||
<div>
|
<div>
|
||||||
Seleziona i filtri per:
|
Seleziona i filtri per:
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group p-2">
|
<div class="small mt-2">
|
||||||
|
<label class="px-2" for="dtMin" title="Selezionare inizio periodo">Articolo</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-group px-2">
|
||||||
<label class="input-group-text" for="macchina" title="Selezionare l'articolo"><i class="fa-solid fa-file"></i></label>
|
<label class="input-group-text" for="macchina" title="Selezionare l'articolo"><i class="fa-solid fa-file"></i></label>
|
||||||
<select @bind="@selArticolo" class="form-select" id="macchina" title="Selezionare la macchina">
|
<select @bind="@selArticolo" class="form-select" id="macchina" title="Selezionare la macchina">
|
||||||
<option value="*">--- Tutti ---</option>
|
<option value="*">--- Tutti ---</option>
|
||||||
@@ -24,7 +45,10 @@
|
|||||||
}
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group p-2">
|
<div class="small mt-2">
|
||||||
|
<label class="px-2" for="dtMin" title="Selezionare inizio periodo">Macchina</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-group px-2">
|
||||||
<label class="input-group-text" for="macchina" title="Selezionare la macchina"><i class="fa-solid fa-hard-drive"></i></label>
|
<label class="input-group-text" for="macchina" title="Selezionare la macchina"><i class="fa-solid fa-hard-drive"></i></label>
|
||||||
<select @bind="@selMacchina" class="form-select" id="macchina" title="Selezionare la macchina">
|
<select @bind="@selMacchina" class="form-select" id="macchina" title="Selezionare la macchina">
|
||||||
<option value="*">--- Tutti ---</option>
|
<option value="*">--- Tutti ---</option>
|
||||||
@@ -52,19 +76,6 @@
|
|||||||
<label class="input-group-text" for="dtMax" title="Selezionare fine periodo"><i class="fa-regular fa-calendar-plus"></i></label>
|
<label class="input-group-text" for="dtMax" title="Selezionare fine periodo"><i class="fa-regular fa-calendar-plus"></i></label>
|
||||||
<input class="form-control" @bind="@selDtMax" id="dtMax" type="datetime-local" title="Selezionare fine periodo">
|
<input class="form-control" @bind="@selDtMax" id="dtMax" type="datetime-local" title="Selezionare fine periodo">
|
||||||
</div>
|
</div>
|
||||||
@*<div class="input-group p-2">
|
|
||||||
<label class="input-group-text" for="DtMin" title="Selezionare la data da visualizzare"><i class="fa-solid fa-calendar-check"></i></label>
|
|
||||||
<input @bind="@selDtRef" id="DtMin" class="form-control" type="datetime-local" title="Selezionare la data minima da visualizzare" />
|
|
||||||
</div>
|
|
||||||
<div class="input-group p-2">
|
|
||||||
<label class="input-group-text" for="maxRecord" title="Selezionare il numero massimo di record da visualizzare"><i class="fa-solid fa-list-ol"></i></label>
|
|
||||||
<select @bind="@selMaxRecord" class="form-select" id="maxRecord" title="Selezionare il numero massimo di record da visualizzare">
|
|
||||||
<option value="50">50</option>
|
|
||||||
<option value="100">100</option>
|
|
||||||
<option value="250">250</option>
|
|
||||||
<option value="500">500</option>
|
|
||||||
</select>
|
|
||||||
</div>*@
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -38,7 +38,18 @@ namespace MP.SPEC.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private bool filtActive
|
||||||
|
{
|
||||||
|
get => selMacchina != "*" || selArticolo != "*";
|
||||||
|
}
|
||||||
|
protected void resetMacchina()
|
||||||
|
{
|
||||||
|
selMacchina = "*";
|
||||||
|
}
|
||||||
|
protected void resetArticolo()
|
||||||
|
{
|
||||||
|
selArticolo = "*";
|
||||||
|
}
|
||||||
protected DateTime selDtMax
|
protected DateTime selDtMax
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
@using MP.SPEC.Components
|
@using MP.SPEC.Components
|
||||||
@using MP.SPEC.Data
|
@using MP.SPEC.Data
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@if (ListRecords == null)
|
@if (ListRecords == null)
|
||||||
{
|
{
|
||||||
<LoadingData></LoadingData>
|
<LoadingData></LoadingData>
|
||||||
@@ -11,6 +14,70 @@ else if (totalCount == 0)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@if (currFluxLogDto != null)
|
||||||
|
{
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card mb-5">
|
||||||
|
<div class="card-header bg-primary text-light d-flex justify-content-between">
|
||||||
|
<div>
|
||||||
|
Modifica Parametro
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
@if (isEditing)
|
||||||
|
{
|
||||||
|
<span class="text-light">PENDING CHANGES...</span>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm">MACCHINA</span>
|
||||||
|
<input type="text" class="form-control" disabled aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currFluxLogDto.IdxMacchina">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm">DATA</span>
|
||||||
|
<input type="text" class="form-control" disabled aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currFluxLogDto.dtEvento">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm">DATA TYPE</span>
|
||||||
|
<input type="text" class="form-control" disabled aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currFluxLogDto.CodFlux">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm">VALORE</span>
|
||||||
|
<input type="text" class="form-control" aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currFluxLogDto.ValoreEdit" @onclick="()=> enableEditing()">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row pt-4" style="visibility: @css()">
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
</div>
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
</div>
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
<div class="d-grid gap-2">
|
||||||
|
<button @onclick="() => cancel()" class="btn btn-warning">Annulla <i class="bi bi-x-circle"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 pe-0">
|
||||||
|
<div class="d-grid gap-2">
|
||||||
|
<button @onclick="() => update(currFluxLogDto)" class="btn btn-success">Save <i class="bi bi-save"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="d-flex justify justify-content-between">
|
<div class="d-flex justify justify-content-between">
|
||||||
<table class="table table-sm table-striped small">
|
<table class="table table-sm table-striped small">
|
||||||
@@ -24,7 +91,6 @@ else
|
|||||||
<th><i class="fa-solid fa-hard-drive"></i> Macchina</th>
|
<th><i class="fa-solid fa-hard-drive"></i> Macchina</th>
|
||||||
<th><i class="fa-regular fa-calendar-days"></i> Data Snap</th>
|
<th><i class="fa-regular fa-calendar-days"></i> Data Snap</th>
|
||||||
<th><i class="fa-solid fa-sliders"></i> ODL</th>
|
<th><i class="fa-solid fa-sliders"></i> ODL</th>
|
||||||
@*<th><i class="fa-solid fa-circle-info"></i> DATA TYPE</th>*@
|
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -33,7 +99,15 @@ else
|
|||||||
{
|
{
|
||||||
<tr class="@checkSelect(@record)">
|
<tr class="@checkSelect(@record)">
|
||||||
<td>
|
<td>
|
||||||
<button class="btn btn-primary btn-sm" @onclick="() => selRecord(record)"><i class="fa-solid fa-magnifying-glass"></i></button>
|
@if (isEditing == false)
|
||||||
|
{
|
||||||
|
|
||||||
|
<button class="btn btn-primary btn-sm" @onclick="() => selRecord(record)"><i class="fa-solid fa-magnifying-glass"></i></button>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<button class="btn btn-secondary btn-sm disabled"><i class="fa-solid fa-magnifying-glass"></i></button>
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@record.OdlNav.CodArticolo
|
@record.OdlNav.CodArticolo
|
||||||
@@ -52,11 +126,17 @@ else
|
|||||||
<td>
|
<td>
|
||||||
@record.IdxODL
|
@record.IdxODL
|
||||||
</td>
|
</td>
|
||||||
@*<td>
|
|
||||||
@record.DataType
|
|
||||||
</td>*@
|
|
||||||
<td>
|
<td>
|
||||||
<button @onclick="() => deleteRecord(record)" class="btn btn-danger btn-sm"><i class="bi bi-trash-fill"></i></button>
|
@if (isEditing == false)
|
||||||
|
{
|
||||||
|
|
||||||
|
<button @onclick="() => deleteRecord(record)" class="btn btn-danger btn-sm"><i class="bi bi-trash-fill"></i></button>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<button class="btn btn-secondary btn-sm disabled"><i class="bi bi-trash-fill"></i></button>
|
||||||
|
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
@@ -81,10 +161,8 @@ else
|
|||||||
<th><i class="fa-solid fa-hard-drive"></i> Macchina</th>
|
<th><i class="fa-solid fa-hard-drive"></i> Macchina</th>
|
||||||
<th><i class="fa-regular fa-calendar-days"></i> Data</th>
|
<th><i class="fa-regular fa-calendar-days"></i> Data</th>
|
||||||
<th><i class="fa-solid fa-sliders"></i> Data Type</th>
|
<th><i class="fa-solid fa-sliders"></i> Data Type</th>
|
||||||
<th>
|
<th style="text-align: right;">
|
||||||
<div class="d-flex justify-content-between col-12">
|
<span class="col-11"> Valore </span>
|
||||||
<span class="col-11" style="text-align: right;"> Valore </span>
|
|
||||||
</div>
|
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -103,6 +181,7 @@ else
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@record.CodFlux
|
@record.CodFlux
|
||||||
|
<div class="small text-dark" title="Valore Registrato"><i>@traduci(record.CodFlux)</i></div>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align: right;">
|
<td style="text-align: right;">
|
||||||
@if (record.ValoreEdit != record.Valore)
|
@if (record.ValoreEdit != record.Valore)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Microsoft.JSInterop;
|
|||||||
using MP.Data.DatabaseModels;
|
using MP.Data.DatabaseModels;
|
||||||
using MP.Data.DTO;
|
using MP.Data.DTO;
|
||||||
using MP.SPEC.Data;
|
using MP.SPEC.Data;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace MP.SPEC.Components
|
namespace MP.SPEC.Components
|
||||||
{
|
{
|
||||||
@@ -37,7 +38,7 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
answ = (currFluxLogDto.CodFlux == recordSel.CodFlux && currFluxLogDto.dtEvento== recordSel.dtEvento) ? "table-info" : "";
|
answ = (currFluxLogDto.CodFlux == recordSel.CodFlux && currFluxLogDto.dtEvento == recordSel.dtEvento) ? "table-info" : "";
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{ }
|
{ }
|
||||||
@@ -53,6 +54,7 @@ namespace MP.SPEC.Components
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
answ = (currRecord.IdxMacchina == recordSel.IdxMacchina && currRecord.DtRif == recordSel.DtRif) ? "table-info" : "";
|
answ = (currRecord.IdxMacchina == recordSel.IdxMacchina && currRecord.DtRif == recordSel.DtRif) ? "table-info" : "";
|
||||||
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{ }
|
{ }
|
||||||
@@ -61,28 +63,35 @@ namespace MP.SPEC.Components
|
|||||||
}
|
}
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
MessageService.EA_PageUpdated -= MessageService_EA_PageUpdated;
|
|
||||||
MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
SearchRecords = null;
|
SearchRecords = null;
|
||||||
ListRecords = null;
|
ListRecords = null;
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
}
|
}
|
||||||
|
private SelectDossierParams lastFilter { get; set; } = new SelectDossierParams() { CurrPage = -1 };
|
||||||
|
protected override async Task OnParametersSetAsync()
|
||||||
|
{
|
||||||
|
if (!lastFilter.Equals(SelFilter))
|
||||||
|
{
|
||||||
|
lastFilter = SelFilter.clone();
|
||||||
|
await reloadData(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
|
private string traduci(string lemma)
|
||||||
|
{
|
||||||
|
var answ = MDService.Traduci(lemma, "IT");
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected IJSRuntime JSRuntime { get; set; } = null!;
|
protected IJSRuntime JSRuntime { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MessageService { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
@@ -111,10 +120,62 @@ namespace MP.SPEC.Components
|
|||||||
await RecordSelFlux.InvokeAsync(selRec);
|
await RecordSelFlux.InvokeAsync(selRec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableEditing()
|
||||||
|
{
|
||||||
|
isEditing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task cancel()
|
||||||
|
{
|
||||||
|
var alert = await JSRuntime.InvokeAsync<bool>("confirm", "Confermi di voler annullare TUTTE le modifiche? i dati saranno ricaricati.");
|
||||||
|
if (alert)
|
||||||
|
{
|
||||||
|
currFluxLogDto = null;
|
||||||
|
isEditing = false;
|
||||||
|
await Task.Delay(1);
|
||||||
|
if (currRecord != null)
|
||||||
|
{
|
||||||
|
listaFlux = MDService.getFluxLog(currRecord.Valore);
|
||||||
|
}
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task update(FluxLogDTO selRec)
|
||||||
|
{
|
||||||
|
var alert = await JSRuntime.InvokeAsync<bool>("confirm", "Confermi di voler salvare TUTTE le modifiche? queste saranno parte del dossier inviato all'impianto");
|
||||||
|
|
||||||
|
if (alert)
|
||||||
|
{
|
||||||
|
|
||||||
|
await Task.Delay(1);
|
||||||
|
if (currRecord != null)
|
||||||
|
{
|
||||||
|
// serializzo valore x flux log...
|
||||||
|
DossierFluxLogDTO updatedResult = new DossierFluxLogDTO() { ODL = listaFlux };
|
||||||
|
string newVal = JsonConvert.SerializeObject(updatedResult);
|
||||||
|
currRecord.Valore = newVal;
|
||||||
|
// METODO PER UPDATE FLUX
|
||||||
|
await MDService.DossiersUpdateValore(currRecord);
|
||||||
|
currFluxLogDto = null;
|
||||||
|
isEditing = false;
|
||||||
|
await Task.Delay(1);
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currFluxLogDto = null;
|
||||||
|
await Task.Delay(1);
|
||||||
|
await JSRuntime.InvokeAsync<bool>("location.reload");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
MessageService.EA_PageUpdated += MessageService_EA_PageUpdated;
|
|
||||||
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
|
||||||
ListStati = await MDService.AnagStatiComm();
|
ListStati = await MDService.AnagStatiComm();
|
||||||
await reloadData(true);
|
await reloadData(true);
|
||||||
}
|
}
|
||||||
@@ -141,6 +202,19 @@ namespace MP.SPEC.Components
|
|||||||
currRecord = null;
|
currRecord = null;
|
||||||
await reloadData(true);
|
await reloadData(true);
|
||||||
}
|
}
|
||||||
|
private string css()
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (isEditing)
|
||||||
|
{
|
||||||
|
answ = "visible";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = "hidden";
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
@@ -150,7 +224,6 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private Dossiers? currRecord = null;
|
private Dossiers? currRecord = null;
|
||||||
|
|
||||||
private FluxLogDTO? currRecordFlux;
|
|
||||||
private List<Dossiers>? ListRecords;
|
private List<Dossiers>? ListRecords;
|
||||||
private List<ListValues>? ListStati;
|
private List<ListValues>? ListStati;
|
||||||
|
|
||||||
@@ -162,8 +235,14 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private int currPage
|
private int currPage
|
||||||
{
|
{
|
||||||
get => MessageService.currPage;
|
get => SelFilter.CurrPage;
|
||||||
set => MessageService.currPage = value;
|
set => SelFilter.CurrPage = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool isEditing
|
||||||
|
{
|
||||||
|
get => SelFilter.isEditing;
|
||||||
|
set => SelFilter.isEditing = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
private bool isLoading { get; set; } = false;
|
||||||
@@ -177,8 +256,8 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private int numRecord
|
private int numRecord
|
||||||
{
|
{
|
||||||
get => MessageService.numRecord;
|
get => SelFilter.NumRec;
|
||||||
set => MessageService.numRecord = value;
|
set => SelFilter.NumRec = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string SelArticolo
|
private string SelArticolo
|
||||||
@@ -219,11 +298,6 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
private async void MessageService_EA_PageUpdated()
|
|
||||||
{
|
|
||||||
await reloadData(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task reloadData(bool setChanged)
|
private async Task reloadData(bool setChanged)
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
@@ -263,6 +337,7 @@ namespace MP.SPEC.Components
|
|||||||
currFluxLogDto = null;
|
currFluxLogDto = null;
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
visualizzaFlux = true;
|
visualizzaFlux = true;
|
||||||
|
isEditing = false;
|
||||||
await RecordSelFlux.InvokeAsync(currFluxLogDto);
|
await RecordSelFlux.InvokeAsync(currFluxLogDto);
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,17 @@ else
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</td>
|
</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>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -205,10 +216,9 @@ else
|
|||||||
<div>
|
<div>
|
||||||
@if (statRecord != null)
|
@if (statRecord != null)
|
||||||
{
|
{
|
||||||
|
@if (ListOdlStatsAct != null)
|
||||||
@if (ListOdlStats != null)
|
|
||||||
{
|
{
|
||||||
@foreach (var stat in ListOdlStats)
|
@foreach (var stat in ListOdlStatsAct)
|
||||||
{
|
{
|
||||||
<div class="p-1">
|
<div class="p-1">
|
||||||
<div class="d-flex justify-content-between">
|
<div class="d-flex justify-content-between">
|
||||||
@@ -234,11 +244,12 @@ else
|
|||||||
@if (statRecord != null && ListOdlStats != null)
|
@if (statRecord != null && ListOdlStats != null)
|
||||||
{
|
{
|
||||||
<div class="dcBox">
|
<div class="dcBox">
|
||||||
<ODLPlot SelectedOdl="@statRecord.IdxOdl"></ODLPlot>
|
<ODLPlot SelectedOdl="@statRecord.IdxOdl" hideSpenta="@hideSpenta"></ODLPlot>
|
||||||
</div>
|
</div>
|
||||||
<div class="dcBox dcOverlay d-flex">
|
<div class="dcBox dcOverlay d-flex">
|
||||||
<div class="align-self-center text-center w-100">
|
<div class="align-self-center text-center w-100">
|
||||||
<b class="fs-3">@statRecord.DurataMinuti</b>
|
<b class="fs-3">@durataFilt</b>
|
||||||
|
@*<b class="fs-3">@statRecord.DurataMinuti</b>*@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ namespace MP.SPEC.Components
|
|||||||
ListRecords = null;
|
ListRecords = null;
|
||||||
ListStati = null;
|
ListStati = null;
|
||||||
ListOdlStats = null;
|
ListOdlStats = null;
|
||||||
|
ListOdlStatsNetto = null;
|
||||||
statRecord = null;
|
statRecord = null;
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
}
|
}
|
||||||
@@ -87,7 +88,7 @@ namespace MP.SPEC.Components
|
|||||||
await MDService.ODLClose(currRecord.IdxOdl, currRecord.IdxMacchina, 0, true);
|
await MDService.ODLClose(currRecord.IdxOdl, currRecord.IdxMacchina, 0, true);
|
||||||
Log.Info($"Effettuata chiusura ODL {currRecord.IdxOdl}");
|
Log.Info($"Effettuata chiusura ODL {currRecord.IdxOdl}");
|
||||||
// ricarica...
|
// ricarica...
|
||||||
await selectRecord(null);
|
await selRecord(null);
|
||||||
}
|
}
|
||||||
await reloadData();
|
await reloadData();
|
||||||
}
|
}
|
||||||
@@ -116,7 +117,7 @@ namespace MP.SPEC.Components
|
|||||||
await callSyncDb(currRecord.IdxMacchina);
|
await callSyncDb(currRecord.IdxMacchina);
|
||||||
Log.Info($"Richiesto forceSyncDb per idxMacc {currRecord.IdxMacchina}");
|
Log.Info($"Richiesto forceSyncDb per idxMacc {currRecord.IdxMacchina}");
|
||||||
// ricarica...
|
// ricarica...
|
||||||
await selectRecord(null);
|
await selRecord(null);
|
||||||
}
|
}
|
||||||
await reloadData();
|
await reloadData();
|
||||||
}
|
}
|
||||||
@@ -143,27 +144,10 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
protected async Task resetSel()
|
protected async Task resetSel()
|
||||||
{
|
{
|
||||||
await selectRecord(null);
|
await selRecord(null);
|
||||||
await reloadData();
|
await reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task selectRecord(ODLModel? currRec)
|
|
||||||
{
|
|
||||||
showStats = true;
|
|
||||||
await Task.Delay(1);
|
|
||||||
currRecord = currRec;
|
|
||||||
if (currRec != null)
|
|
||||||
{
|
|
||||||
showStats = true;
|
|
||||||
ListOdlStats = await MDService.StatOdl(currRec.IdxOdl);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
showStats = false;
|
|
||||||
ListOdlStats = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task selectStatRecord(ODLModel? currRec)
|
protected async Task selectStatRecord(ODLModel? currRec)
|
||||||
{
|
{
|
||||||
showStats = true;
|
showStats = true;
|
||||||
@@ -171,8 +155,7 @@ namespace MP.SPEC.Components
|
|||||||
statRecord = currRec;
|
statRecord = currRec;
|
||||||
if (currRec != null)
|
if (currRec != null)
|
||||||
{
|
{
|
||||||
showStats = true;
|
await reloadStatsData(currRec);
|
||||||
ListOdlStats = await MDService.StatOdl(currRec.IdxOdl);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -188,11 +171,22 @@ namespace MP.SPEC.Components
|
|||||||
currRecord = currRec;
|
currRecord = currRec;
|
||||||
showStats = false;
|
showStats = false;
|
||||||
ListOdlStats = null;
|
ListOdlStats = null;
|
||||||
|
ListOdlStatsNetto = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task toggleSpenta()
|
||||||
|
{
|
||||||
|
hideSpenta = !hideSpenta;
|
||||||
|
await Task.Delay(1);
|
||||||
|
if (statRecord != null)
|
||||||
|
{
|
||||||
|
await reloadStatsData(statRecord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task UpdateData()
|
protected async Task UpdateData()
|
||||||
{
|
{
|
||||||
await selectRecord(null);
|
await selRecord(null);
|
||||||
await reloadData();
|
await reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,10 +195,13 @@ namespace MP.SPEC.Components
|
|||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|
||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
private ODLModel? currRecord = null;
|
private ODLModel? currRecord = null;
|
||||||
|
|
||||||
private List<StatODLModel>? ListOdlStats;
|
private List<StatODLModel>? ListOdlStats;
|
||||||
|
|
||||||
|
private List<StatODLModel>? ListOdlStatsNetto;
|
||||||
|
|
||||||
private List<ODLModel>? ListRecords;
|
private List<ODLModel>? ListRecords;
|
||||||
|
|
||||||
private List<ListValues>? ListStati;
|
private List<ListValues>? ListStati;
|
||||||
@@ -225,6 +222,39 @@ namespace MP.SPEC.Components
|
|||||||
set => currFilter.CurrPage = value;
|
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>
|
/// <summary>
|
||||||
/// Indica se si tratti di ODL correnti
|
/// Indica se si tratti di ODL correnti
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -235,12 +265,39 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
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
|
private int numRecord
|
||||||
{
|
{
|
||||||
get => currFilter.NumRec;
|
get => currFilter.NumRec;
|
||||||
set => currFilter.NumRec = value;
|
set => currFilter.NumRec = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string rightStringCSS
|
||||||
|
{
|
||||||
|
get => hideSpenta ? "text-dark fw-bold" : "text-secondary";
|
||||||
|
}
|
||||||
|
|
||||||
private DateTime selDtFine { get; set; } = DateTime.Now;
|
private DateTime selDtFine { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
private bool showStats { get; set; } = false;
|
private bool showStats { get; set; } = false;
|
||||||
@@ -286,12 +343,9 @@ namespace MP.SPEC.Components
|
|||||||
double answ = 0;
|
double answ = 0;
|
||||||
|
|
||||||
double tot = 0;
|
double tot = 0;
|
||||||
if (ListOdlStats != null)
|
if (ListOdlStatsAct != null)
|
||||||
{
|
{
|
||||||
foreach (var item in ListOdlStats)
|
tot = ListOdlStatsAct.Sum(x => x.TotDurata);
|
||||||
{
|
|
||||||
tot += item.TotDurata;
|
|
||||||
}
|
|
||||||
|
|
||||||
double perc = (durata / tot) * 100;
|
double perc = (durata / tot) * 100;
|
||||||
if (perc > 1)
|
if (perc > 1)
|
||||||
@@ -349,6 +403,21 @@ namespace MP.SPEC.Components
|
|||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task reloadStatsData(ODLModel? currRec)
|
||||||
|
{
|
||||||
|
showStats = true;
|
||||||
|
if (currRec != null)
|
||||||
|
{
|
||||||
|
ListOdlStats = await MDService.StatOdl(currRec.IdxOdl);
|
||||||
|
ListOdlStatsNetto = ListOdlStats.Where(x => x.Semaforo != "sGr").ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ListOdlStats = null;
|
||||||
|
ListOdlStatsNetto = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private string tradFase(string codFase)
|
private string tradFase(string codFase)
|
||||||
{
|
{
|
||||||
string answ = codFase;
|
string answ = codFase;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ else
|
|||||||
<th><i class="fa-regular fa-calendar-days"></i> Data</th>
|
<th><i class="fa-regular fa-calendar-days"></i> Data</th>
|
||||||
<th><i class="fa-solid fa-hard-drive"></i> Macchina</th>
|
<th><i class="fa-solid fa-hard-drive"></i> Macchina</th>
|
||||||
<th><i class="fa-solid fa-sliders"></i> Parametro</th>
|
<th><i class="fa-solid fa-sliders"></i> Parametro</th>
|
||||||
|
<th><i class="fa-solid fa-sliders"></i> Nome</th>
|
||||||
<th style="text-align: right">Valore</th>
|
<th style="text-align: right">Valore</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -41,6 +42,9 @@ else
|
|||||||
<td>
|
<td>
|
||||||
@record.CodFlux
|
@record.CodFlux
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
@traduci(record.CodFlux)
|
||||||
|
</td>
|
||||||
<td style="text-align: right">
|
<td style="text-align: right">
|
||||||
<b>@record.Valore</b>
|
<b>@record.Valore</b>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Microsoft.JSInterop;
|
|||||||
using MP.Data.DatabaseModels;
|
using MP.Data.DatabaseModels;
|
||||||
using MP.SPEC.Data;
|
using MP.SPEC.Data;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using MP.Data;
|
||||||
|
|
||||||
namespace MP.SPEC.Components
|
namespace MP.SPEC.Components
|
||||||
{
|
{
|
||||||
@@ -25,7 +26,7 @@ namespace MP.SPEC.Components
|
|||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
private SelectFluxParams lastFilter { get; set; } = new SelectFluxParams() { CurrPage = -1 };
|
||||||
public string checkSelect(FluxLog selRecord)
|
public string checkSelect(FluxLog selRecord)
|
||||||
{
|
{
|
||||||
string answ = "";
|
string answ = "";
|
||||||
@@ -45,10 +46,10 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
// se sono cambiati --> rileggo...
|
// se sono cambiati --> rileggo...
|
||||||
if (LastFilter==null || !SelFilter.Equals(LastFilter))
|
if (!lastFilter.Equals(SelFilter))
|
||||||
{
|
{
|
||||||
await reloadData(false);
|
lastFilter = SelFilter.clone();
|
||||||
LastFilter = SelFilter;
|
await reloadData(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,8 +59,6 @@ namespace MP.SPEC.Components
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
aTimer.Elapsed -= ElapsedTimer;
|
aTimer.Elapsed -= ElapsedTimer;
|
||||||
MessageService.EA_PageUpdated -= MessageService_EA_PageUpdated;
|
|
||||||
MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
|
||||||
aTimer.Stop();
|
aTimer.Stop();
|
||||||
aTimer.Dispose();
|
aTimer.Dispose();
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
@@ -128,9 +127,6 @@ namespace MP.SPEC.Components
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MessageService { get; set; } = null!;
|
|
||||||
|
|
||||||
protected int RefreshPeriod
|
protected int RefreshPeriod
|
||||||
{
|
{
|
||||||
get => SelFilter.TempoAgg;
|
get => SelFilter.TempoAgg;
|
||||||
@@ -140,10 +136,8 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
MessageService.EA_PageUpdated += MessageService_EA_PageUpdated;
|
|
||||||
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
|
||||||
StartTimer();
|
StartTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,6 +157,7 @@ namespace MP.SPEC.Components
|
|||||||
protected async Task resetSel()
|
protected async Task resetSel()
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
|
setDtMax();
|
||||||
await RecordSel.InvokeAsync(null);
|
await RecordSel.InvokeAsync(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +165,13 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
currRecord = selRec;
|
currRecord = selRec;
|
||||||
SelFilter.IdxMacchina = selRec.IdxMacchina;
|
SelFilter.IdxMacchina = selRec.IdxMacchina;
|
||||||
|
SelDtMax = selRec.dtEvento;
|
||||||
|
// imposto pag 1 filtro
|
||||||
|
SelFilter.CurrPage = 1;
|
||||||
|
//selDtMin = RoundDatetime(5).AddHours(-25);
|
||||||
await reloadData(false);
|
await reloadData(false);
|
||||||
await RecordSel.InvokeAsync(selRec);
|
await RecordSel.InvokeAsync(selRec);
|
||||||
|
await PagerResetReq.InvokeAsync(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task UpdateData()
|
protected async Task UpdateData()
|
||||||
@@ -182,6 +182,13 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
|
||||||
|
private string traduci(string lemma)
|
||||||
|
{
|
||||||
|
var answ = MDService.Traduci(lemma, "IT");
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|
||||||
private static System.Timers.Timer aTimer = null!;
|
private static System.Timers.Timer aTimer = null!;
|
||||||
@@ -197,8 +204,8 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private int currPage
|
private int currPage
|
||||||
{
|
{
|
||||||
get => MessageService.currPage;
|
get => SelFilter.CurrPage;
|
||||||
set => MessageService.currPage = value;
|
set => SelFilter.CurrPage = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
private bool isLoading { get; set; } = false;
|
||||||
@@ -215,8 +222,8 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private int numRecord
|
private int numRecord
|
||||||
{
|
{
|
||||||
get => MessageService.numRecord;
|
get => SelFilter.NumRec;
|
||||||
set => MessageService.numRecord = value;
|
set => SelFilter.NumRec = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string SelFlux
|
private string SelFlux
|
||||||
@@ -231,8 +238,33 @@ namespace MP.SPEC.Components
|
|||||||
private DateTime? SelDtMax
|
private DateTime? SelDtMax
|
||||||
{
|
{
|
||||||
get => SelFilter.dtMax;
|
get => SelFilter.dtMax;
|
||||||
|
set => SelFilter.dtMax = value;
|
||||||
|
}
|
||||||
|
protected void setDtMax()
|
||||||
|
{
|
||||||
|
// copio il filtro
|
||||||
|
var currFilt = SelFilter;
|
||||||
|
// fermo update
|
||||||
|
//currFilt.LiveUpdate = true;
|
||||||
|
currFilt.CurrPage = 0;
|
||||||
|
currFilt.lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}";
|
||||||
|
currFilt.dtMax = RoundDatetime(5);
|
||||||
|
currFilt.dtMin = RoundDatetime(5).AddHours(-25);
|
||||||
|
SelFilter = currFilt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inizializzazione con periodo e arrotondamento
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="minRound"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DateTime RoundDatetime(int minRound)
|
||||||
|
{
|
||||||
|
TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today);
|
||||||
|
int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound;
|
||||||
|
DateTime endRounded = DateTime.Today.AddMinutes(minDay);
|
||||||
|
return endRounded;
|
||||||
|
}
|
||||||
private int totalCount
|
private int totalCount
|
||||||
{
|
{
|
||||||
get => _totalCount;
|
get => _totalCount;
|
||||||
@@ -250,11 +282,6 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
private async void MessageService_EA_PageUpdated()
|
|
||||||
{
|
|
||||||
await reloadData(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
#endregion Private Methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,13 +37,13 @@ else
|
|||||||
<button @onclick="() => cloneRecord(record)" class="btn btn-info btn-sm" title="Duplica Record"><i class="bi bi-clipboard-check"></i></button>
|
<button @onclick="() => cloneRecord(record)" class="btn btn-info btn-sm" title="Duplica Record"><i class="bi bi-clipboard-check"></i></button>
|
||||||
@if (canStartOdl(record.IdxMacchina))
|
@if (canStartOdl(record.IdxMacchina))
|
||||||
{
|
{
|
||||||
<button @onclick="() => startOdl(record)" class="btn btn-success btn-sm" title="Avvia PODL">
|
<button @onclick="() => startOdl(record)" class="btn btn-success btn-sm mx-1" title="Avvia PODL">
|
||||||
<i class="far fa-play-circle"></i>
|
<i class="far fa-play-circle"></i>
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<button class="btn btn-secondary btn-sm disabled" title="ODL ancora in corso">
|
<button class="btn btn-secondary btn-sm disabled mx-1" title="ODL ancora in corso">
|
||||||
<i class="far fa-play-circle"></i>
|
<i class="far fa-play-circle"></i>
|
||||||
</button>}
|
</button>}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -1,14 +1,25 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using MP.Data.DatabaseModels;
|
using MP.Data.DatabaseModels;
|
||||||
using MP.SPEC.Components;
|
|
||||||
using MP.SPEC.Data;
|
using MP.SPEC.Data;
|
||||||
|
|
||||||
namespace MP.SPEC.Components
|
namespace MP.SPEC.Components
|
||||||
{
|
{
|
||||||
public partial class ODLPlot
|
public partial class ODLPlot
|
||||||
{
|
{
|
||||||
#region Public Properties
|
#region Public Fields
|
||||||
|
|
||||||
|
public List<DoughnutStyling> colors = new List<DoughnutStyling>();
|
||||||
|
|
||||||
|
public List<double> Data = new List<double>();
|
||||||
|
|
||||||
|
public List<string> Labels = new List<string>();
|
||||||
|
|
||||||
|
#endregion Public Fields
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public bool hideSpenta { get; set; }
|
||||||
|
|
||||||
public int OdlId
|
public int OdlId
|
||||||
{
|
{
|
||||||
@@ -29,34 +40,36 @@ namespace MP.SPEC.Components
|
|||||||
//protected DataLogFilter _SelFilter { get; set; } = new DataLogFilter();
|
//protected DataLogFilter _SelFilter { get; set; } = new DataLogFilter();
|
||||||
protected int _selParam { get; set; } = -1;
|
protected int _selParam { get; set; } = -1;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
private List<StatODLModel>? ListRecords = null;
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
await ReloadData();
|
await ReloadData();
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<double> Data = new List<double>();
|
|
||||||
public List<string> Labels = new List<string>();
|
|
||||||
public List<DoughnutStyling> colors = new List<DoughnutStyling>();
|
|
||||||
|
|
||||||
protected async Task ReloadData()
|
protected async Task ReloadData()
|
||||||
{
|
{
|
||||||
Data.Clear();
|
Data.Clear();
|
||||||
Labels.Clear();
|
Labels.Clear();
|
||||||
colors.Clear();
|
colors.Clear();
|
||||||
ListRecords = await MDService.StatOdl(SelectedOdl);
|
ListRecords = await MDService.StatOdl(SelectedOdl);
|
||||||
|
// se hideSpenta --> filtro stato 11 = spenta...
|
||||||
|
if (hideSpenta)
|
||||||
|
{
|
||||||
|
ListRecords = ListRecords.Where(x => x.Semaforo != "sGr").ToList();
|
||||||
|
}
|
||||||
foreach (var record in ListRecords)
|
foreach (var record in ListRecords)
|
||||||
{
|
{
|
||||||
Data.Add(record.TotDurata);
|
Data.Add(record.TotDurata);
|
||||||
@@ -73,18 +86,23 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
colors.Add(new DoughnutStyling(record.Css, "ccc"));
|
colors.Add(new DoughnutStyling(record.Css, "ccc"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MpDataService MDService { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private List<StatODLModel>? ListRecords = null;
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
private bool isLoading { get; set; } = false;
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,13 +3,13 @@
|
|||||||
<div class="px-2">
|
<div class="px-2">
|
||||||
@if (!liveUpdate)
|
@if (!liveUpdate)
|
||||||
{
|
{
|
||||||
<button class="btn btn-secondary" type="button" @onclick="() => toggleUpdate()" title="Click per tornare a Valori Live">
|
<button class="btn btn-secondary" type="button" @onclick="() => live()" title="Click per tornare a Valori Live">
|
||||||
<small>@lastUpdate</small>
|
<small>@lastUpdate</small>
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<button class="btn btn-primary" type="button" @onclick="() => toggleUpdate()">
|
<button class="btn btn-primary" type="button" @onclick="() => notLive()">
|
||||||
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
|
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
|
||||||
Valori live
|
Valori live
|
||||||
</button>
|
</button>
|
||||||
@@ -38,89 +38,106 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="pt-2" data-bs-toggle="offcanvas" data-bs-target="#paramsFilterExample" aria-controls="paramsFilterExample" @onclick="setDtMax">
|
<div class="d-flex justify-content-between pt-2">
|
||||||
<i class="fa-solid fa-bars text-dark"></i>
|
@if (filtActive)
|
||||||
</a>
|
{
|
||||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="paramsFilterExample" aria-labelledby="paramsFilterExampleLabel">
|
@*<i class="fas fa-exclamation text-warning"></i>*@
|
||||||
<div class="offcanvas-header">
|
@if (selMacchina != "*")
|
||||||
<h3 class="offcanvas-title" id="paramsFilterExampleLabel"><b>FILTRI</b></h3>
|
{
|
||||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
<button class="btn btn-outline-primary btn-sm mx-2" @onclick="()=>resetMacchina()" title="Rimuovi Filtro Impianto"><i class="fa-solid fa-hard-drive"></i>   <i class="fa-solid fa-xmark text-warning"></i></button>
|
||||||
|
}
|
||||||
|
@if (selFlux != "*")
|
||||||
|
{
|
||||||
|
<button class="btn btn-outline-primary btn-sm mx-2" @onclick="()=>resetFase()" title="Rimuovi Filtro Parametro"><i class="fa-solid fa-sliders"></i>   <i class="fa-solid fa-xmark text-warning"></i></button>
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
<div class="p-2">
|
||||||
|
<a class="" data-bs-toggle="offcanvas" data-bs-target="#paramsFilterExample" aria-controls="paramsFilterExample">
|
||||||
|
<i class="fa-solid fa-bars text-dark"></i>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="offcanvas-body">
|
</div>
|
||||||
<div class="small">
|
</div>
|
||||||
<label class="px-2" for="macchina" title="Selezionare impianto">Impianto</label>
|
<div class="offcanvas offcanvas-end" tabindex="-1" id="paramsFilterExample" aria-labelledby="paramsFilterExampleLabel">
|
||||||
</div>
|
<div class="offcanvas-header">
|
||||||
<div class="px-2 input-group">
|
<h3 class="offcanvas-title" id="paramsFilterExampleLabel"><b>FILTRI</b></h3>
|
||||||
<label class="input-group-text" for="macchina" title="Selezionare impianto"><i class="fa-solid fa-hard-drive"></i></label>
|
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||||
<select @bind="@selMacchina" class="form-select" id="macchina" title="Selezionare impianto">
|
</div>
|
||||||
<option value="*">--- Tutti ---</option>
|
<div class="offcanvas-body">
|
||||||
@if (ListMacchine != null)
|
<div class="small">
|
||||||
|
<label class="px-2" for="macchina" title="Selezionare impianto">Impianto</label>
|
||||||
|
</div>
|
||||||
|
<div class="px-2 input-group">
|
||||||
|
<label class="input-group-text" for="macchina" title="Selezionare impianto"><i class="fa-solid fa-hard-drive"></i></label>
|
||||||
|
<select @bind="@selMacchina" class="form-select" id="macchina" title="Selezionare impianto">
|
||||||
|
<option value="*">--- Tutti ---</option>
|
||||||
|
@if (ListMacchine != null)
|
||||||
|
{
|
||||||
|
foreach (var item in ListMacchine)
|
||||||
{
|
{
|
||||||
foreach (var item in ListMacchine)
|
<option value="@item">@item</option>
|
||||||
{
|
|
||||||
<option value="@item">@item</option>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</select>
|
}
|
||||||
</div>
|
</select>
|
||||||
<div class="small mt-2">
|
</div>
|
||||||
<label class="px-2" for="flusso" title="Selezionare il parametro">Parametro</label>
|
<div class="small mt-2">
|
||||||
</div>
|
<label class="px-2" for="flusso" title="Selezionare il parametro">Parametro</label>
|
||||||
<div class="px-2 input-group">
|
</div>
|
||||||
<label class="input-group-text" for="flusso" title="Selezionare il parametro"><i class="fa-solid fa-sliders"></i></label>
|
<div class="px-2 input-group">
|
||||||
<select @bind="@selFlux" class="form-select" id="flusso" title="Selezionare il parametro">
|
<label class="input-group-text" for="flusso" title="Selezionare il parametro"><i class="fa-solid fa-sliders"></i></label>
|
||||||
<option value="*">--- Tutti ---</option>
|
<select @bind="@selFlux" class="form-select" id="flusso" title="Selezionare il parametro">
|
||||||
@if (ListFlux != null)
|
<option value="*">--- Tutti ---</option>
|
||||||
|
@if (ListFlux != null)
|
||||||
|
{
|
||||||
|
foreach (var item in ListFlux)
|
||||||
{
|
{
|
||||||
foreach (var item in ListFlux)
|
<option value="@item">@item</option>
|
||||||
{
|
|
||||||
<option value="@item">@item</option>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</select>
|
}
|
||||||
</div>
|
</select>
|
||||||
<div class="small mt-2">
|
</div>
|
||||||
<label class="px-2" for="dtMin" title="Selezionare inizio periodo">Inizio Periodo</label>
|
<div class="small mt-2">
|
||||||
</div>
|
<label class="px-2" for="dtMin" title="Selezionare inizio periodo">Inizio Periodo</label>
|
||||||
<div class="px-2 input-group">
|
</div>
|
||||||
<label class="input-group-text" for="dtMin" title="Selezionare inizio periodo"><i class="fa-regular fa-calendar-minus"></i></label>
|
<div class="px-2 input-group">
|
||||||
<input class="form-control" @bind="@selDtMin" id="dtMin" type="datetime-local" title="Data minima eventi da visualizzare">
|
<label class="input-group-text" for="dtMin" title="Selezionare inizio periodo"><i class="fa-regular fa-calendar-minus"></i></label>
|
||||||
</div>
|
<input class="form-control" @bind="@selDtMin" id="dtMin" type="datetime-local" title="Data minima eventi da visualizzare">
|
||||||
<div class="small mt-2">
|
</div>
|
||||||
<label class="px-2" for="dtMax" title="Selezionare fine periodo">Fine Periodo</label>
|
<div class="small mt-2">
|
||||||
</div>
|
<label class="px-2" for="dtMax" title="Selezionare fine periodo">Fine Periodo</label>
|
||||||
<div class="px-2 input-group">
|
</div>
|
||||||
<label class="input-group-text" for="dtMax" title="Selezionare fine periodo"><i class="fa-regular fa-calendar-plus"></i></label>
|
<div class="px-2 input-group">
|
||||||
<input class="form-control" @bind="@selDtMax" id="dtMax" type="datetime-local" title="Selezionare fine periodo">
|
<label class="input-group-text" for="dtMax" title="Selezionare fine periodo"><i class="fa-regular fa-calendar-plus"></i></label>
|
||||||
</div>
|
<input class="form-control" @bind="@selDtMax" id="dtMax" type="datetime-local" title="Selezionare fine periodo">
|
||||||
<div class="small mt-2">
|
</div>
|
||||||
<label class="px-2" for="tempoAgg" title="Selezionare refresh rate (sec) periodo">Refresh rate (sec)</label>
|
<div class="small mt-2">
|
||||||
</div>
|
<label class="px-2" for="tempoAgg" title="Selezionare refresh rate (sec) periodo">Refresh rate (sec)</label>
|
||||||
<div class="px-2 input-group">
|
</div>
|
||||||
<label class="input-group-text" for="tempoAgg" title="Selezionare refresh rate (sec)"><i class="fa-solid fa-clock"></i></label>
|
<div class="px-2 input-group">
|
||||||
<select @bind="@selTempoAgg" class="form-select" id="tempoAgg" title="Selezionare refresh rate (sec)" style="width: 3em;">
|
<label class="input-group-text" for="tempoAgg" title="Selezionare refresh rate (sec)"><i class="fa-solid fa-clock"></i></label>
|
||||||
<option value="2">2</option>
|
<select @bind="@selTempoAgg" class="form-select" id="tempoAgg" title="Selezionare refresh rate (sec)" style="width: 3em;">
|
||||||
<option value="5">5</option>
|
<option value="2">2</option>
|
||||||
<option value="10">10</option>
|
<option value="5">5</option>
|
||||||
<option value="30">30</option>
|
<option value="10">10</option>
|
||||||
<option value="60">60</option>
|
<option value="30">30</option>
|
||||||
</select>
|
<option value="60">60</option>
|
||||||
</div>
|
</select>
|
||||||
<div class="small mt-2">
|
</div>
|
||||||
<label class="px-2" for="maxRecord" title="Numero massimo record da mostrare">Max Record</label>
|
<div class="small mt-2">
|
||||||
</div>
|
<label class="px-2" for="maxRecord" title="Numero massimo record da mostrare">Max Record</label>
|
||||||
<div class="px-2 input-group">
|
</div>
|
||||||
<label class="input-group-text" for="maxRecord" title="Numero massimo record da mostrare"><i class="fa-solid fa-list-ol"></i></label>
|
<div class="px-2 input-group">
|
||||||
<select @bind="@selMaxRecord" class="form-select" id="maxRecord" title="Numero massimo record da mostrare">
|
<label class="input-group-text" for="maxRecord" title="Numero massimo record da mostrare"><i class="fa-solid fa-list-ol"></i></label>
|
||||||
<option value="50">50</option>
|
<select @bind="@selMaxRecord" class="form-select" id="maxRecord" title="Numero massimo record da mostrare">
|
||||||
<option value="100">100</option>
|
<option value="50">50</option>
|
||||||
<option value="250">250</option>
|
<option value="100">100</option>
|
||||||
<option value="500">500</option>
|
<option value="250">250</option>
|
||||||
<option value="1000">1000</option>
|
<option value="500">500</option>
|
||||||
<option value="2500">2500</option>
|
<option value="1000">1000</option>
|
||||||
<option value="5000">5000</option>
|
<option value="2500">2500</option>
|
||||||
</select>
|
<option value="5000">5000</option>
|
||||||
</div>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -165,6 +165,10 @@ namespace MP.SPEC.Components
|
|||||||
NavManager.NavigateTo("DOSS", true);
|
NavManager.NavigateTo("DOSS", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool filtActive
|
||||||
|
{
|
||||||
|
get => selMacchina != "*" || selFlux != "*";
|
||||||
|
}
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
SelFilter = new SelectFluxParams();
|
SelFilter = new SelectFluxParams();
|
||||||
@@ -178,7 +182,9 @@ namespace MP.SPEC.Components
|
|||||||
var currRec = configData.FirstOrDefault(x => x.Chiave == "numOreAnticipoSnapshot");
|
var currRec = configData.FirstOrDefault(x => x.Chiave == "numOreAnticipoSnapshot");
|
||||||
if (currRec != null)
|
if (currRec != null)
|
||||||
{
|
{
|
||||||
int.TryParse(currRec.Valore, out numOreAnticipoSnapshot);
|
var newInt = 40;
|
||||||
|
int.TryParse(currRec.Valore, out newInt);
|
||||||
|
numOreAnticipoSnapshot = newInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
await FilterChanged.InvokeAsync(SelFilter);
|
await FilterChanged.InvokeAsync(SelFilter);
|
||||||
@@ -205,6 +211,14 @@ namespace MP.SPEC.Components
|
|||||||
aTimer.Enabled = true;
|
aTimer.Enabled = true;
|
||||||
aTimer.Start();
|
aTimer.Start();
|
||||||
}
|
}
|
||||||
|
protected void resetMacchina()
|
||||||
|
{
|
||||||
|
selMacchina = "*";
|
||||||
|
}
|
||||||
|
protected void resetFase()
|
||||||
|
{
|
||||||
|
selFlux = "*";
|
||||||
|
}
|
||||||
|
|
||||||
protected async Task takeSnapshot()
|
protected async Task takeSnapshot()
|
||||||
{
|
{
|
||||||
@@ -228,18 +242,19 @@ namespace MP.SPEC.Components
|
|||||||
selDtMax = null;
|
selDtMax = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task toggleUpdate()
|
protected async Task notLive()
|
||||||
{
|
{
|
||||||
liveUpdate = !liveUpdate;
|
liveUpdate = false;
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
if (!liveUpdate)
|
if (!liveUpdate)
|
||||||
{
|
{
|
||||||
lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}";
|
lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}";
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
protected async Task live()
|
||||||
selDtMax = null;
|
{
|
||||||
}
|
liveUpdate = true;
|
||||||
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
@@ -249,7 +264,7 @@ namespace MP.SPEC.Components
|
|||||||
private static System.Timers.Timer aTimer = new System.Timers.Timer();
|
private static System.Timers.Timer aTimer = new System.Timers.Timer();
|
||||||
private List<string>? ListFlux = null;
|
private List<string>? ListFlux = null;
|
||||||
private List<string>? ListMacchine = null;
|
private List<string>? ListMacchine = null;
|
||||||
private int numOreAnticipoSnapshot = 5;
|
private int numOreAnticipoSnapshot { get; set; } = 50;
|
||||||
private bool snapshotDone = false;
|
private bool snapshotDone = false;
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
{
|
{
|
||||||
#region Public Events
|
#region Public Events
|
||||||
|
|
||||||
public event Action EA_PageUpdated;
|
public event Action EA_PageUpdated = null!;
|
||||||
|
|
||||||
public event Action EA_SearchUpdated;
|
public event Action EA_SearchUpdated = null!;
|
||||||
|
|
||||||
public event Action EA_ShowSearch;
|
public event Action EA_ShowSearch = null!;
|
||||||
|
|
||||||
public event Action EA_StatoSearch;
|
public event Action EA_StatoSearch = null!;
|
||||||
|
|
||||||
#endregion Public Events
|
#endregion Public Events
|
||||||
|
|
||||||
|
|||||||
+144
-32
@@ -29,10 +29,6 @@ namespace MP.SPEC.Data
|
|||||||
|
|
||||||
_logger.LogInformation("Redis INIT");
|
_logger.LogInformation("Redis INIT");
|
||||||
|
|
||||||
// setup canali pub/sub
|
|
||||||
dataPipe = new MessagePipe(redisConn, Constants.ACT_MSE_DATA_KEY);
|
|
||||||
blinkPipe = new MessagePipe(redisConn, Constants.ACT_BLINK_KEY);
|
|
||||||
|
|
||||||
// conf DB
|
// conf DB
|
||||||
string connStr = _configuration.GetConnectionString("Mp.Data");
|
string connStr = _configuration.GetConnectionString("Mp.Data");
|
||||||
if (string.IsNullOrEmpty(connStr))
|
if (string.IsNullOrEmpty(connStr))
|
||||||
@@ -52,15 +48,11 @@ namespace MP.SPEC.Data
|
|||||||
|
|
||||||
public static MP.Data.Controllers.MpSpecController dbController { get; set; } = null!;
|
public static MP.Data.Controllers.MpSpecController dbController { get; set; } = null!;
|
||||||
|
|
||||||
public MessagePipe blinkPipe { get; set; } = null!;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Dizionario dei tag configurati per IOB
|
/// Dizionario dei tag configurati per IOB
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Dictionary<string, List<TagData>> currTagConf { get; set; } = new Dictionary<string, List<TagData>>();
|
public Dictionary<string, List<TagData>> currTagConf { get; set; } = new Dictionary<string, List<TagData>>();
|
||||||
|
|
||||||
public MessagePipe dataPipe { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
@@ -100,15 +92,14 @@ namespace MP.SPEC.Data
|
|||||||
{
|
{
|
||||||
Stopwatch stopWatch = new Stopwatch();
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
|
string source = "DB";
|
||||||
List<ListValues>? result = new List<ListValues>();
|
List<ListValues>? result = new List<ListValues>();
|
||||||
// cerco in redis...
|
// cerco in redis...
|
||||||
RedisValue rawData = await redisDb.StringGetAsync(redisTipoArt);
|
RedisValue rawData = await redisDb.StringGetAsync(redisTipoArt);
|
||||||
if (!string.IsNullOrEmpty($"{rawData}"))
|
if (!string.IsNullOrEmpty($"{rawData}"))
|
||||||
{
|
{
|
||||||
result = JsonConvert.DeserializeObject<List<ListValues>>($"{rawData}");
|
result = JsonConvert.DeserializeObject<List<ListValues>>($"{rawData}");
|
||||||
stopWatch.Stop();
|
source = "REDIS";
|
||||||
TimeSpan ts = stopWatch.Elapsed;
|
|
||||||
Log.Debug($"AnagTipoArtLV Read from REDIS: {ts.TotalMilliseconds}ms");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -116,10 +107,10 @@ namespace MP.SPEC.Data
|
|||||||
// serializzo e salvo...
|
// serializzo e salvo...
|
||||||
rawData = JsonConvert.SerializeObject(result);
|
rawData = JsonConvert.SerializeObject(result);
|
||||||
await redisDb.StringSetAsync(redisTipoArt, rawData, getRandTOut(redisLongTimeCache));
|
await redisDb.StringSetAsync(redisTipoArt, rawData, getRandTOut(redisLongTimeCache));
|
||||||
stopWatch.Stop();
|
|
||||||
TimeSpan ts = stopWatch.Elapsed;
|
|
||||||
Log.Debug($"AnagTipoArtLV Read from DB: {ts.TotalMilliseconds}ms");
|
|
||||||
}
|
}
|
||||||
|
stopWatch.Stop();
|
||||||
|
TimeSpan ts = stopWatch.Elapsed;
|
||||||
|
Log.Debug($"AnagTipoArtLV Read from {source}: {ts.TotalMilliseconds}ms");
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
result = new List<ListValues>();
|
result = new List<ListValues>();
|
||||||
@@ -180,7 +171,33 @@ namespace MP.SPEC.Data
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<List<AnagArticoli>> ArticoliGetSearch(int numRecord, string azienda, string searchVal)
|
public async Task<List<AnagArticoli>> ArticoliGetSearch(int numRecord, string azienda, string searchVal)
|
||||||
{
|
{
|
||||||
return await Task.FromResult(dbController.ArticoliGetSearch(numRecord, azienda, searchVal));
|
List<AnagArticoli>? result = new List<AnagArticoli>();
|
||||||
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
|
stopWatch.Start();
|
||||||
|
string readType = "DB";
|
||||||
|
string currKey = $"{redisArtList}:{azienda}";
|
||||||
|
// cerco in redis dato valore sel macchina...
|
||||||
|
RedisValue rawData = redisDb.StringGet(currKey);
|
||||||
|
if (rawData.HasValue)
|
||||||
|
{
|
||||||
|
result = JsonConvert.DeserializeObject<List<AnagArticoli>>($"{rawData}");
|
||||||
|
readType = "REDIS";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = await Task.FromResult(dbController.ArticoliGetSearch(numRecord, azienda, searchVal));
|
||||||
|
// serializzo e salvo...
|
||||||
|
rawData = JsonConvert.SerializeObject(result);
|
||||||
|
redisDb.StringSet(currKey, rawData, getRandTOut(redisLongTimeCache / 5));
|
||||||
|
}
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
result = new List<AnagArticoli>();
|
||||||
|
}
|
||||||
|
stopWatch.Stop();
|
||||||
|
TimeSpan ts = stopWatch.Elapsed;
|
||||||
|
Log.Debug($"ArticoliGetSearch | Read from {readType}: {ts.TotalMilliseconds}ms");
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -221,7 +238,7 @@ namespace MP.SPEC.Data
|
|||||||
{
|
{
|
||||||
// cerco in cache se ci sia la tabella con gli articoli impiegati...
|
// cerco in cache se ci sia la tabella con gli articoli impiegati...
|
||||||
string rawTable = redisDb.StringGet(redKeyTabCheckArt);
|
string rawTable = redisDb.StringGet(redKeyTabCheckArt);
|
||||||
List<string> artList = new List<string>();
|
List<string>? artList = new List<string>();
|
||||||
if (!string.IsNullOrEmpty(rawTable))
|
if (!string.IsNullOrEmpty(rawTable))
|
||||||
{
|
{
|
||||||
artList = JsonConvert.DeserializeObject<List<string>>(rawTable);
|
artList = JsonConvert.DeserializeObject<List<string>>(rawTable);
|
||||||
@@ -375,6 +392,19 @@ namespace MP.SPEC.Data
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inserimento nuovo record dossier
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="currDoss"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> DossiersInsert(Dossiers currDoss)
|
||||||
|
{
|
||||||
|
// aggiorno record sul DB
|
||||||
|
bool answ = await dbController.DossiersUpdateValore(currDoss);
|
||||||
|
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Effettua salvataggio snapshot parametri (con stored) + svuota eventuale cache redis
|
/// Effettua salvataggio snapshot parametri (con stored) + svuota eventuale cache redis
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -388,11 +418,10 @@ namespace MP.SPEC.Data
|
|||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
// chiamo stored x salvare parametri
|
// chiamo stored x salvare parametri
|
||||||
dbController.DossiersTakeParamsSnapshot(IdxMacchina, MaxSec, DtRif);
|
dbController.DossiersTakeParamsSnapshot(IdxMacchina, MaxSec, DtRif);
|
||||||
// svuoto cache redis x macchina
|
// elimino cache redis...
|
||||||
string currKey = $"{redisDossByMac}:{IdxMacchina}";
|
RedisValue pattern = new RedisValue($"{redisDossByMac}:*");
|
||||||
redisDb.StringSet(currKey, "", TimeSpan.FromSeconds(1));
|
answ = await ExecFlushRedisPattern(pattern);
|
||||||
currKey = $"{redisDossByMac}:*";
|
Log.Info($"Svuotata cache dossier | {pattern}");
|
||||||
redisDb.StringSet(currKey, "", TimeSpan.FromSeconds(1));
|
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,13 +436,26 @@ namespace MP.SPEC.Data
|
|||||||
{
|
{
|
||||||
bool answ = false;
|
bool answ = false;
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
|
Log.Info($"Richiesta snapshot per macchina {IdxMacchina} | periodo {dtMin} --> {dtMax}");
|
||||||
// chiamo stored x salvare parametri
|
// chiamo stored x salvare parametri
|
||||||
dbController.DossiersTakeParamsSnapshotLast(IdxMacchina, dtMin, dtMax);
|
dbController.DossiersTakeParamsSnapshotLast(IdxMacchina, dtMin, dtMax);
|
||||||
// svuoto cache redis x macchina
|
// elimino cache redis...
|
||||||
string currKey = $"{redisDossByMac}:{IdxMacchina}";
|
RedisValue pattern = new RedisValue($"{redisDossByMac}:*");
|
||||||
redisDb.StringSet(currKey, "", TimeSpan.FromSeconds(1));
|
answ = await ExecFlushRedisPattern(pattern);
|
||||||
currKey = $"{redisDossByMac}:*";
|
Log.Info($"Svuotata cache dossier | {pattern}");
|
||||||
redisDb.StringSet(currKey, "", TimeSpan.FromSeconds(1));
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update valore dossier
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="currDoss"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> DossiersUpdateValore(Dossiers currDoss)
|
||||||
|
{
|
||||||
|
// aggiorno record sul DB
|
||||||
|
bool answ = await dbController.DossiersUpdateValore(currDoss);
|
||||||
|
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,6 +497,8 @@ namespace MP.SPEC.Data
|
|||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
RedisValue pattern = new RedisValue($"{redisBaseAddr}*");
|
RedisValue pattern = new RedisValue($"{redisBaseAddr}*");
|
||||||
bool answ = await ExecFlushRedisPattern(pattern);
|
bool answ = await ExecFlushRedisPattern(pattern);
|
||||||
|
// rileggo vocabolario.,..
|
||||||
|
ObjVocabolario = VocabolarioGetAll();
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -593,8 +637,6 @@ namespace MP.SPEC.Data
|
|||||||
TimeSpan ts = stopWatch.Elapsed;
|
TimeSpan ts = stopWatch.Elapsed;
|
||||||
Log.Debug($"ListPODLFilt | Read from {readType}: {ts.TotalMilliseconds}ms");
|
Log.Debug($"ListPODLFilt | Read from {readType}: {ts.TotalMilliseconds}ms");
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -721,7 +763,7 @@ namespace MP.SPEC.Data
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<string> OdlGetCurrent()
|
public List<string> OdlGetCurrent()
|
||||||
{
|
{
|
||||||
List<string> dbResult = new List<string>();
|
List<string>? dbResult = new List<string>();
|
||||||
Stopwatch stopWatch = new Stopwatch();
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
string readType = "DB";
|
string readType = "DB";
|
||||||
@@ -752,7 +794,6 @@ namespace MP.SPEC.Data
|
|||||||
TimeSpan ts = stopWatch.Elapsed;
|
TimeSpan ts = stopWatch.Elapsed;
|
||||||
Log.Debug($"OdlGetCurrent | Read from {readType}: {ts.TotalMilliseconds}ms");
|
Log.Debug($"OdlGetCurrent | Read from {readType}: {ts.TotalMilliseconds}ms");
|
||||||
|
|
||||||
|
|
||||||
return dbResult;
|
return dbResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,6 +887,29 @@ namespace MP.SPEC.Data
|
|||||||
return dbController.OdlStart(IdxOdl);
|
return dbController.OdlStart(IdxOdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue traduzione dato vocabolario da Lingua + Lemma
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="lemma"></param>
|
||||||
|
/// <param name="lingua"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string Traduci(string lemma, string lingua)
|
||||||
|
{
|
||||||
|
string answ = $"[{lemma}]";
|
||||||
|
// verifico se ho qualcosa nell'obj vocabolario...
|
||||||
|
if (ObjVocabolario == null || ObjVocabolario.Count == 0)
|
||||||
|
{
|
||||||
|
// inizializzo il vocabolario...
|
||||||
|
ObjVocabolario = VocabolarioGetAll();
|
||||||
|
}
|
||||||
|
var record = ObjVocabolario.Where(x => x.Lingua == lingua && x.Lemma == lemma).FirstOrDefault();
|
||||||
|
if (record != null)
|
||||||
|
{
|
||||||
|
answ = record.Traduzione;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> updateDossierValue(Dossiers currDoss, FluxLogDTO editFL)
|
public async Task<bool> updateDossierValue(Dossiers currDoss, FluxLogDTO editFL)
|
||||||
{
|
{
|
||||||
bool answ = false;
|
bool answ = false;
|
||||||
@@ -886,6 +950,40 @@ namespace MP.SPEC.Data
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco completo tabella Vocabolario
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<VocabolarioModel> VocabolarioGetAll()
|
||||||
|
{
|
||||||
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
|
stopWatch.Start();
|
||||||
|
List<VocabolarioModel>? result = new List<VocabolarioModel>();
|
||||||
|
string source = "REDIS";
|
||||||
|
// cerco in redis...
|
||||||
|
RedisValue rawData = redisDb.StringGet(redisVocabolario);
|
||||||
|
if (!string.IsNullOrEmpty($"{rawData}"))
|
||||||
|
{
|
||||||
|
result = JsonConvert.DeserializeObject<List<VocabolarioModel>>($"{rawData}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = dbController.VocabolarioGetAll();
|
||||||
|
// serializzo e salvo...
|
||||||
|
rawData = JsonConvert.SerializeObject(result);
|
||||||
|
redisDb.StringSet(redisVocabolario, rawData, getRandTOut(redisLongTimeCache / 5));
|
||||||
|
source = "DB";
|
||||||
|
}
|
||||||
|
stopWatch.Stop();
|
||||||
|
TimeSpan ts = stopWatch.Elapsed;
|
||||||
|
Log.Debug($"VocabolarioGetAll Read from {source}: {ts.TotalMilliseconds}ms");
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
result = new List<VocabolarioModel>();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
@@ -912,6 +1010,9 @@ namespace MP.SPEC.Data
|
|||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|
||||||
private const string redisArtByDossier = redisBaseAddr + "SPEC:Cache:ArtByDossier";
|
private const string redisArtByDossier = redisBaseAddr + "SPEC:Cache:ArtByDossier";
|
||||||
|
|
||||||
|
private const string redisArtList = redisBaseAddr + "SPEC:Cache:ArtList";
|
||||||
|
|
||||||
private const string redisBaseAddr = "MP:";
|
private const string redisBaseAddr = "MP:";
|
||||||
|
|
||||||
private const string redisConfKey = redisBaseAddr + "SPEC:Cache:Config";
|
private const string redisConfKey = redisBaseAddr + "SPEC:Cache:Config";
|
||||||
@@ -919,23 +1020,34 @@ namespace MP.SPEC.Data
|
|||||||
private const string redisDossByMac = redisBaseAddr + "SPEC:Cache:DossByMac";
|
private const string redisDossByMac = redisBaseAddr + "SPEC:Cache:DossByMac";
|
||||||
|
|
||||||
private const string redisFluxByMac = redisBaseAddr + "SPEC:Cache:FluxByMac";
|
private const string redisFluxByMac = redisBaseAddr + "SPEC:Cache:FluxByMac";
|
||||||
private const string redisOdlCurrByMac = redisBaseAddr + "SPEC:Cache:OdlByMac";
|
|
||||||
|
private const string redisFluxLogFilt = redisBaseAddr + "SPEC:Cache:FluxLogFilt";
|
||||||
|
|
||||||
private const string redisMacByFlux = redisBaseAddr + "SPEC:Cache:MacByFlux";
|
private const string redisMacByFlux = redisBaseAddr + "SPEC:Cache:MacByFlux";
|
||||||
|
|
||||||
private const string redisMacList = redisBaseAddr + "SPEC:Cache:MacList";
|
private const string redisMacList = redisBaseAddr + "SPEC:Cache:MacList";
|
||||||
|
|
||||||
|
private const string redisOdlCurrByMac = redisBaseAddr + "SPEC:Cache:OdlByMac";
|
||||||
|
|
||||||
private const string redisPOdlList = redisBaseAddr + "SPEC:Cache:POdlList";
|
private const string redisPOdlList = redisBaseAddr + "SPEC:Cache:POdlList";
|
||||||
private const string redisFluxLogFilt = redisBaseAddr + "SPEC:Cache:FluxLogFilt";
|
|
||||||
|
|
||||||
private const string redisStatoCom = redisBaseAddr + "SPEC:Cache:StatoCom";
|
private const string redisStatoCom = redisBaseAddr + "SPEC:Cache:StatoCom";
|
||||||
|
|
||||||
private const string redisTipoArt = redisBaseAddr + "SPEC:Cache:TipoArt";
|
private const string redisTipoArt = redisBaseAddr + "SPEC:Cache:TipoArt";
|
||||||
|
|
||||||
|
private const string redisVocabolario = redisBaseAddr + "SPEC:Cache:Vocabolario";
|
||||||
|
|
||||||
private static IConfiguration _configuration = null!;
|
private static IConfiguration _configuration = null!;
|
||||||
|
|
||||||
private static ILogger<MpDataService> _logger = null!;
|
private static ILogger<MpDataService> _logger = null!;
|
||||||
|
|
||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Oggetto vocabolario x uso continuo traduzione
|
||||||
|
/// </summary>
|
||||||
|
private List<VocabolarioModel> ObjVocabolario = new List<VocabolarioModel>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Oggetto per connessione a REDIS
|
/// Oggetto per connessione a REDIS
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
namespace MP.SPEC.Data
|
||||||
|
{
|
||||||
|
public class SelectArticoliParams
|
||||||
|
{
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
public SelectArticoliParams()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
|
||||||
|
public int CurrPage { get; set; } = 1;
|
||||||
|
|
||||||
|
public string IdxMacchina { get; set; } = "*";
|
||||||
|
public string Azienda { get; set; } = "*";
|
||||||
|
|
||||||
|
public int MaxRecord { get; set; } = 100;
|
||||||
|
|
||||||
|
public int NumRec { get; set; } = 10;
|
||||||
|
|
||||||
|
public int TotCount { get; set; } = 0;
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public SelectArticoliParams clone()
|
||||||
|
{
|
||||||
|
SelectArticoliParams clonedData = new SelectArticoliParams()
|
||||||
|
{
|
||||||
|
CurrPage = this.CurrPage,
|
||||||
|
IdxMacchina = this.IdxMacchina,
|
||||||
|
Azienda = this.Azienda,
|
||||||
|
MaxRecord = this.MaxRecord,
|
||||||
|
NumRec = this.NumRec,
|
||||||
|
TotCount = this.TotCount
|
||||||
|
};
|
||||||
|
return clonedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
if (!(obj is SelectArticoliParams item))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (MaxRecord != item.MaxRecord)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (NumRec != item.NumRec)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (TotCount != item.TotCount)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (CurrPage != item.CurrPage)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (IdxMacchina != item.IdxMacchina)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return base.GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace MP.SPEC.Data
|
using MP.Data;
|
||||||
|
|
||||||
|
namespace MP.SPEC.Data
|
||||||
{
|
{
|
||||||
public class SelectDossierParams
|
public class SelectDossierParams
|
||||||
{
|
{
|
||||||
@@ -13,31 +15,35 @@
|
|||||||
|
|
||||||
public int CurrPage { get; set; } = 1;
|
public int CurrPage { get; set; } = 1;
|
||||||
|
|
||||||
public DateTime DtEnd { get; set; } = InitDatetime(5);
|
public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 15);
|
||||||
|
|
||||||
public DateTime DtStart { get; set; } = InitDatetime(5).AddDays(-730);
|
public DateTime DtStart { get; set; } = Utils.InitDatetime(DateTime.Now, 15).AddDays(-730);
|
||||||
|
|
||||||
public string IdxMacchina { get; set; } = "*";
|
public string IdxMacchina { get; set; } = "*";
|
||||||
|
|
||||||
public string CodArticolo { get; set; } = "*";
|
public string CodArticolo { get; set; } = "*";
|
||||||
|
public int NumRec { get; set; } = 10;
|
||||||
|
public int TotCount { get; set; } = 0;
|
||||||
public int MaxRecord { get; set; } = 100;
|
public int MaxRecord { get; set; } = 100;
|
||||||
|
public bool isEditing { get; set; } = false;
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
public SelectDossierParams clone()
|
||||||
/// <summary>
|
|
||||||
/// Inizializzazione con periodo e arrotondamento
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="minRound"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static DateTime InitDatetime(int minRound)
|
|
||||||
{
|
{
|
||||||
TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today);
|
SelectDossierParams clonedData = new SelectDossierParams()
|
||||||
int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound;
|
{
|
||||||
DateTime endRounded = DateTime.Today.AddMinutes(minDay);
|
DtEnd = this.DtEnd,
|
||||||
return endRounded;
|
DtStart = this.DtStart,
|
||||||
|
CurrPage = this.CurrPage,
|
||||||
|
IdxMacchina = this.IdxMacchina,
|
||||||
|
CodArticolo = this.CodArticolo,
|
||||||
|
MaxRecord = this.MaxRecord,
|
||||||
|
NumRec = this.NumRec,
|
||||||
|
TotCount = this.TotCount
|
||||||
|
};
|
||||||
|
return clonedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
@@ -54,6 +60,12 @@
|
|||||||
if (MaxRecord != item.MaxRecord)
|
if (MaxRecord != item.MaxRecord)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (TotCount != item.TotCount)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (NumRec != item.NumRec)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (DtEnd != item.DtEnd)
|
if (DtEnd != item.DtEnd)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,33 @@
|
|||||||
public string IdxMacchina { get; set; } = "*";
|
public string IdxMacchina { get; set; } = "*";
|
||||||
public string lastUpdate { get; set; } = "-";
|
public string lastUpdate { get; set; } = "-";
|
||||||
public bool LiveUpdate { get; set; } = true;
|
public bool LiveUpdate { get; set; } = true;
|
||||||
|
public int NumRec { get; set; } = 10;
|
||||||
public int MaxRecord { get; set; } = 100;
|
public int MaxRecord { get; set; } = 100;
|
||||||
public int TempoAgg { get; set; } = 10000;
|
public int TempoAgg { get; set; } = 10000;
|
||||||
|
public int TotCount { get; set; } = 0;
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
public SelectFluxParams clone()
|
||||||
|
{
|
||||||
|
SelectFluxParams clonedData = new SelectFluxParams()
|
||||||
|
{
|
||||||
|
CodFlux = this.CodFlux,
|
||||||
|
CurrPage = this.CurrPage,
|
||||||
|
dtRif = this.dtRif,
|
||||||
|
dtMax = this.dtMax,
|
||||||
|
dtMin = this.dtMin,
|
||||||
|
IdxMacchina = this.IdxMacchina,
|
||||||
|
lastUpdate = this.lastUpdate,
|
||||||
|
LiveUpdate = this.LiveUpdate,
|
||||||
|
NumRec = this.NumRec,
|
||||||
|
MaxRecord = this.MaxRecord,
|
||||||
|
TotCount = this.TotCount,
|
||||||
|
TempoAgg = this.TempoAgg
|
||||||
|
};
|
||||||
|
return clonedData;
|
||||||
|
}
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
if (!(obj is SelectFluxParams item))
|
if (!(obj is SelectFluxParams item))
|
||||||
@@ -46,6 +65,12 @@
|
|||||||
|
|
||||||
if (TempoAgg != item.TempoAgg)
|
if (TempoAgg != item.TempoAgg)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (NumRec!= item.NumRec)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (TotCount!= item.TotCount)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (CurrPage != item.CurrPage)
|
if (CurrPage != item.CurrPage)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace MP.SPEC.Data
|
|||||||
public int NumRec { get; set; } = 10;
|
public int NumRec { get; set; } = 10;
|
||||||
public int TotCount { get; set; } = 0;
|
public int TotCount { get; set; } = 0;
|
||||||
public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 5);
|
public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 5);
|
||||||
public DateTime DtStart { get; set; } = Utils.InitDatetime(DateTime.Now, 5).AddDays(-7);
|
public DateTime DtStart { get; set; } = Utils.InitDatetime(DateTime.Now, 5).AddDays(-10);
|
||||||
public int MaxRecord { get; set; } = 100;
|
public int MaxRecord { get; set; } = 100;
|
||||||
public bool IsActive { get; set; } = true;
|
public bool IsActive { get; set; } = true;
|
||||||
public string SearchVal { get; set; } = "*";
|
public string SearchVal { get; set; } = "*";
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<RootNamespace>MP.SPEC</RootNamespace>
|
<RootNamespace>MP.SPEC</RootNamespace>
|
||||||
<Version>6.16.2210.1910</Version>
|
<Version>6.16.2211.312</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@
|
|||||||
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
|
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
|
||||||
<logger name="*" minlevel="Debug" writeTo="f" />
|
<logger name="*" minlevel="Debug" writeTo="f" />
|
||||||
-->
|
-->
|
||||||
<logger name="*" minlevel="Debug" writeTo="consoleTarget" />
|
<logger name="*" minlevel="Trace" writeTo="consoleTarget" />
|
||||||
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
|
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
|
||||||
<logger name="*" minlevel="Info" writeTo="fileTarget" />
|
<logger name="*" minlevel="Info" writeTo="fileTarget" />
|
||||||
</rules>
|
</rules>
|
||||||
|
|||||||
@@ -24,9 +24,11 @@ namespace MP.SPEC.Pages
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SelectArticoliParams currFilter = new SelectArticoliParams();
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
//MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
ListTipoArt = null;
|
ListTipoArt = null;
|
||||||
ListAziende = null;
|
ListAziende = null;
|
||||||
@@ -56,10 +58,7 @@ namespace MP.SPEC.Pages
|
|||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected MessageService MessageService { get; set; } = null!;
|
protected NavigationManager NavManager { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected NavigationManager NavManager { get; set; }
|
|
||||||
|
|
||||||
protected int totalCount
|
protected int totalCount
|
||||||
{
|
{
|
||||||
@@ -131,9 +130,6 @@ namespace MP.SPEC.Pages
|
|||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
numRecord = 10;
|
numRecord = 10;
|
||||||
// mostro ricerca
|
|
||||||
MessageService.ShowSearch = true;
|
|
||||||
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
|
||||||
configData = await MDService.ConfigGetAll();
|
configData = await MDService.ConfigGetAll();
|
||||||
var currRec = configData.FirstOrDefault(x => x.Chiave == "AZIENDA");
|
var currRec = configData.FirstOrDefault(x => x.Chiave == "AZIENDA");
|
||||||
if (currRec != null)
|
if (currRec != null)
|
||||||
@@ -172,14 +168,14 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
Azienda = selRec.Azienda,
|
Azienda = selRec.Azienda,
|
||||||
CodArticolo = selRec.CodArticolo,
|
CodArticolo = selRec.CodArticolo,
|
||||||
DescArticolo = $"CLONE - { selRec.DescArticolo }",
|
DescArticolo = $"CLONE - {selRec.DescArticolo}",
|
||||||
Disegno = selRec.Disegno,
|
Disegno = selRec.Disegno,
|
||||||
Tipo=selRec.Tipo
|
Tipo = selRec.Tipo
|
||||||
};
|
};
|
||||||
currRecord = newRec;
|
currRecord = newRec;
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected async Task update(AnagArticoli selRec)
|
protected async Task update(AnagArticoli selRec)
|
||||||
{
|
{
|
||||||
@@ -294,7 +290,7 @@ namespace MP.SPEC.Pages
|
|||||||
private async Task reloadData()
|
private async Task reloadData()
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
SearchRecords = await MDService.ArticoliGetSearch(100000, selAzienda, MessageService.SearchVal);
|
SearchRecords = await MDService.ArticoliGetSearch(100000, selAzienda, "");
|
||||||
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,67 +21,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@if (currDetFluxLogRecord != null)
|
|
||||||
{
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card mb-5">
|
|
||||||
<div class="card-header bg-primary text-light">Modifica Parametro</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<span class="input-group-text" id="inputGroup-sizing-sm">MACCHINA</span>
|
|
||||||
<input type="text" class="form-control" disabled aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currDetFluxLogRecord.IdxMacchina">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<span class="input-group-text" id="inputGroup-sizing-sm">DATA</span>
|
|
||||||
<input type="text" class="form-control" disabled aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currDetFluxLogRecord.dtEvento">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<span class="input-group-text" id="inputGroup-sizing-sm">DATA TYPE</span>
|
|
||||||
<input type="text" class="form-control" disabled aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currDetFluxLogRecord.CodFlux">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<span class="input-group-text" id="inputGroup-sizing-sm">VALORE</span>
|
|
||||||
<input type="text" class="form-control" aria-label="Art search" aria-describedby="inputGroup-sizing-sm" @bind-value="@currDetFluxLogRecord.ValoreEdit">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row pt-4">
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
</div>
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
</div>
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
<div class="d-grid gap-2">
|
|
||||||
<button @onclick="() => cancel()" class="btn btn-warning">Annulla <i class="bi bi-x-circle"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-3 pe-0">
|
|
||||||
<div class="d-grid gap-2">
|
|
||||||
<button @onclick="() => update(currDetFluxLogRecord)" class="btn btn-success">Save <i class="bi bi-save"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@if (isLoading)
|
@if (isLoading)
|
||||||
{
|
{
|
||||||
<LoadingData></LoadingData>
|
<LoadingData></LoadingData>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<ListDossiers SelFilter="@currFilter" RecordSel="@selRecordDoss" RecordSelFlux="@selRecordFlux" TotRecordChanged="updateTotal"></ListDossiers>
|
<ListDossiers SelFilter="@currFilter" RecordSel="@selRecordDoss" TotRecordChanged="updateTotal"></ListDossiers>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer py-1">
|
<div class="card-footer py-1">
|
||||||
|
|||||||
+42
-52
@@ -1,7 +1,6 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using MP.Data.DatabaseModels;
|
using MP.Data.DatabaseModels;
|
||||||
using MP.Data.DTO;
|
|
||||||
using MP.SPEC.Components;
|
using MP.SPEC.Components;
|
||||||
using MP.SPEC.Data;
|
using MP.SPEC.Data;
|
||||||
|
|
||||||
@@ -11,7 +10,7 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
protected DataPager pagerODL = null!;
|
protected DataPager? pagerODL = null!;
|
||||||
|
|
||||||
#endregion Protected Fields
|
#endregion Protected Fields
|
||||||
|
|
||||||
@@ -23,19 +22,10 @@ namespace MP.SPEC.Pages
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MsgService { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
protected async Task cancel()
|
|
||||||
{
|
|
||||||
currDetFluxLogRecord = null;
|
|
||||||
await Task.Delay(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void ForceReload(int newNum)
|
protected void ForceReload(int newNum)
|
||||||
{
|
{
|
||||||
numRecord = newNum;
|
numRecord = newNum;
|
||||||
@@ -51,9 +41,6 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
isFiltering = true;
|
isFiltering = true;
|
||||||
// disabilito ricerca...
|
|
||||||
MsgService.SearchVal = "";
|
|
||||||
MsgService.ShowSearch = false;
|
|
||||||
// fix pagina
|
// fix pagina
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
var modFilter = currFilter;
|
var modFilter = currFilter;
|
||||||
@@ -69,72 +56,75 @@ namespace MP.SPEC.Pages
|
|||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task selRecordFlux(FluxLogDTO selRec)
|
|
||||||
{
|
|
||||||
currDetFluxLogRecord = selRec;
|
|
||||||
await Task.Delay(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task update(FluxLogDTO selRec)
|
|
||||||
{
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Confermi di voler salvare le modifiche? queste saranno parte del dossier inviato all'impianto"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
await Task.Delay(1);
|
|
||||||
if (currRecordDoss != null)
|
|
||||||
{
|
|
||||||
// METODO PER UPDATE FLUX
|
|
||||||
await MDService.updateDossierValue(currRecordDoss, selRec);
|
|
||||||
}
|
|
||||||
currDetFluxLogRecord = null;
|
|
||||||
await Task.Delay(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void updateTotal(int newTotCount)
|
protected void updateTotal(int newTotCount)
|
||||||
{
|
{
|
||||||
totalCount = newTotCount;
|
totalCount = newTotCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void UpdateTotCount(int newTotCount)
|
||||||
|
{
|
||||||
|
totalCount = newTotCount;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private FluxLogDTO? _currDetFluxLogRecord = null;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
private FluxLogDTO? currDetFluxLogRecord
|
|
||||||
{
|
|
||||||
get => _currDetFluxLogRecord;
|
|
||||||
set { _currDetFluxLogRecord = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private SelectDossierParams currFilter { get; set; } = new SelectDossierParams();
|
private SelectDossierParams currFilter { get; set; } = new SelectDossierParams();
|
||||||
|
|
||||||
private int currPage
|
private int currPage
|
||||||
{
|
{
|
||||||
get => MsgService.currPage;
|
get => currFilter.CurrPage;
|
||||||
set => MsgService.currPage = value;
|
set => currFilter.CurrPage = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dossiers? currRecordDoss { get; set; } = null;
|
private Dossiers? currRecordDoss { get; set; } = null;
|
||||||
|
|
||||||
|
private bool isEditing
|
||||||
|
{
|
||||||
|
get => currFilter.isEditing;
|
||||||
|
set => currFilter.isEditing = value;
|
||||||
|
}
|
||||||
|
|
||||||
private bool isFiltering { get; set; } = false;
|
private bool isFiltering { get; set; } = false;
|
||||||
|
|
||||||
private bool isLoading { get; set; } = true;
|
private bool isLoading { get; set; } = true;
|
||||||
|
|
||||||
private int numRecord
|
private int numRecord
|
||||||
{
|
{
|
||||||
get => MsgService.numRecord;
|
get => currFilter.NumRec;
|
||||||
set => MsgService.numRecord = value;
|
set => currFilter.NumRec = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int totalCount { get; set; } = 0;
|
private int totalCount
|
||||||
|
{
|
||||||
|
get => currFilter.TotCount;
|
||||||
|
set => currFilter.TotCount = value;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Private Properties
|
#endregion Private Properties
|
||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
private string css()
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (isEditing == false)
|
||||||
|
{
|
||||||
|
answ = "hidden";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = "visible";
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableEditing()
|
||||||
|
{
|
||||||
|
isEditing = true;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task updateFilter(SelectDossierParams newParams)
|
private async Task updateFilter(SelectDossierParams newParams)
|
||||||
{
|
{
|
||||||
isFiltering = false;
|
isFiltering = false;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace MP.SPEC.Pages
|
|||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected MessageService MessageService { get; set; }
|
protected MessageService MessageService { get; set; } = null!;
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
|||||||
+21
-3
@@ -20,9 +20,27 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<a class="pt-2 text-dark" data-bs-toggle="offcanvas" data-bs-target="#paramsFilterExample" aria-controls="paramsFilterExample" @onclick="setDtMax">
|
<div class="d-flex justify-content-between">
|
||||||
<i class="fa-solid fa-bars"></i>
|
@if (filtActive)
|
||||||
</a>
|
{
|
||||||
|
<div class=" rounded small d-flex justify-content-between" title="Filtri attivi">
|
||||||
|
@*<i class="fas fa-exclamation text-warning"></i>*@
|
||||||
|
@if (selMacchina != "*")
|
||||||
|
{
|
||||||
|
<button class="btn btn-outline-primary btn-sm mx-2" @onclick="()=>resetMacchina()" title="Rimuovi Filtro Impianto"><i class="fa-solid fa-hard-drive"></i>   <i class="fa-solid fa-xmark text-warning"></i></button>
|
||||||
|
}
|
||||||
|
@if (selStato != "*")
|
||||||
|
{
|
||||||
|
<button class="btn btn-outline-primary btn-sm mx-2" @onclick="()=>resetFase()" title="Rimuovi Filtro Parametro"><i class="fa-solid fa-sliders"></i>   <i class="fa-solid fa-xmark text-warning"></i></button>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<div class="p-2">
|
||||||
|
<a class="pt-2 text-dark" data-bs-toggle="offcanvas" data-bs-target="#paramsFilterExample" aria-controls="paramsFilterExample" @onclick="setDtMax">
|
||||||
|
<i class="fa-solid fa-bars"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="paramsFilterExample" aria-labelledby="paramsFilterExampleLabel">
|
<div class="offcanvas offcanvas-end" tabindex="-1" id="paramsFilterExample" aria-labelledby="paramsFilterExampleLabel">
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h3 class="offcanvas-title" id="paramsFilterExampleLabel"><b>FILTRI</b></h3>
|
<h3 class="offcanvas-title" id="paramsFilterExampleLabel"><b>FILTRI</b></h3>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace MP.SPEC.Pages
|
|||||||
|
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
protected DataPager pagerODL = null!;
|
protected DataPager? pagerODL = null!;
|
||||||
|
|
||||||
#endregion Protected Fields
|
#endregion Protected Fields
|
||||||
|
|
||||||
@@ -71,7 +71,19 @@ namespace MP.SPEC.Pages
|
|||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
private bool filtActive
|
||||||
|
{
|
||||||
|
get => selMacchina != "*" || selStato != "*";
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void resetMacchina()
|
||||||
|
{
|
||||||
|
selMacchina = "*";
|
||||||
|
}
|
||||||
|
protected void resetFase()
|
||||||
|
{
|
||||||
|
selStato = "*";
|
||||||
|
}
|
||||||
protected void ForceReload(int newNum)
|
protected void ForceReload(int newNum)
|
||||||
{
|
{
|
||||||
numRecord = newNum;
|
numRecord = newNum;
|
||||||
@@ -92,7 +104,11 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
if (doReset)
|
if (doReset)
|
||||||
{
|
{
|
||||||
await pagerODL.resetCurrPage();
|
await Task.Delay(1);
|
||||||
|
if (pagerODL != null)
|
||||||
|
{
|
||||||
|
pagerODL.resetCurrPage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +116,7 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
// copio il filtro
|
// copio il filtro
|
||||||
currFilter.DtEnd = RoundDatetime(5);
|
currFilter.DtEnd = RoundDatetime(5);
|
||||||
currFilter.DtStart = RoundDatetime(5).AddDays(-1);
|
currFilter.DtStart = RoundDatetime(5).AddDays(-10);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void UpdateTotCount(int newTotCount)
|
protected void UpdateTotCount(int newTotCount)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<ListPARAMS SelFilter="@currFilter" TotRecordChanged="@updateTotal" RecordSel="@detailSel"></ListPARAMS>
|
<ListPARAMS SelFilter="@currFilter" TotRecordChanged="@UpdateTotCount" RecordSel="@detailSel"></ListPARAMS>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer py-1">
|
<div class="card-footer py-1">
|
||||||
|
|||||||
@@ -9,14 +9,12 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
protected DataPager pagerODL = null!;
|
protected DataPager? pagerODL = null!;
|
||||||
|
|
||||||
#endregion Protected Fields
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MsgService { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
@@ -32,7 +30,8 @@ namespace MP.SPEC.Pages
|
|||||||
currPage = newNum;
|
currPage = newNum;
|
||||||
DateTime adesso = DateTime.Now.AddSeconds(1);
|
DateTime adesso = DateTime.Now.AddSeconds(1);
|
||||||
var updFilter = currFilter;
|
var updFilter = currFilter;
|
||||||
updFilter.LiveUpdate = (currPage == 1);
|
//updFilter.LiveUpdate = (currPage == 1);
|
||||||
|
updFilter.LiveUpdate = (currFilter.CurrPage == 1);
|
||||||
updFilter.lastUpdate = updFilter.LiveUpdate ? "-" : $"{adesso:yyyy/MM/dd HH:mm:ss}";
|
updFilter.lastUpdate = updFilter.LiveUpdate ? "-" : $"{adesso:yyyy/MM/dd HH:mm:ss}";
|
||||||
// salvo filtro
|
// salvo filtro
|
||||||
currFilter = updFilter;
|
currFilter = updFilter;
|
||||||
@@ -43,9 +42,6 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
isFiltering = true;
|
isFiltering = true;
|
||||||
// disabilito ricerca...
|
|
||||||
MsgService.SearchVal = "";
|
|
||||||
MsgService.ShowSearch = false;
|
|
||||||
// fix pagina
|
// fix pagina
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
var modFilter = currFilter;
|
var modFilter = currFilter;
|
||||||
@@ -60,7 +56,11 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
if (doReset)
|
if (doReset)
|
||||||
{
|
{
|
||||||
await pagerODL.resetCurrPage();
|
await Task.Delay(1);
|
||||||
|
if (pagerODL != null)
|
||||||
|
{
|
||||||
|
pagerODL.resetCurrPage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,8 +100,8 @@ namespace MP.SPEC.Pages
|
|||||||
|
|
||||||
private int currPage
|
private int currPage
|
||||||
{
|
{
|
||||||
get => MsgService.currPage;
|
get => currFilter.CurrPage;
|
||||||
set => MsgService.currPage = value;
|
set => currFilter.CurrPage = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool isFiltering { get; set; } = false;
|
private bool isFiltering { get; set; } = false;
|
||||||
@@ -109,8 +109,8 @@ namespace MP.SPEC.Pages
|
|||||||
|
|
||||||
private int numRecord
|
private int numRecord
|
||||||
{
|
{
|
||||||
get => MsgService.numRecord;
|
get => currFilter.NumRec;
|
||||||
set => MsgService.numRecord = value;
|
set => currFilter.NumRec = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int totalCount { get; set; } = 0;
|
private int totalCount { get; set; } = 0;
|
||||||
@@ -132,14 +132,17 @@ namespace MP.SPEC.Pages
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newParams.LiveUpdate = (currPage == 1);
|
//newParams.LiveUpdate = (currPage == 1);
|
||||||
}
|
}
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
await InvokeAsync(() => StateHasChanged());
|
await InvokeAsync(() => StateHasChanged());
|
||||||
currFilter = newParams;
|
currFilter = newParams;
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
protected void UpdateTotCount(int newTotCount)
|
||||||
|
{
|
||||||
|
totalCount = newTotCount;
|
||||||
|
}
|
||||||
#endregion Private Methods
|
#endregion Private Methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
<div class="px-2">
|
<div class="px-2">
|
||||||
@if (addEnabled)
|
@if (addEnabled)
|
||||||
{
|
{
|
||||||
<button class="btn btn-success" @onclick="() => reqNewPODL()">@btnNewText <i class="bi bi-plus-square"></i></button>
|
<button class="btn btn-success" @onclick="() => reqNewPODL()">Nuovo PODL <i class="bi bi-plus-square"></i></button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -21,19 +21,20 @@
|
|||||||
<div class="input-group input-group-sm">
|
<div class="input-group input-group-sm">
|
||||||
@*<label class="input-group-text" for="maxRecord" title="Selezionare l'azienda da visualizzare"><i class="fa-solid fa-industry"></i></label>
|
@*<label class="input-group-text" for="maxRecord" title="Selezionare l'azienda da visualizzare"><i class="fa-solid fa-industry"></i></label>
|
||||||
<select @bind="@currAzienda" class="form-select" title="Selezionare l'azienda da visualizzare">
|
<select @bind="@currAzienda" class="form-select" title="Selezionare l'azienda da visualizzare">
|
||||||
@if (ListAziende != null)
|
@if (ListAziende != null)
|
||||||
{
|
{
|
||||||
foreach (var item in ListAziende)
|
foreach (var item in ListAziende)
|
||||||
{
|
{
|
||||||
<option value="@item.CodGruppo">@item.DescrGruppo</option>
|
<option value="@item.CodGruppo">@item.DescrGruppo</option>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</select>*@
|
</select>*@
|
||||||
<label class="input-group-text" for="maxRecord" title="Selezionare la fase da visualizzare"><i class="fa-solid fa-screwdriver-wrench"></i></label>
|
<label class="input-group-text" for="maxRecord" title="Selezionare la fase da visualizzare"><i class="fa-solid fa-screwdriver-wrench"></i></label>
|
||||||
<select @bind="@currFase" class="form-select" title="Selezionare la fase da visualizzare">
|
<select @bind="@currFase" class="form-select" title="Selezionare la fase da visualizzare">
|
||||||
<option value="*">--- Tutti ---</option>
|
<option value="*">--- Tutti ---</option>
|
||||||
@if (ListStati != null)
|
@if (ListStati != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach (var item in ListStati)
|
foreach (var item in ListStati)
|
||||||
{
|
{
|
||||||
<option value="@item.value">@item.label</option>
|
<option value="@item.value">@item.label</option>
|
||||||
@@ -126,7 +127,14 @@
|
|||||||
{
|
{
|
||||||
foreach (var item in ListMacchine)
|
foreach (var item in ListMacchine)
|
||||||
{
|
{
|
||||||
<option value="@item.IdxMacchina">@item.IdxMacchina | @item.Descrizione</option>
|
if (selectFirst(item.IdxMacchina) == true)
|
||||||
|
{
|
||||||
|
<option selected value="@item.IdxMacchina">@item.IdxMacchina | @item.Descrizione</option>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<option value="@item.IdxMacchina">@item.IdxMacchina | @item.Descrizione</option>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@@ -87,7 +87,8 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
if (doReset)
|
if (doReset)
|
||||||
{
|
{
|
||||||
await pagerODL.resetCurrPage();
|
await Task.Delay(1);
|
||||||
|
pagerODL.resetCurrPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,6 +204,22 @@ namespace MP.SPEC.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool selectFirst(string idxMacchina)
|
||||||
|
{
|
||||||
|
string firstMacchina="";
|
||||||
|
bool answ = false;
|
||||||
|
if (ListMacchine != null)
|
||||||
|
{
|
||||||
|
var rawData = ListMacchine.Select(x => x.IdxMacchina).FirstOrDefault();
|
||||||
|
firstMacchina = rawData != null ? rawData : "";
|
||||||
|
}
|
||||||
|
if (firstMacchina == idxMacchina)
|
||||||
|
{
|
||||||
|
answ = true;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
private string btnNewText
|
private string btnNewText
|
||||||
{
|
{
|
||||||
get => currArticolo == "" ? "Sel Articolo" : "Nuovo PODL";
|
get => currArticolo == "" ? "Sel Articolo" : "Nuovo PODL";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<body>
|
<body>
|
||||||
<i>Modulo MAPOSPEC </i>
|
<i>Modulo MAPOSPEC </i>
|
||||||
<h4>Versione: 6.16.2210.1910</h4>
|
<h4>Versione: 6.16.2211.312</h4>
|
||||||
<br /> Note di rilascio:
|
<br /> Note di rilascio:
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6.16.2210.1910
|
6.16.2211.312
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<item>
|
<item>
|
||||||
<version>6.16.2210.1910</version>
|
<version>6.16.2211.312</version>
|
||||||
<url>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip</url>
|
<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>
|
<changelog>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html</changelog>
|
||||||
<mandatory>false</mandatory>
|
<mandatory>false</mandatory>
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
{
|
{
|
||||||
foreach (var item in ElencoLink)
|
foreach (var item in ElencoLink)
|
||||||
{
|
{
|
||||||
|
|
||||||
<div class="nav-item px-2 col-12">
|
<div class="nav-item px-2 col-12">
|
||||||
<NavLink class="nav-link px-2" href="@item.NavigateUrl">
|
<NavLink class="nav-link px-2" href="@item.NavigateUrl">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
},
|
},
|
||||||
"ServerConf": {
|
"ServerConf": {
|
||||||
"maxAge": "2000",
|
"maxAge": "2000",
|
||||||
"cacheCheckArtUsato": 2,
|
"cacheCheckArtUsato": "2",
|
||||||
"redisLongTimeCache": 15,
|
"redisLongTimeCache": "15",
|
||||||
"MpIoBaseUrl": "http://localhost:20967/"
|
"MpIoBaseUrl": "http://localhost:20967/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<RootNamespace>MP.Stats</RootNamespace>
|
<RootNamespace>MP.Stats</RootNamespace>
|
||||||
<UserSecretsId>826e877c-ba70-4253-84cb-d0b1cafd4440</UserSecretsId>
|
<UserSecretsId>826e877c-ba70-4253-84cb-d0b1cafd4440</UserSecretsId>
|
||||||
<Version>6.16.2210.1708</Version>
|
<Version>6.16.2210.2110</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -203,6 +203,9 @@
|
|||||||
<None Update="logs\.placeholder">
|
<None Update="logs\.placeholder">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="post-build.ps1">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
<None Update="temp\.placeholder">
|
<None Update="temp\.placeholder">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<body>
|
<body>
|
||||||
<i>Modulo statistiche MAPO</i>
|
<i>Modulo statistiche MAPO</i>
|
||||||
<h4>Versione: 6.16.2210.1708</h4>
|
<h4>Versione: 6.16.2210.2110</h4>
|
||||||
<br />
|
<br />
|
||||||
Note di rilascio:
|
Note di rilascio:
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6.16.2210.1708
|
6.16.2210.2110
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<item>
|
<item>
|
||||||
<version>6.16.2210.1708</version>
|
<version>6.16.2210.2110</version>
|
||||||
<url>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip</url>
|
<url>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip</url>
|
||||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html</changelog>
|
<changelog>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html</changelog>
|
||||||
<mandatory>false</mandatory>
|
<mandatory>false</mandatory>
|
||||||
|
|||||||
Reference in New Issue
Block a user