Compare commits
26 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 |
@@ -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;
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -181,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)
|
||||||
|
|||||||
@@ -81,6 +81,12 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#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!;
|
||||||
|
|
||||||
@@ -127,7 +133,10 @@ namespace MP.SPEC.Components
|
|||||||
currFluxLogDto = null;
|
currFluxLogDto = null;
|
||||||
isEditing = false;
|
isEditing = false;
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
listaFlux = MDService.getFluxLog(currRecord.Valore);
|
if (currRecord != null)
|
||||||
|
{
|
||||||
|
listaFlux = MDService.getFluxLog(currRecord.Valore);
|
||||||
|
}
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -215,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;
|
||||||
|
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
List<StatODLModel> answ = new List<StatODLModel>();
|
List<StatODLModel>? answ = new List<StatODLModel>();
|
||||||
if (hideSpenta)
|
if (hideSpenta)
|
||||||
{
|
{
|
||||||
answ = ListOdlStatsNetto;
|
answ = ListOdlStatsNetto;
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
@@ -135,7 +136,7 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
StartTimer();
|
StartTimer();
|
||||||
}
|
}
|
||||||
@@ -156,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,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()
|
||||||
@@ -175,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!;
|
||||||
@@ -224,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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
+141
-38
@@ -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,13 +950,38 @@ namespace MP.SPEC.Data
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
public async Task<bool> DossiersUpdateValore(Dossiers currDoss)
|
/// Elenco completo tabella Vocabolario
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<VocabolarioModel> VocabolarioGetAll()
|
||||||
{
|
{
|
||||||
// aggiorno record sul DB
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
bool answ = await dbController.DossiersUpdateValore(currDoss);
|
stopWatch.Start();
|
||||||
|
List<VocabolarioModel>? result = new List<VocabolarioModel>();
|
||||||
return answ;
|
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
|
||||||
@@ -921,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";
|
||||||
@@ -928,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>
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ namespace MP.SPEC.Data
|
|||||||
|
|
||||||
public int CurrPage { get; set; } = 1;
|
public int CurrPage { get; set; } = 1;
|
||||||
|
|
||||||
public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 5);
|
public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 15);
|
||||||
|
|
||||||
public DateTime DtStart { get; set; } = Utils.InitDatetime(DateTime.Now, 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; } = "*";
|
||||||
|
|
||||||
|
|||||||
@@ -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.2014</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>
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ namespace MP.SPEC.Pages
|
|||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected NavigationManager NavManager { get; set; }
|
protected NavigationManager NavManager { get; set; } = null!;
|
||||||
|
|
||||||
protected int totalCount
|
protected int totalCount
|
||||||
{
|
{
|
||||||
@@ -290,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, "*");
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
+51
-56
@@ -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,7 +22,6 @@ namespace MP.SPEC.Pages
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected MpDataService MDService { get; set; } = null!;
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
@@ -58,6 +56,56 @@ namespace MP.SPEC.Pages
|
|||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void updateTotal(int newTotCount)
|
||||||
|
{
|
||||||
|
totalCount = newTotCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void UpdateTotCount(int newTotCount)
|
||||||
|
{
|
||||||
|
totalCount = newTotCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
private SelectDossierParams currFilter { get; set; } = new SelectDossierParams();
|
||||||
|
|
||||||
|
private int currPage
|
||||||
|
{
|
||||||
|
get => currFilter.CurrPage;
|
||||||
|
set => currFilter.CurrPage = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dossiers? currRecordDoss { get; set; } = null;
|
||||||
|
|
||||||
|
private bool isEditing
|
||||||
|
{
|
||||||
|
get => currFilter.isEditing;
|
||||||
|
set => currFilter.isEditing = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool isFiltering { get; set; } = false;
|
||||||
|
|
||||||
|
private bool isLoading { get; set; } = true;
|
||||||
|
|
||||||
|
private int numRecord
|
||||||
|
{
|
||||||
|
get => currFilter.NumRec;
|
||||||
|
set => currFilter.NumRec = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int totalCount
|
||||||
|
{
|
||||||
|
get => currFilter.TotCount;
|
||||||
|
set => currFilter.TotCount = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
private string css()
|
private string css()
|
||||||
{
|
{
|
||||||
string answ = "";
|
string answ = "";
|
||||||
@@ -77,55 +125,6 @@ namespace MP.SPEC.Pages
|
|||||||
isEditing = true;
|
isEditing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateTotal(int newTotCount)
|
|
||||||
{
|
|
||||||
totalCount = newTotCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private FluxLogDTO? _currDetFluxLogRecord = null;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private SelectDossierParams currFilter { get; set; } = new SelectDossierParams();
|
|
||||||
|
|
||||||
private int currPage
|
|
||||||
{
|
|
||||||
get => currFilter.CurrPage;
|
|
||||||
set => currFilter.CurrPage = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Dossiers? currRecordDoss { get; set; } = null;
|
|
||||||
private bool isFiltering { get; set; } = false;
|
|
||||||
private bool isLoading { get; set; } = true;
|
|
||||||
|
|
||||||
private int numRecord
|
|
||||||
{
|
|
||||||
get => currFilter.NumRec;
|
|
||||||
set => currFilter.NumRec = value;
|
|
||||||
}
|
|
||||||
private bool isEditing
|
|
||||||
{
|
|
||||||
get => currFilter.isEditing;
|
|
||||||
set => currFilter.isEditing = value;
|
|
||||||
}
|
|
||||||
private int totalCount
|
|
||||||
{
|
|
||||||
get => currFilter.TotCount;
|
|
||||||
set => currFilter.TotCount = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private async Task updateFilter(SelectDossierParams newParams)
|
private async Task updateFilter(SelectDossierParams newParams)
|
||||||
{
|
{
|
||||||
isFiltering = false;
|
isFiltering = false;
|
||||||
@@ -137,10 +136,6 @@ namespace MP.SPEC.Pages
|
|||||||
currFilter = newParams;
|
currFilter = newParams;
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
protected void UpdateTotCount(int newTotCount)
|
|
||||||
{
|
|
||||||
totalCount = newTotCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
#endregion Private Methods
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -9,7 +9,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
|
||||||
|
|
||||||
@@ -30,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;
|
||||||
@@ -55,7 +56,11 @@ namespace MP.SPEC.Pages
|
|||||||
{
|
{
|
||||||
if (doReset)
|
if (doReset)
|
||||||
{
|
{
|
||||||
await pagerODL.resetCurrPage();
|
await Task.Delay(1);
|
||||||
|
if (pagerODL != null)
|
||||||
|
{
|
||||||
|
pagerODL.resetCurrPage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +132,7 @@ 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());
|
||||||
|
|||||||
@@ -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.2014</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.2014
|
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.2014</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