Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 98119d4818 | |||
| ed2c694abd | |||
| c70ce33f26 | |||
| 03eb82c7b2 | |||
| 7655e340eb | |||
| 443a56cc07 | |||
| 06390295d2 | |||
| a3f5855b4a | |||
| bd14fc0502 | |||
| 6525d7e803 | |||
| 140566d81b | |||
| af0624b9c4 | |||
| 74856d9831 | |||
| bf654f54e6 | |||
| 8fbfea1f62 | |||
| b8dc7dffc4 | |||
| 2c3feaa4f3 | |||
| dbb4fbf9e2 | |||
| d13a1b7833 | |||
| 76c49d1eea | |||
| 3f1a3aa2ce | |||
| bbec081cae | |||
| 29fd417499 | |||
| 5380c996ac | |||
| 4e61028323 | |||
| 4f7ac21f41 | |||
| 55187eda96 | |||
| d6f7a55a05 | |||
| c71d7291a2 | |||
| 79c73db726 | |||
| 2608395e5b | |||
| 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
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ namespace MP.Data.Controllers
|
|||||||
dbResult = dbCtx
|
dbResult = dbCtx
|
||||||
.DbSetDossiers
|
.DbSetDossiers
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Select(i => i.OdlNav.CodArticolo)
|
.Select(i => i.CodArticolo)
|
||||||
.Distinct()
|
.Distinct()
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -302,7 +302,7 @@ namespace MP.Data.Controllers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="currRec">record dossier da eliminare</param>
|
/// <param name="currRec">record dossier da eliminare</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<bool> DossiersDeleteRecord(Dossiers currRec)
|
public async Task<bool> DossiersDeleteRecord(DossierModel currRec)
|
||||||
{
|
{
|
||||||
bool answ = false;
|
bool answ = false;
|
||||||
using (var dbCtx = new MoonProContext(_configuration))
|
using (var dbCtx = new MoonProContext(_configuration))
|
||||||
@@ -336,24 +336,50 @@ namespace MP.Data.Controllers
|
|||||||
/// <param name="DtStart">Data minima per estrazione records</param>
|
/// <param name="DtStart">Data minima per estrazione records</param>
|
||||||
/// <param name="DtEnd">Data Massima per estrazione records</param>
|
/// <param name="DtEnd">Data Massima per estrazione records</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<Dossiers> DossiersGetLastFilt(string IdxMacchina, string CodArticolo, DateTime DtStart, DateTime DtEnd)
|
public List<DossierModel> DossiersGetLastFilt(string IdxMacchina, string CodArticolo, DateTime DtStart, DateTime DtEnd)
|
||||||
{
|
{
|
||||||
List<Dossiers> dbResult = new List<Dossiers>();
|
List<DossierModel> dbResult = new List<DossierModel>();
|
||||||
using (var dbCtx = new MoonProContext(_configuration))
|
using (var dbCtx = new MoonProContext(_configuration))
|
||||||
{
|
{
|
||||||
dbResult = dbCtx
|
dbResult = dbCtx
|
||||||
.DbSetDossiers
|
.DbSetDossiers
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(x => (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodArticolo == "*" || x.OdlNav.CodArticolo == CodArticolo) && (x.DtRif >= DtStart && x.DtRif <= DtEnd))
|
.Where(x => (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodArticolo == "*" || x.CodArticolo == CodArticolo) && (x.DtRif >= DtStart && x.DtRif <= DtEnd))
|
||||||
.Include(m => m.MachineNav)
|
.Include(m => m.MachineNav)
|
||||||
.Include(o => o.OdlNav)
|
//.Include(o => o.OdlNav)
|
||||||
.Include(a => a.OdlNav.ArticoloNav)
|
.Include(a => a.ArticoloNav)
|
||||||
.OrderByDescending(x => x.DtRif)
|
.OrderByDescending(x => x.DtRif)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
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(DossierModel 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,11 +427,11 @@ 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>
|
||||||
public async Task<bool> DossiersUpdateValore(Dossiers editRec)
|
public async Task<bool> DossiersUpdateValore(DossierModel editRec)
|
||||||
{
|
{
|
||||||
bool fatto = false;
|
bool fatto = false;
|
||||||
using (var dbCtx = new MoonProContext(_configuration))
|
using (var dbCtx = new MoonProContext(_configuration))
|
||||||
@@ -476,12 +502,13 @@ namespace MP.Data.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Elenco ultimi n record flux log dato macchina e flusso (ordinato x data registrazione)
|
/// Elenco ultimi n record flux log dato macchina e flusso (ordinato x data registrazione)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="DtMax">Data massima (recupera eventi antecedenti)</param>
|
/// <param name="DtMax">Data massima x eventi</param>
|
||||||
|
/// <param name="DtMin">Data minima x eventi</param>
|
||||||
/// <param name="IdxMacchina">* = tutte, altrimenti solo x una data macchina</param>
|
/// <param name="IdxMacchina">* = tutte, altrimenti solo x una data macchina</param>
|
||||||
/// <param name="CodFlux">*=tutti, altrimenti solo selezionato</param>
|
/// <param name="CodFlux">*=tutti, altrimenti solo selezionato</param>
|
||||||
/// <param name="MaxRec">numero massimo record da restituire</param>
|
/// <param name="MaxRec">numero massimo record da restituire</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<FluxLog> FluxLogGetLastFilt(DateTime DtMax, string IdxMacchina, string CodFlux, int MaxRec)
|
public List<FluxLog> FluxLogGetLastFilt(DateTime DtMax, DateTime DtMin, string IdxMacchina, string CodFlux, int MaxRec)
|
||||||
{
|
{
|
||||||
List<FluxLog> dbResult = new List<FluxLog>();
|
List<FluxLog> dbResult = new List<FluxLog>();
|
||||||
using (var dbCtx = new MoonProContext(_configuration))
|
using (var dbCtx = new MoonProContext(_configuration))
|
||||||
@@ -489,7 +516,7 @@ namespace MP.Data.Controllers
|
|||||||
dbResult = dbCtx
|
dbResult = dbCtx
|
||||||
.DbSetFluxLog
|
.DbSetFluxLog
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(x => (x.dtEvento <= DtMax) && (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodFlux == "*" || x.CodFlux == CodFlux))
|
.Where(x => (x.dtEvento >= DtMin && x.dtEvento <= DtMax) && (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodFlux == "*" || x.CodFlux == CodFlux))
|
||||||
.OrderByDescending(x => x.dtEvento)
|
.OrderByDescending(x => x.dtEvento)
|
||||||
.Take(MaxRec)
|
.Take(MaxRec)
|
||||||
.ToList();
|
.ToList();
|
||||||
@@ -555,7 +582,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 +1028,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
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
|||||||
namespace MP.Data.DatabaseModels
|
namespace MP.Data.DatabaseModels
|
||||||
{
|
{
|
||||||
[Table("Dossiers")]
|
[Table("Dossiers")]
|
||||||
public partial class Dossiers
|
public partial class DossierModel
|
||||||
{
|
{
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
@@ -31,7 +31,8 @@ namespace MP.Data.DatabaseModels
|
|||||||
|
|
||||||
public string Valore { get; set; } = "";
|
public string Valore { get; set; } = "";
|
||||||
|
|
||||||
|
[MaxLength(50)]
|
||||||
|
public string KeyRichiesta { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione oggetto Machine
|
/// Navigazione oggetto Machine
|
||||||
@@ -45,6 +46,12 @@ namespace MP.Data.DatabaseModels
|
|||||||
[ForeignKey("IdxODL")]
|
[ForeignKey("IdxODL")]
|
||||||
public virtual ODLModel OdlNav { get; set; } = null!;
|
public virtual ODLModel OdlNav { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione oggetto Articolo
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("CodArticolo")]
|
||||||
|
public virtual AnagArticoli ArticoloNav { get; set; } = null!;
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
@@ -8,14 +10,22 @@ using System.Collections.Generic;
|
|||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace MP.Data.DatabaseModels
|
namespace MP.Data.DatabaseModels
|
||||||
{
|
{
|
||||||
|
[Table("Macchine")]
|
||||||
public partial class Macchine
|
public partial class Macchine
|
||||||
{
|
{
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
public string CodMacchina { get; set; }
|
[Key]
|
||||||
public string Descrizione { get; set; }
|
|
||||||
public string IdxMacchina { get; set; }
|
public string IdxMacchina { get; set; }
|
||||||
public string Nome { get; set; }
|
public string CodMacchina { get; set; } = "";
|
||||||
|
public string Descrizione { get; set; } = "";
|
||||||
|
public string Nome { get; set; } = "";
|
||||||
|
public string Note { get; set; } = "";
|
||||||
|
public string url { get; set; } = "";
|
||||||
|
public string locazione { get; set; } = "";
|
||||||
|
public string css { get; set; } = "";
|
||||||
|
public int RowNum { get; set; } = 0;
|
||||||
|
public int ColNum { get; set; } = 0;
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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...
|
||||||
|
|||||||
@@ -47,10 +47,11 @@ namespace MP.Data
|
|||||||
public virtual DbSet<ODLModel> DbSetODL { get; set; }
|
public virtual DbSet<ODLModel> DbSetODL { get; set; }
|
||||||
public virtual DbSet<PODLModel> DbSetPODL { get; set; }
|
public virtual DbSet<PODLModel> DbSetPODL { get; set; }
|
||||||
public virtual DbSet<FluxLog> DbSetFluxLog { get; set; }
|
public virtual DbSet<FluxLog> DbSetFluxLog { get; set; }
|
||||||
public virtual DbSet<Dossiers> DbSetDossiers { get; set; }
|
public virtual DbSet<DossierModel> DbSetDossiers { get; set; }
|
||||||
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 });
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -22,62 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
|
||||||
|
|
||||||
//[CascadingParameter]
|
|
||||||
//private Task<AuthenticationState> AuthenticationStateTask { get; set; }
|
|
||||||
|
|
||||||
[CascadingParameter(Name = "ShowSearch")]
|
|
||||||
private bool ShowSearch { get; set; }
|
|
||||||
|
|
||||||
private string userName = "";
|
|
||||||
|
|
||||||
private string PageName { get; set; }
|
|
||||||
private string PageIcon { get; set; }
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
await forceReload();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
|
||||||
{
|
|
||||||
AppMessages.EA_PageUpdated += OnPageUpdate;
|
|
||||||
}
|
|
||||||
public void OnPageUpdate()
|
|
||||||
{
|
|
||||||
PageName = AppMessages.PageName;
|
|
||||||
PageIcon = AppMessages.PageIcon;
|
|
||||||
InvokeAsync(() =>
|
|
||||||
{
|
|
||||||
StateHasChanged();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
AppMessages.EA_PageUpdated -= OnPageUpdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task forceReload()
|
|
||||||
{
|
|
||||||
userName = "N.A.";
|
|
||||||
await Task.Delay(1);
|
|
||||||
#if false
|
|
||||||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
|
||||||
var user = authState.User;
|
|
||||||
|
|
||||||
if (user.Identity.IsAuthenticated)
|
|
||||||
{
|
|
||||||
userName = $"{user.Identity.Name}";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
userName = "N.A.";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@* // Vedere anche:
|
@* // Vedere anche:
|
||||||
// https://docs.microsoft.com/en-us/aspnet/core/blazor/security/?view=aspnetcore-5.0#:~:text=Blazor%20uses%20the%20existing%20ASP.NET%20Core%20authentication%20mechanisms,all%20client-side%20code%20can%20be%20modified%20by%20users
|
// https://docs.microsoft.com/en-us/aspnet/core/blazor/security/?view=aspnetcore-5.0#:~:text=Blazor%20uses%20the%20existing%20ASP.NET%20Core%20authentication%20mechanisms,all%20client-side%20code%20can%20be%20modified%20by%20users
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MP.Land.Components
|
||||||
|
{
|
||||||
|
public partial class CmpTop
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
AppMessages.EA_PageUpdated -= OnPageUpdate;
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnPageUpdate()
|
||||||
|
{
|
||||||
|
PageName = AppMessages.PageName;
|
||||||
|
PageIcon = AppMessages.PageIcon;
|
||||||
|
InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
StateHasChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
AppMessages.EA_PageUpdated += OnPageUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await forceReload();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private string userName = "";
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
private string PageIcon { get; set; }
|
||||||
|
|
||||||
|
private string PageName { get; set; }
|
||||||
|
|
||||||
|
[CascadingParameter(Name = "ShowSearch")]
|
||||||
|
private bool ShowSearch { get; set; }
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
private async Task forceReload()
|
||||||
|
{
|
||||||
|
userName = "N.A.";
|
||||||
|
await Task.Delay(1);
|
||||||
|
#if false
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
|
||||||
|
if (user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
userName = $"{user.Identity.Name}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
userName = "N.A.";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,79 +53,3 @@ else // disegno box non cliccabile e licenza mancante
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@code {
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public UpdMan CurrItem { get; set; }
|
|
||||||
|
|
||||||
protected List<AnagKeyValueModel> AKVList
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return LicServ.AKVList;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
LicServ.AKVList = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
// check init AKV
|
|
||||||
if (AKVList == null || AKVList.Count == 0)
|
|
||||||
{
|
|
||||||
AKVList = await DataService.AnagKeyValList();
|
|
||||||
LicServ.InitAkv();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected string getAKVString(string nomeVar)
|
|
||||||
{
|
|
||||||
string answ = "";
|
|
||||||
if (AKVList != null)
|
|
||||||
{
|
|
||||||
var currRec = AKVList.FirstOrDefault(x => x.NomeVar == nomeVar);
|
|
||||||
if (currRec != null)
|
|
||||||
{
|
|
||||||
answ = currRec.ValString;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected AnagKeyValueModel getAKVRec(string nomeVar)
|
|
||||||
{
|
|
||||||
AnagKeyValueModel answ = new AnagKeyValueModel();
|
|
||||||
if (AKVList != null)
|
|
||||||
{
|
|
||||||
answ = AKVList.FirstOrDefault(x => x.NomeVar == nomeVar);
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool authOk()
|
|
||||||
{
|
|
||||||
bool allOk = !string.IsNullOrEmpty(CurrItem.LicenseKey);
|
|
||||||
if (allOk)
|
|
||||||
{
|
|
||||||
allOk = LicServ.checkLicenseActive(CurrItem.LicenseKey);
|
|
||||||
}
|
|
||||||
return allOk;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string fullUrl(string relUrl)
|
|
||||||
{
|
|
||||||
return $"{Configuration["ServerConf:BaseUrl"]}{relUrl}";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected MarkupString traduci(string lemma)
|
|
||||||
{
|
|
||||||
MarkupString answ;
|
|
||||||
string rawHtml = DataService.Traduci(lemma, "IT");
|
|
||||||
answ = new MarkupString(rawHtml);
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using MP.AppAuth.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MP.Land.Components
|
||||||
|
{
|
||||||
|
public partial class HomeLink : IDisposable
|
||||||
|
{
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public UpdMan CurrItem { get; set; }
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Properties
|
||||||
|
|
||||||
|
protected List<AnagKeyValueModel> AKVList
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return LicServ.AKVList;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
LicServ.AKVList = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected bool authOk()
|
||||||
|
{
|
||||||
|
bool allOk = !string.IsNullOrEmpty(CurrItem.LicenseKey);
|
||||||
|
if (allOk)
|
||||||
|
{
|
||||||
|
allOk = LicServ.checkLicenseActive(CurrItem.LicenseKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
return allOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string fullUrl(string relUrl)
|
||||||
|
{
|
||||||
|
return $"{Configuration["ServerConf:BaseUrl"]}{relUrl}";
|
||||||
|
}
|
||||||
|
|
||||||
|
protected AnagKeyValueModel getAKVRec(string nomeVar)
|
||||||
|
{
|
||||||
|
AnagKeyValueModel answ = new AnagKeyValueModel();
|
||||||
|
if (AKVList != null)
|
||||||
|
{
|
||||||
|
answ = AKVList.FirstOrDefault(x => x.NomeVar == nomeVar);
|
||||||
|
}
|
||||||
|
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string getAKVString(string nomeVar)
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (AKVList != null)
|
||||||
|
{
|
||||||
|
var currRec = AKVList.FirstOrDefault(x => x.NomeVar == nomeVar);
|
||||||
|
if (currRec != null)
|
||||||
|
{
|
||||||
|
answ = currRec.ValString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
// check init AKV
|
||||||
|
if (AKVList == null || AKVList.Count == 0)
|
||||||
|
{
|
||||||
|
AKVList = await DataService.AnagKeyValList();
|
||||||
|
LicServ.InitAkv();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected MarkupString traduci(string lemma)
|
||||||
|
{
|
||||||
|
MarkupString answ;
|
||||||
|
string rawHtml = DataService.Traduci(lemma, "IT");
|
||||||
|
answ = new MarkupString(rawHtml);
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -372,7 +372,35 @@ namespace MP.Land.Data
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"Record non trovato per {authKey}");
|
_logger.LogInformation($"checkLicenseActive | Record non trovato per {authKey}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Verifica scadenza licenza
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="authKey"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public DateTime getLicenseExpiry(string authKey)
|
||||||
|
{
|
||||||
|
DateTime answ = DateTime.Today.AddDays(-1);
|
||||||
|
//cerco anche nelle info AKV
|
||||||
|
if (AKVList != null)
|
||||||
|
{
|
||||||
|
var recLic = AKVList.Where(x => x.ValString == authKey).FirstOrDefault();
|
||||||
|
int numLic = 0;
|
||||||
|
//cerco in record
|
||||||
|
if (recLic != null)
|
||||||
|
{
|
||||||
|
numLic = (int)recLic.ValInt;
|
||||||
|
// verifico scadenza licenza!
|
||||||
|
DateTime scadenza = licenseManGLS.expiryDateByAuthKey(Installazione, recLic.NomeVar, numLic, authKey);
|
||||||
|
answ = scadenza;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.LogInformation($"getLicenseExpiry | Record non trovato per {authKey}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
|
|||||||
@@ -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.2211.0416</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,40 +1,12 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.AspNetCore.Components;
|
|
||||||
using System.Net.Http;
|
|
||||||
using Microsoft.AspNetCore.Authorization;
|
|
||||||
using Microsoft.AspNetCore.Components.Authorization;
|
|
||||||
using Microsoft.AspNetCore.Components.Forms;
|
|
||||||
using Microsoft.AspNetCore.Components.Routing;
|
|
||||||
using Microsoft.AspNetCore.Components.Web;
|
|
||||||
using Microsoft.AspNetCore.Components.Web.Virtualization;
|
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using MP.Land;
|
|
||||||
using MP.Land.Shared;
|
|
||||||
using MP.Land.Data;
|
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MP.Land.Pages
|
namespace MP.Land.Pages
|
||||||
{
|
{
|
||||||
public partial class About
|
public partial class About
|
||||||
{
|
{
|
||||||
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
#region Protected Methods
|
||||||
private string Titolo = "";
|
|
||||||
private string Messaggio = "";
|
|
||||||
|
|
||||||
private string ServerStatus = "SrvState";
|
|
||||||
private string Installazione = "Inst";
|
|
||||||
private string Applicazione = "App";
|
|
||||||
private string Licenze = "#";
|
|
||||||
private DateTime Scadenza = DateTime.Today;
|
|
||||||
private string MastKey = "########################";
|
|
||||||
|
|
||||||
private string mainCss = "alert alert-info";
|
|
||||||
private string remSrvCss = "bg-warning text-secondary";
|
|
||||||
private string expDateCss = "bg-warning text-secondary";
|
|
||||||
private string licenseCss = "bg-warning text-secondary";
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
@@ -43,9 +15,31 @@ namespace MP.Land.Pages
|
|||||||
await reloadLicenseData();
|
await reloadLicenseData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
private string Applicazione = "App";
|
||||||
|
private string expDateCss = "bg-warning text-secondary";
|
||||||
|
private string Installazione = "Inst";
|
||||||
|
private string licenseCss = "bg-warning text-secondary";
|
||||||
|
private string Licenze = "#";
|
||||||
|
private string mainCss = "alert alert-info";
|
||||||
|
private string MastKey = "########################";
|
||||||
|
private string Messaggio = "";
|
||||||
|
private string remSrvCss = "bg-warning text-secondary";
|
||||||
|
private DateTime Scadenza = DateTime.Today;
|
||||||
|
private string ServerStatus = "SrvState";
|
||||||
|
private string Titolo = "";
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
private async Task reloadLicenseData()
|
private async Task reloadLicenseData()
|
||||||
{
|
{
|
||||||
int cDelay = 5;
|
int cDelay = 10;
|
||||||
// recupero dati
|
// recupero dati
|
||||||
await Task.Delay(cDelay);
|
await Task.Delay(cDelay);
|
||||||
try
|
try
|
||||||
@@ -56,13 +50,14 @@ namespace MP.Land.Pages
|
|||||||
Installazione = LicServ.Installazione;
|
Installazione = LicServ.Installazione;
|
||||||
Applicazione = LicServ.Applicazione;
|
Applicazione = LicServ.Applicazione;
|
||||||
MastKey = LicServ.MasterKey;
|
MastKey = LicServ.MasterKey;
|
||||||
|
Scadenza = LicServ.getLicenseExpiry(LicServ.MasterKey);
|
||||||
await Task.Delay(cDelay);
|
await Task.Delay(cDelay);
|
||||||
var fatto = await LicServ.RefreshLicense();
|
var fatto = await LicServ.RefreshLicense();
|
||||||
await Task.Delay(cDelay);
|
await Task.Delay(cDelay);
|
||||||
Licenze = $"{LicServ.NumLicDb}/{LicServ.NumLicRemote}";
|
Licenze = $"{LicServ.NumLicDb}/{LicServ.NumLicRemote}";
|
||||||
licenseCss = "";
|
licenseCss = "";
|
||||||
}
|
}
|
||||||
catch(Exception exc)
|
catch (Exception exc)
|
||||||
{
|
{
|
||||||
licenseCss = "bg-dark text-warning";
|
licenseCss = "bg-dark text-warning";
|
||||||
Log.Error($"Eccezione in reloadLicenseData:{Environment.NewLine}{exc}");
|
Log.Error($"Eccezione in reloadLicenseData:{Environment.NewLine}{exc}");
|
||||||
@@ -86,5 +81,7 @@ namespace MP.Land.Pages
|
|||||||
AppMService.PageName = "About";
|
AppMService.PageName = "About";
|
||||||
AppMService.PageIcon = "fas fa-info-circle pr-2";
|
AppMService.PageIcon = "fas fa-info-circle pr-2";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -69,17 +69,3 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
|
||||||
|
|
||||||
protected string Titolo = "";
|
|
||||||
protected string Messaggio = "";
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
|
||||||
{
|
|
||||||
Titolo = "Mapo MES";
|
|
||||||
Messaggio = "I nostri contattatti e siti di supporto";
|
|
||||||
AppMService.ShowSearch = false;
|
|
||||||
AppMService.PageName = "Contacts";
|
|
||||||
AppMService.PageIcon = "fas fa-envelope pr-2";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MP.Land.Pages
|
||||||
|
{
|
||||||
|
public partial class Contacts : IDisposable
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected string Messaggio = "";
|
||||||
|
protected string Titolo = "";
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
Titolo = "Mapo MES";
|
||||||
|
Messaggio = "I nostri contattatti e siti di supporto";
|
||||||
|
AppMService.ShowSearch = false;
|
||||||
|
AppMService.PageName = "Contacts";
|
||||||
|
AppMService.PageIcon = "fas fa-envelope pr-2";
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,23 @@
|
|||||||
using System;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using MP.Land.Data;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MP.Land.Data;
|
|
||||||
using MP.Land.Components;
|
|
||||||
using Microsoft.AspNetCore.Components;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using MP.AppAuth.Models;
|
|
||||||
|
|
||||||
namespace MP.Land.Pages
|
namespace MP.Land.Pages
|
||||||
{
|
{
|
||||||
public partial class Index
|
public partial class Index : IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Public Methods
|
||||||
|
|
||||||
private List<MP.AppAuth.Models.UpdMan> ListRecords;
|
public void Dispose()
|
||||||
|
{
|
||||||
|
ListRecords = null;
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
@@ -63,5 +64,11 @@ namespace MP.Land.Pages
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private List<MP.AppAuth.Models.UpdMan> ListRecords;
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,25 +42,25 @@
|
|||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">Environment</h5>
|
<b class="mb-1">Environment</b>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">@Environment</p>
|
<p class="mb-1">@Environment</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">Main DB Conf</h5>
|
<b class="mb-1">Main DB Conf</b>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">@DbNameExample</p>
|
<p class="mb-1">@DbNameExample</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">.net framework</h5>
|
<b class="mb-1">.net framework</b>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">@currHwSwInfo.runtimeImg</p>
|
<p class="mb-1">@currHwSwInfo.runtimeImg</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">Main Assembly</h5>
|
<b class="mb-1">Main Assembly</b>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">@currHwSwInfo.mainAssembly</p>
|
<p class="mb-1">@currHwSwInfo.mainAssembly</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">Server Stats</h5>
|
<b class="mb-1">Server Stats</b>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">
|
<p class="mb-1">
|
||||||
<pre>@currHwSwInfo.ServerStats</pre>
|
<pre>@currHwSwInfo.ServerStats</pre>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">IIS Stats</h5>
|
<b class="mb-1">IIS Stats</b>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">
|
<p class="mb-1">
|
||||||
<pre>@currHwSwInfo.IISStats</pre>
|
<pre>@currHwSwInfo.IISStats</pre>
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="d-flex w-100 justify-content-between">
|
<div class="d-flex w-100 justify-content-between">
|
||||||
<h5 class="mb-1">Elenco librerie</h5>
|
<b class="mb-1">Elenco librerie</b>
|
||||||
<span>@currHwSwInfo.numLibraries</span>
|
<span>@currHwSwInfo.numLibraries</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">
|
<p class="mb-1">
|
||||||
@@ -133,51 +133,3 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@code {
|
|
||||||
|
|
||||||
// imposto i vari dati da mostrare a video senza indicare come bypassare...
|
|
||||||
protected string Titolo = "MAPO System Info";
|
|
||||||
protected string Messaggio = "HW & SW details";
|
|
||||||
protected HwSwInfo currHwSwInfo = HwSwInfo.man(System.Reflection.Assembly.GetExecutingAssembly());
|
|
||||||
|
|
||||||
protected string masterLic = "";
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task ReloadData()
|
|
||||||
{
|
|
||||||
var akvList = await DataService.AnagKeyValList();
|
|
||||||
var licRecord = akvList
|
|
||||||
.Where(x => x.NomeVar == "MAPO")
|
|
||||||
.FirstOrDefault();
|
|
||||||
if (licRecord != null)
|
|
||||||
{
|
|
||||||
masterLic = licRecord.ValString;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string DbNameExample
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
string answ = Configuration["ConnectionStrings:DefaultConnection"];
|
|
||||||
if (answ.IndexOf(";User ID=") > 0)
|
|
||||||
{
|
|
||||||
answ = answ.Substring(0, answ.IndexOf(";User ID="));
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
protected string Environment
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
string answ = Configuration["Environment"];
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using System.Net.Http;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Components.Forms;
|
||||||
|
using Microsoft.AspNetCore.Components.Routing;
|
||||||
|
using Microsoft.AspNetCore.Components.Web;
|
||||||
|
using Microsoft.AspNetCore.Components.Web.Virtualization;
|
||||||
|
using Microsoft.JSInterop;
|
||||||
|
using MP.Land;
|
||||||
|
using MP.Land.Shared;
|
||||||
|
using MP.AppAuth;
|
||||||
|
using MP.Land.Data;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace MP.Land.Pages
|
||||||
|
{
|
||||||
|
public partial class SysInfo : IDisposable
|
||||||
|
{
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// imposto i vari dati da mostrare a video senza indicare come bypassare...
|
||||||
|
protected string Titolo = "MAPO System Info";
|
||||||
|
protected string Messaggio = "HW & SW details";
|
||||||
|
protected HwSwInfo currHwSwInfo = HwSwInfo.man(System.Reflection.Assembly.GetExecutingAssembly());
|
||||||
|
protected string masterLic = "";
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await ReloadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task ReloadData()
|
||||||
|
{
|
||||||
|
var akvList = await DataService.AnagKeyValList();
|
||||||
|
var licRecord = akvList.Where(x => x.NomeVar == "MAPO").FirstOrDefault();
|
||||||
|
if (licRecord != null)
|
||||||
|
{
|
||||||
|
masterLic = licRecord.ValString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string DbNameExample
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = Configuration["ConnectionStrings:DefaultConnection"];
|
||||||
|
if (answ.IndexOf(";User ID=") > 0)
|
||||||
|
{
|
||||||
|
answ = answ.Substring(0, answ.IndexOf(";User ID="));
|
||||||
|
}
|
||||||
|
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string Environment
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = Configuration["Environment"];
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,22 +10,24 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace MP.Land.Pages
|
namespace MP.Land.Pages
|
||||||
{
|
{
|
||||||
public partial class UpdateManager
|
public partial class UpdateManager : IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Public Methods
|
||||||
|
|
||||||
private List<MP.AppAuth.Models.UpdMan> ListRecords;
|
public void Dispose()
|
||||||
|
{
|
||||||
|
ListRecords = null;
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
protected int numDone = 0;
|
protected int numDone = 0;
|
||||||
protected int numTot = 0;
|
protected int numTot = 0;
|
||||||
protected int totalCount = 0;
|
protected int totalCount = 0;
|
||||||
|
|
||||||
protected double TotalMb = 0;
|
protected double TotalMb = 0;
|
||||||
|
|
||||||
protected UpdateMan updateManAuth = new UpdateMan("SWDownloader", "viaD@nte16");
|
protected UpdateMan updateManAuth = new UpdateMan("SWDownloader", "viaD@nte16");
|
||||||
|
|
||||||
#endregion Protected Fields
|
#endregion Protected Fields
|
||||||
@@ -42,34 +44,12 @@ namespace MP.Land.Pages
|
|||||||
protected AppAuthService DataService { get; set; }
|
protected AppAuthService DataService { get; set; }
|
||||||
|
|
||||||
protected string outMessages { get; set; } = "";
|
protected string outMessages { get; set; } = "";
|
||||||
|
|
||||||
protected int percLoading { get; set; } = 0;
|
protected int percLoading { get; set; } = 0;
|
||||||
|
|
||||||
protected bool showProgress { get; set; } = false;
|
protected bool showProgress { get; set; } = false;
|
||||||
protected bool showUpdate { get; set; } = false;
|
protected bool showUpdate { get; set; } = false;
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private async Task<long> scaricaSingolo(AppAuth.Models.UpdMan item)
|
|
||||||
{
|
|
||||||
long size = 0;
|
|
||||||
if (item.IsAuth)
|
|
||||||
{
|
|
||||||
size = updateManAuth.downloadLatest(item.ManifestUrl, localPath(item.LocalRepo), item.PackName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
size = UpdateMan.obj.downloadLatest(item.ManifestUrl, localPath(item.LocalRepo), item.PackName);
|
|
||||||
}
|
|
||||||
numDone++;
|
|
||||||
percLoading = 100 * numDone / numTot;
|
|
||||||
return await Task.FromResult(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -151,5 +131,31 @@ namespace MP.Land.Pages
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private List<MP.AppAuth.Models.UpdMan> ListRecords;
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
private async Task<long> scaricaSingolo(AppAuth.Models.UpdMan item)
|
||||||
|
{
|
||||||
|
long size = 0;
|
||||||
|
if (item.IsAuth)
|
||||||
|
{
|
||||||
|
size = updateManAuth.downloadLatest(item.ManifestUrl, localPath(item.LocalRepo), item.PackName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size = UpdateMan.obj.downloadLatest(item.ManifestUrl, localPath(item.LocalRepo), item.PackName);
|
||||||
|
}
|
||||||
|
numDone++;
|
||||||
|
percLoading = 100 * numDone / numTot;
|
||||||
|
return await Task.FromResult(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,6 +16,9 @@ namespace MP.Land.Pages
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
AppMService.EA_SearchUpdated -= OnSeachUpdated;
|
AppMService.EA_SearchUpdated -= OnSeachUpdated;
|
||||||
|
AppMService.EA_FilterUpdated -= OnFilterUpdated;
|
||||||
|
ListRecords = null;
|
||||||
|
GC.Collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|||||||
@@ -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.2211.0416</h4>
|
||||||
<br />
|
<br />
|
||||||
Note di rilascio:
|
Note di rilascio:
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6.16.2209.2118
|
6.16.2211.0416
|
||||||
|
|||||||
@@ -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.2211.0416</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>
|
||||||
|
|||||||
@@ -26,35 +26,3 @@
|
|||||||
</CascadingValue>
|
</CascadingValue>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
|
||||||
bool ShowSearch { get; set; } = false;
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
|
||||||
{
|
|
||||||
AppMService.EA_ShowSearch += OnShowSearch;
|
|
||||||
AppMService.EA_HideSearch += OnHideSearch;
|
|
||||||
}
|
|
||||||
public void OnShowSearch()
|
|
||||||
{
|
|
||||||
ShowSearch = true;
|
|
||||||
InvokeAsync(() =>
|
|
||||||
{
|
|
||||||
StateHasChanged();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
public void OnHideSearch()
|
|
||||||
{
|
|
||||||
ShowSearch = false;
|
|
||||||
InvokeAsync(() =>
|
|
||||||
{
|
|
||||||
StateHasChanged();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
AppMService.EA_ShowSearch -= OnShowSearch;
|
|
||||||
AppMService.EA_ShowSearch -= OnHideSearch;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MP.Land.Shared
|
||||||
|
{
|
||||||
|
public partial class MainLayout
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
AppMService.EA_ShowSearch -= OnShowSearch;
|
||||||
|
AppMService.EA_ShowSearch -= OnHideSearch;
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnHideSearch()
|
||||||
|
{
|
||||||
|
ShowSearch = false;
|
||||||
|
InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
StateHasChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnShowSearch()
|
||||||
|
{
|
||||||
|
ShowSearch = true;
|
||||||
|
InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
StateHasChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
AppMService.EA_ShowSearch += OnShowSearch;
|
||||||
|
AppMService.EA_HideSearch += OnHideSearch;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
private bool ShowSearch { get; set; } = false;
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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,48 +21,7 @@
|
|||||||
{
|
{
|
||||||
<SearchMod></SearchMod>
|
<SearchMod></SearchMod>
|
||||||
}
|
}
|
||||||
</div>
|
</div>*@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
|
||||||
protected bool ShowSearch
|
|
||||||
{
|
|
||||||
get => MService.ShowSearch;
|
|
||||||
set => MService.ShowSearch = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string userName = "";
|
|
||||||
|
|
||||||
private string TipoSearch
|
|
||||||
{
|
|
||||||
get => MService.TipoSearch;
|
|
||||||
set => MService.TipoSearch = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
MService.EA_ShowSearch += MService_EA_ShowSearch;
|
|
||||||
await forceReload();
|
|
||||||
}
|
|
||||||
private async void MService_EA_ShowSearch()
|
|
||||||
{
|
|
||||||
await Task.Delay(1);
|
|
||||||
await InvokeAsync(() => StateHasChanged());
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task forceReload()
|
|
||||||
{
|
|
||||||
|
|
||||||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
|
||||||
var user = authState.User;
|
|
||||||
|
|
||||||
if (user.Identity != null&& user.Identity.IsAuthenticated)
|
|
||||||
{
|
|
||||||
userName = $"{user.Identity.Name}";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
userName = "N.A.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
|
using Microsoft.JSInterop;
|
||||||
|
using MP.SPEC.Data;
|
||||||
|
|
||||||
|
namespace MP.SPEC.Components
|
||||||
|
{
|
||||||
|
public partial class CmpTop
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public async Task flushCache()
|
||||||
|
{
|
||||||
|
await Task.Delay(1);
|
||||||
|
await MDService.FlushRedisCache();
|
||||||
|
await Task.Delay(1);
|
||||||
|
// rimando a pagina corrente
|
||||||
|
NavManager.NavigateTo(NavManager.Uri, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected IJSRuntime JSRuntime { get; set; } = null!;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected MpDataService MDService { get; set; } = null!;
|
||||||
|
|
||||||
|
protected bool ShowSearch { get => MService.ShowSearch; set => MService.ShowSearch = value; }
|
||||||
|
|
||||||
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
MService.EA_ShowSearch += MService_EA_ShowSearch;
|
||||||
|
await forceReload();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private string userName = "";
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private NavigationManager NavManager { get; set; } = null!;
|
||||||
|
|
||||||
|
private string TipoSearch { get => MService.TipoSearch; set => MService.TipoSearch = value; }
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
private async Task forceReload()
|
||||||
|
{
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
if (user.Identity != null && user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
userName = $"{user.Identity.Name}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
userName = "N.A.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void MService_EA_ShowSearch()
|
||||||
|
{
|
||||||
|
await Task.Delay(1);
|
||||||
|
await InvokeAsync(() => StateHasChanged());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ else if (totalCount == 0)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
<!-- INIZIO: MODIFICA FLUSSO -->
|
||||||
@if (currFluxLogDto != null)
|
@if (currFluxLogDto != null)
|
||||||
{
|
{
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -78,13 +79,137 @@ else
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<!-- FINE: MODIFICA FLUSSO -->
|
||||||
|
<!-- INIZIO: NUOVO DOSSIER -->
|
||||||
|
@if (currRecordClone != 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>
|
||||||
|
Nuovo Dossier
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<!--INIZIO PRIMA RIGA-->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm">MACCHINA</span>
|
||||||
|
<select @bind="@currRecordClone.IdxMacchina" class="form-select" id="macchina" title="Selezionare la macchina" @onclick="()=> enableEditing()">
|
||||||
|
@if (ListMacchine != null)
|
||||||
|
{
|
||||||
|
foreach (var item in ListMacchine)
|
||||||
|
{
|
||||||
|
@if (item.IdxMacchina == currRecordClone.IdxMacchina)
|
||||||
|
{
|
||||||
|
|
||||||
|
<option value="@item.IdxMacchina" selected>@item.IdxMacchina | @item.Descrizione</option>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<option value="@item.IdxMacchina">@item.IdxMacchina | @item.Descrizione</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-4 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm">FASE</span>
|
||||||
|
<select class="form-select" @bind="@currRecordClone.KeyRichiesta" @onclick="()=> enableEditing()" title="Selezionare la fase">
|
||||||
|
@if (ListStati != null)
|
||||||
|
{
|
||||||
|
foreach (var item in ListStati)
|
||||||
|
{
|
||||||
|
@if (item.value == currRecordClone.KeyRichiesta)
|
||||||
|
{
|
||||||
|
<option value="@item.value" selected>@item.label</option>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<option value="@item.value">@item.label</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-4 pe-0">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<span class="input-group-text" id="inputGroup-sizing-sm" @onclick="()=> enableEditing()">ARTICOLI</span>
|
||||||
|
|
||||||
|
<select @bind="@currRecordClone.CodArticolo" class="form-select" id="macchina" title="Selezionare l'articolo">
|
||||||
|
@if (ListArticoli != null)
|
||||||
|
{
|
||||||
|
foreach (var item in ListArticoli)
|
||||||
|
{
|
||||||
|
@if (item.CodArticolo == currRecordClone.CodArticolo)
|
||||||
|
{
|
||||||
|
<option value="@item.CodArticolo" selected>@item.CodArticolo | @item.DescArticolo</option>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<option value="@item.CodArticolo">@item.CodArticolo | @item.DescArticolo</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--FINE PRIMA RIGA-->
|
||||||
|
|
||||||
|
|
||||||
|
<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="() => cancelNewDoss()" 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="() => newDossier(currRecordClone)" class="btn btn-success">Save <i class="bi bi-save"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<!-- FINE: NUOVO DOSSIER -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<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">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<button @onclick="() => closeTableFlux()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
<div class="text-nowrap">
|
||||||
|
|
||||||
|
@if (currRecord != null)
|
||||||
|
{
|
||||||
|
<button @onclick="() => closeTableFlux()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
||||||
|
<button @onclick="()=> cloneRecord(currRecord)" class="btn btn-info btn-sm" title="Duplica Record"><i class="bi bi-clipboard-check"></i></button>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</th>
|
</th>
|
||||||
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
||||||
<th><i class="fa-solid fa-screwdriver-wrench"></i> Fase</th>
|
<th><i class="fa-solid fa-screwdriver-wrench"></i> Fase</th>
|
||||||
@@ -101,8 +226,10 @@ else
|
|||||||
<td>
|
<td>
|
||||||
@if (isEditing == false)
|
@if (isEditing == false)
|
||||||
{
|
{
|
||||||
|
<!--SEL RECORD PER VISUALIZZAZIONE FLUSSI-->
|
||||||
<button class="btn btn-primary btn-sm" @onclick="() => selRecord(record)"><i class="fa-solid fa-magnifying-glass"></i></button>
|
<button class="btn btn-primary btn-sm" @onclick="() => selRecord(record)"><i class="fa-solid fa-magnifying-glass"></i></button>
|
||||||
|
<!--SEL RECORD PER CLONA DOSSIER-->
|
||||||
|
@*<button @onclick="()=> cloneRecord(record)" class="btn btn-info btn-sm" title="Duplica Record"><i class="bi bi-clipboard-check"></i></button>*@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -110,15 +237,15 @@ else
|
|||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@record.OdlNav.CodArticolo
|
@record.CodArticolo
|
||||||
<div class="small textConsensed text-secondary">@record.OdlNav.ArticoloNav.DescArticolo</div>
|
<div class="small textConsensed text-secondary">@record.ArticoloNav.DescArticolo</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@tradFase(record.OdlNav.KeyRichiesta)
|
@tradFase(record.KeyRichiesta)
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@record.IdxMacchina
|
@record.IdxMacchina
|
||||||
<div class="small textConsensed text-secondary">@record.MachineNav.Descrizione</div>
|
@*<div class="small textConsensed text-secondary">@record.MachineNav.Descrizione</div>*@
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@record.DtRif
|
@record.DtRif
|
||||||
@@ -180,7 +307,8 @@ else
|
|||||||
@record.dtEvento
|
@record.dtEvento
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@record.CodFlux
|
@traduci(record.CodFlux)
|
||||||
|
<div class="small textConsensed text-secondary" title="Valore Registrato">@record.CodFlux</div>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align: right;">
|
<td style="text-align: right;">
|
||||||
@if (record.ValoreEdit != record.Valore)
|
@if (record.ValoreEdit != record.Valore)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using MP.Data.DatabaseModels;
|
using MP.Data.DatabaseModels;
|
||||||
using MP.Data.DTO;
|
using MP.Data.DTO;
|
||||||
@@ -13,7 +12,7 @@ namespace MP.SPEC.Components
|
|||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public EventCallback<Dossiers> RecordSel { get; set; }
|
public EventCallback<DossierModel> RecordSel { get; set; }
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public EventCallback<FluxLogDTO> RecordSelFlux { get; set; }
|
public EventCallback<FluxLogDTO> RecordSelFlux { get; set; }
|
||||||
@@ -28,8 +27,20 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
private FluxLogDTO? currFluxLogDto = null;
|
public string checkSelect(DossierModel recordSel)
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (currRecord != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
answ = (currRecord.IdxMacchina == recordSel.IdxMacchina && currRecord.DtRif == recordSel.DtRif) ? "table-info" : "";
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
public string checkSelPar(FluxLogDTO recordSel)
|
public string checkSelPar(FluxLogDTO recordSel)
|
||||||
{
|
{
|
||||||
@@ -46,21 +57,6 @@ namespace MP.SPEC.Components
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string checkSelect(Dossiers recordSel)
|
|
||||||
{
|
|
||||||
string answ = "";
|
|
||||||
if (currRecord != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
answ = (currRecord.IdxMacchina == recordSel.IdxMacchina && currRecord.DtRif == recordSel.DtRif) ? "table-info" : "";
|
|
||||||
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{ }
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
@@ -68,15 +64,16 @@ namespace MP.SPEC.Components
|
|||||||
ListRecords = null;
|
ListRecords = null;
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
}
|
}
|
||||||
private SelectDossierParams lastFilter { get; set; } = new SelectDossierParams() { CurrPage = -1 };
|
|
||||||
protected override async Task OnParametersSetAsync()
|
public async Task flushCache()
|
||||||
{
|
{
|
||||||
if (!lastFilter.Equals(SelFilter))
|
await Task.Delay(1);
|
||||||
{
|
await MDService.FlushRedisCache();
|
||||||
lastFilter = SelFilter.clone();
|
await Task.Delay(1);
|
||||||
await reloadData(true);
|
// rimando a pagina corrente
|
||||||
}
|
NavManager.NavigateTo(NavManager.Uri, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
@@ -86,16 +83,63 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
[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
|
||||||
|
|
||||||
|
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 cancelNewDoss()
|
||||||
|
{
|
||||||
|
var alert = await JSRuntime.InvokeAsync<bool>("confirm", "Confermi di voler annullare l'aggiunta di un nuovo dossier? i dati saranno ricaricati.");
|
||||||
|
if (alert)
|
||||||
|
{
|
||||||
|
currRecordClone = null;
|
||||||
|
isEditing = false;
|
||||||
|
await Task.Delay(1);
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task cloneRecord(DossierModel selRec)
|
||||||
|
{
|
||||||
|
// creo record duplicato...
|
||||||
|
DossierModel newRec = new DossierModel()
|
||||||
|
{
|
||||||
|
//IdxDossier = 0,
|
||||||
|
DataType = selRec.DataType,
|
||||||
|
KeyRichiesta = selRec.KeyRichiesta,
|
||||||
|
DtRif = DateTime.Now,
|
||||||
|
IdxMacchina = selRec.IdxMacchina,
|
||||||
|
CodArticolo = selRec.CodArticolo,
|
||||||
|
IdxODL = 0,
|
||||||
|
Valore = selRec.Valore
|
||||||
|
};
|
||||||
|
currRecordClone = newRec;
|
||||||
|
await Task.Delay(1);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Eliminazione record selezionato (previa conferma)
|
/// Eliminazione record selezionato (previa conferma)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="selRec"></param>
|
/// <param name="selRec"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected async Task deleteRecord(Dossiers selRec)
|
protected async Task deleteRecord(DossierModel selRec)
|
||||||
{
|
{
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Eliminazione Dossier: sei sicuro di voler procedere?"))
|
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Eliminazione Dossier: sei sicuro di voler procedere?"))
|
||||||
return;
|
return;
|
||||||
@@ -114,22 +158,96 @@ namespace MP.SPEC.Components
|
|||||||
await RecordSelFlux.InvokeAsync(selRec);
|
await RecordSelFlux.InvokeAsync(selRec);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableEditing()
|
protected async Task newDossier(DossierModel selRec)
|
||||||
{
|
{
|
||||||
isEditing = true;
|
var alert = await JSRuntime.InvokeAsync<bool>("confirm", "Confermi di voler creare un nuovo Dossier per l'impianto/articolo selezionato?");
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task cancel()
|
|
||||||
{
|
|
||||||
var alert = await JSRuntime.InvokeAsync<bool>("confirm", "Confermi di voler annullare TUTTE le modifiche? i dati saranno ricaricati.");
|
|
||||||
if (alert)
|
if (alert)
|
||||||
{
|
{
|
||||||
currFluxLogDto = null;
|
|
||||||
isEditing = false;
|
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
listaFlux = MDService.getFluxLog(currRecord.Valore);
|
if (currRecordClone != null)
|
||||||
StateHasChanged();
|
{
|
||||||
|
// serializzo valore x flux log...
|
||||||
|
|
||||||
|
DossierFluxLogDTO? valoreDeserializzato = JsonConvert.DeserializeObject<DossierFluxLogDTO>(selRec.Valore);
|
||||||
|
if (valoreDeserializzato != null)
|
||||||
|
{
|
||||||
|
listaFlux = valoreDeserializzato
|
||||||
|
.ODL
|
||||||
|
.OrderBy(x => x.CodFlux)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listaFlux != null)
|
||||||
|
{
|
||||||
|
foreach (var item in listaFlux)
|
||||||
|
{
|
||||||
|
item.IdxMacchina = selRec.IdxMacchina;
|
||||||
|
item.Valore = "0";
|
||||||
|
item.ValoreEdit = "0";
|
||||||
|
item.dtEvento = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DossierFluxLogDTO updatedResult = new DossierFluxLogDTO() { ODL = listaFlux };
|
||||||
|
string newVal = JsonConvert.SerializeObject(updatedResult);
|
||||||
|
// preparo x insert
|
||||||
|
currRecordClone.DtRif = DateTime.Now;
|
||||||
|
currRecordClone.IdxMacchina = selRec.IdxMacchina;
|
||||||
|
currRecordClone.CodArticolo = selRec.CodArticolo;
|
||||||
|
currRecordClone.KeyRichiesta = selRec.KeyRichiesta;
|
||||||
|
currRecordClone.Valore = newVal;
|
||||||
|
// METODO PER INSERT DOSSIER + FLUX
|
||||||
|
await MDService.DossiersInsert(currRecordClone);
|
||||||
|
//await reloadData(true);
|
||||||
|
currRecordClone = null;
|
||||||
|
isEditing = false;
|
||||||
|
await Task.Delay(1);
|
||||||
|
await flushCache();
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currRecordClone = null;
|
||||||
|
await Task.Delay(1);
|
||||||
|
NavManager.NavigateTo(NavManager.Uri, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
ListGruppiFase = await MDService.ElencoGruppiFase();
|
||||||
|
ListStati = await MDService.AnagStatiComm();
|
||||||
|
ListArticoli = await MDService.ArticoliGetSearch(100000, "BAGLIETTO", "");
|
||||||
|
ListMacchine = await MDService.MacchineGetAll();
|
||||||
|
await reloadData(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task OnParametersSetAsync()
|
||||||
|
{
|
||||||
|
if (!lastFilter.Equals(SelFilter))
|
||||||
|
{
|
||||||
|
lastFilter = SelFilter.clone();
|
||||||
|
await reloadData(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async void OnSeachUpdated()
|
||||||
|
{
|
||||||
|
await InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
currPage = 1;
|
||||||
|
StateHasChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task selRecord(DossierModel selRec)
|
||||||
|
{
|
||||||
|
currRecord = selRec;
|
||||||
|
await RecordSel.InvokeAsync(selRec);
|
||||||
|
listaFlux = MDService.getFluxLog(selRec.Valore);
|
||||||
|
await toggleTableFlux();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task update(FluxLogDTO selRec)
|
protected async Task update(FluxLogDTO selRec)
|
||||||
@@ -138,7 +256,6 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
if (alert)
|
if (alert)
|
||||||
{
|
{
|
||||||
|
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
if (currRecord != null)
|
if (currRecord != null)
|
||||||
{
|
{
|
||||||
@@ -159,33 +276,9 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
currFluxLogDto = null;
|
currFluxLogDto = null;
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
await JSRuntime.InvokeAsync<bool>("location.reload");
|
// rimando a pagina corrente
|
||||||
|
NavManager.NavigateTo(NavManager.Uri, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
ListStati = await MDService.AnagStatiComm();
|
|
||||||
await reloadData(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async void OnSeachUpdated()
|
|
||||||
{
|
|
||||||
await InvokeAsync(() =>
|
|
||||||
{
|
|
||||||
currPage = 1;
|
|
||||||
StateHasChanged();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task selRecord(Dossiers selRec)
|
|
||||||
{
|
|
||||||
currRecord = selRec;
|
|
||||||
await RecordSel.InvokeAsync(selRec);
|
|
||||||
listaFlux = MDService.getFluxLog(selRec.Valore);
|
|
||||||
await toggleTableFlux();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task UpdateData()
|
protected async Task UpdateData()
|
||||||
@@ -193,19 +286,6 @@ 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
|
||||||
|
|
||||||
@@ -213,13 +293,21 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private int _totalCount = 0;
|
private int _totalCount = 0;
|
||||||
|
|
||||||
private Dossiers? currRecord = null;
|
private FluxLogDTO? currFluxLogDto = null;
|
||||||
|
|
||||||
|
private DossierModel? currRecord = null;
|
||||||
|
|
||||||
|
private DossierModel? currRecordClone = null;
|
||||||
|
|
||||||
|
private List<AnagArticoli>? ListArticoli;
|
||||||
|
private List<AnagGruppi>? ListGruppiFase;
|
||||||
|
|
||||||
|
private List<Macchine>? ListMacchine;
|
||||||
|
private List<DossierModel>? ListRecords;
|
||||||
|
|
||||||
private FluxLogDTO? currRecordFlux;
|
|
||||||
private List<Dossiers>? ListRecords;
|
|
||||||
private List<ListValues>? ListStati;
|
private List<ListValues>? ListStati;
|
||||||
|
|
||||||
private List<Dossiers>? SearchRecords;
|
private List<DossierModel>? SearchRecords;
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
@@ -239,6 +327,8 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
private bool isLoading { get; set; } = false;
|
||||||
|
|
||||||
|
private SelectDossierParams lastFilter { get; set; } = new SelectDossierParams() { CurrPage = -1 };
|
||||||
|
|
||||||
private List<FluxLogDTO>? listaFlux { get; set; } = null;
|
private List<FluxLogDTO>? listaFlux { get; set; } = null;
|
||||||
|
|
||||||
private int MaxRecord
|
private int MaxRecord
|
||||||
@@ -246,6 +336,9 @@ namespace MP.SPEC.Components
|
|||||||
get => SelFilter.MaxRecord;
|
get => SelFilter.MaxRecord;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private NavigationManager NavManager { get; set; } = null!;
|
||||||
|
|
||||||
private int numRecord
|
private int numRecord
|
||||||
{
|
{
|
||||||
get => SelFilter.NumRec;
|
get => SelFilter.NumRec;
|
||||||
@@ -261,6 +354,7 @@ namespace MP.SPEC.Components
|
|||||||
{
|
{
|
||||||
get => SelFilter.DtEnd;
|
get => SelFilter.DtEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DateTime SelDtStart
|
private DateTime SelDtStart
|
||||||
{
|
{
|
||||||
get => SelFilter.DtStart;
|
get => SelFilter.DtStart;
|
||||||
@@ -290,6 +384,36 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
private async Task closeTableFlux()
|
||||||
|
{
|
||||||
|
currFluxLogDto = null;
|
||||||
|
currRecord = null;
|
||||||
|
currRecordClone = null;
|
||||||
|
visualizzaFlux = true;
|
||||||
|
isEditing = false;
|
||||||
|
await RecordSelFlux.InvokeAsync(currFluxLogDto);
|
||||||
|
await Task.Delay(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string css()
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (isEditing)
|
||||||
|
{
|
||||||
|
answ = "visible";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = "hidden";
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableEditing()
|
||||||
|
{
|
||||||
|
isEditing = true;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task reloadData(bool setChanged)
|
private async Task reloadData(bool setChanged)
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
@@ -324,14 +448,10 @@ namespace MP.SPEC.Components
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task closeTableFlux()
|
private string traduci(string lemma)
|
||||||
{
|
{
|
||||||
currFluxLogDto = null;
|
var answ = MDService.Traduci(lemma, "IT");
|
||||||
currRecord = null;
|
return answ;
|
||||||
visualizzaFlux = true;
|
|
||||||
isEditing = false;
|
|
||||||
await RecordSelFlux.InvokeAsync(currFluxLogDto);
|
|
||||||
await Task.Delay(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Private Methods
|
#endregion Private Methods
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ else
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
@if (currRecord != null)
|
||||||
|
{
|
||||||
|
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
||||||
|
}
|
||||||
</th>
|
</th>
|
||||||
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
||||||
<th><i class="fa-solid fa-screwdriver-wrench"></i> Fase</th>
|
<th><i class="fa-solid fa-screwdriver-wrench"></i> Fase</th>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -17,11 +17,15 @@ else
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
@if (currRecord != null)
|
||||||
|
{
|
||||||
|
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
||||||
|
}
|
||||||
</th>
|
</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-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 +45,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
|
||||||
{
|
{
|
||||||
@@ -92,12 +93,18 @@ namespace MP.SPEC.Components
|
|||||||
public async Task reloadData(bool setChanged)
|
public async Task reloadData(bool setChanged)
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DateTime limitData = DateTime.Now;
|
DateTime dataFrom = DateTime.Today.AddMonths(-1);
|
||||||
|
DateTime dataTo = DateTime.Now.AddMinutes(5);
|
||||||
|
if (SelFilter != null && SelFilter.dtMin != null)
|
||||||
|
{
|
||||||
|
dataFrom = (DateTime)SelFilter.dtMin;
|
||||||
|
}
|
||||||
if (SelDtMax != null)
|
if (SelDtMax != null)
|
||||||
{
|
{
|
||||||
limitData = (DateTime)SelDtMax;
|
dataTo = (DateTime)SelDtMax;
|
||||||
}
|
}
|
||||||
SearchRecords = await MDService.FluxLogGetLastFilt(limitData, SelMacchina, SelFlux, MaxRecord);
|
|
||||||
|
SearchRecords = await MDService.FluxLogGetLastFilt(dataTo, dataFrom, SelMacchina, SelFlux, MaxRecord);
|
||||||
totalCount = SearchRecords.Count;
|
totalCount = SearchRecords.Count;
|
||||||
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
||||||
await Task.Delay(1);
|
await Task.Delay(1);
|
||||||
@@ -135,7 +142,7 @@ namespace MP.SPEC.Components
|
|||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
StartTimer();
|
StartTimer();
|
||||||
}
|
}
|
||||||
@@ -163,8 +170,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 +187,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,6 +243,7 @@ namespace MP.SPEC.Components
|
|||||||
private DateTime? SelDtMax
|
private DateTime? SelDtMax
|
||||||
{
|
{
|
||||||
get => SelFilter.dtMax;
|
get => SelFilter.dtMax;
|
||||||
|
set => SelFilter.dtMax = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int totalCount
|
private int totalCount
|
||||||
|
|||||||
@@ -17,7 +17,10 @@ else
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
@if (currRecord != null)
|
||||||
|
{
|
||||||
|
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
||||||
|
}
|
||||||
</th>
|
</th>
|
||||||
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
||||||
<th><i class="fa-solid fa-screwdriver-wrench"></i> Fase</th>
|
<th><i class="fa-solid fa-screwdriver-wrench"></i> Fase</th>
|
||||||
@@ -37,15 +40,16 @@ 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>
|
||||||
<td>
|
<td>
|
||||||
@record.CodArticolo
|
@record.CodArticolo
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using MP.Data;
|
||||||
using MP.SPEC.Data;
|
using MP.SPEC.Data;
|
||||||
|
|
||||||
namespace MP.SPEC.Components
|
namespace MP.SPEC.Components
|
||||||
@@ -24,10 +25,7 @@ namespace MP.SPEC.Components
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static DateTime RoundDatetime(int minRound)
|
public static DateTime RoundDatetime(int minRound)
|
||||||
{
|
{
|
||||||
TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today);
|
return Utils.InitDatetime(DateTime.Now, minRound);
|
||||||
int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound;
|
|
||||||
DateTime endRounded = DateTime.Today.AddMinutes(minDay);
|
|
||||||
return endRounded;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
@@ -165,12 +163,16 @@ 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();
|
||||||
setDtMax();
|
setDtSnap();
|
||||||
DateTime dtStart = SelFilter.dtMin != null ? (DateTime)SelFilter.dtMin : DateTime.Now.AddDays(-7);
|
DateTime dtStart = SelFilter.dtMin != null ? (DateTime)SelFilter.dtMin : DateTime.Now.AddMonths(-1);
|
||||||
DateTime dtEnd = SelFilter.dtMax != null ? (DateTime)SelFilter.dtMax : DateTime.Now;
|
DateTime dtEnd = SelFilter.dtMax != null ? (DateTime)SelFilter.dtMax : DateTime.Today.AddDays(1);
|
||||||
ListMacchine = await MDService.MacchineWithFlux(dtStart, dtEnd);
|
ListMacchine = await MDService.MacchineWithFlux(dtStart, dtEnd);
|
||||||
ListFlux = await MDService.ParametriGetFilt(selMacchina);
|
ListFlux = await MDService.ParametriGetFilt(selMacchina);
|
||||||
|
|
||||||
@@ -178,13 +180,15 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setDtMax()
|
protected void setDtSnap()
|
||||||
{
|
{
|
||||||
// copio il filtro
|
// copio il filtro
|
||||||
var currFilt = SelFilter;
|
var currFilt = SelFilter;
|
||||||
@@ -193,7 +197,7 @@ namespace MP.SPEC.Components
|
|||||||
currFilt.CurrPage = 0;
|
currFilt.CurrPage = 0;
|
||||||
currFilt.lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}";
|
currFilt.lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}";
|
||||||
currFilt.dtMax = RoundDatetime(5);
|
currFilt.dtMax = RoundDatetime(5);
|
||||||
currFilt.dtMin = RoundDatetime(5).AddHours(-numOreAnticipoSnapshot);
|
currFilt.dtSnapMin = RoundDatetime(5).AddHours(-numOreAnticipoSnapshot);
|
||||||
SelFilter = currFilt;
|
SelFilter = currFilt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,6 +209,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()
|
||||||
{
|
{
|
||||||
@@ -212,7 +224,7 @@ namespace MP.SPEC.Components
|
|||||||
liveUpdate = false;
|
liveUpdate = false;
|
||||||
// se non ho data rif uso adesso...
|
// se non ho data rif uso adesso...
|
||||||
DateTime dtMax = selDtMax == null ? RoundDatetime(5) : (DateTime)selDtMax;
|
DateTime dtMax = selDtMax == null ? RoundDatetime(5) : (DateTime)selDtMax;
|
||||||
DateTime dtMin = selDtMin == null ? RoundDatetime(5).AddHours(-numOreAnticipoSnapshot) : (DateTime)selDtMin;
|
DateTime dtMin = selDtSnapMin == null ? RoundDatetime(5).AddHours(-numOreAnticipoSnapshot) : (DateTime)selDtSnapMin;
|
||||||
// aggiungo 15 sec
|
// aggiungo 15 sec
|
||||||
dtMax = dtMax.AddSeconds(15);
|
dtMax = dtMax.AddSeconds(15);
|
||||||
await MDService.DossiersTakeParamsSnapshotLast(selMacchina, dtMin, dtMax);
|
await MDService.DossiersTakeParamsSnapshotLast(selMacchina, dtMin, dtMax);
|
||||||
@@ -228,18 +240,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 +262,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
|
||||||
@@ -299,6 +312,19 @@ namespace MP.SPEC.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DateTime? selDtSnapMin
|
||||||
|
{
|
||||||
|
get => SelFilter.dtSnapMin;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (SelFilter.dtSnapMin != value)
|
||||||
|
{
|
||||||
|
SelFilter.dtSnapMin = value;
|
||||||
|
reportChange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool showEditPar { get; set; } = false;
|
private bool showEditPar { get; set; } = false;
|
||||||
|
|
||||||
private string snapMode
|
private string snapMode
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
+166
-50
@@ -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>();
|
||||||
@@ -169,7 +160,9 @@ namespace MP.SPEC.Data
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<bool> ArticoliDeleteRecord(AnagArticoli currRec)
|
public async Task<bool> ArticoliDeleteRecord(AnagArticoli currRec)
|
||||||
{
|
{
|
||||||
return await dbController.ArticoliDeleteRecord(currRec);
|
bool fatto = await dbController.ArticoliDeleteRecord(currRec);
|
||||||
|
await resetCacheArticoli();
|
||||||
|
return fatto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -180,7 +173,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>
|
||||||
@@ -190,7 +209,9 @@ namespace MP.SPEC.Data
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<bool> ArticoliUpdateRecord(AnagArticoli currRec)
|
public async Task<bool> ArticoliUpdateRecord(AnagArticoli currRec)
|
||||||
{
|
{
|
||||||
return await dbController.ArticoliUpdateRecord(currRec);
|
bool fatto = await dbController.ArticoliUpdateRecord(currRec);
|
||||||
|
await resetCacheArticoli();
|
||||||
|
return fatto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -221,7 +242,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);
|
||||||
@@ -321,7 +342,7 @@ namespace MP.SPEC.Data
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="selRecord">record dossier da eliminare</param>
|
/// <param name="selRecord">record dossier da eliminare</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<bool> DossiersDeleteRecord(Dossiers selRecord)
|
public async Task<bool> DossiersDeleteRecord(DossierModel selRecord)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
Stopwatch stopWatch = new Stopwatch();
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
@@ -344,9 +365,9 @@ namespace MP.SPEC.Data
|
|||||||
/// <param name="DtStart">Data minima per estrazione records</param>
|
/// <param name="DtStart">Data minima per estrazione records</param>
|
||||||
/// <param name="DtEnd">Data Massima per estrazione records</param>
|
/// <param name="DtEnd">Data Massima per estrazione records</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<List<Dossiers>> DossiersGetLastFilt(string IdxMacchina, string CodArticolo, DateTime DtStart, DateTime DtEnd)
|
public async Task<List<DossierModel>> DossiersGetLastFilt(string IdxMacchina, string CodArticolo, DateTime DtStart, DateTime DtEnd)
|
||||||
{
|
{
|
||||||
List<Dossiers>? result = new List<Dossiers>();
|
List<DossierModel>? result = new List<DossierModel>();
|
||||||
Stopwatch stopWatch = new Stopwatch();
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
string readType = "DB";
|
string readType = "DB";
|
||||||
@@ -355,7 +376,7 @@ namespace MP.SPEC.Data
|
|||||||
RedisValue rawData = redisDb.StringGet(currKey);
|
RedisValue rawData = redisDb.StringGet(currKey);
|
||||||
if (rawData.HasValue)
|
if (rawData.HasValue)
|
||||||
{
|
{
|
||||||
result = JsonConvert.DeserializeObject<List<Dossiers>>($"{rawData}");
|
result = JsonConvert.DeserializeObject<List<DossierModel>>($"{rawData}");
|
||||||
readType = "REDIS";
|
readType = "REDIS";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -367,7 +388,7 @@ namespace MP.SPEC.Data
|
|||||||
}
|
}
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
result = new List<Dossiers>();
|
result = new List<DossierModel>();
|
||||||
}
|
}
|
||||||
stopWatch.Stop();
|
stopWatch.Stop();
|
||||||
TimeSpan ts = stopWatch.Elapsed;
|
TimeSpan ts = stopWatch.Elapsed;
|
||||||
@@ -375,6 +396,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(DossierModel currDoss)
|
||||||
|
{
|
||||||
|
// aggiorno record sul DB
|
||||||
|
bool answ = await dbController.DossiersInsert(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 +422,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 +440,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(DossierModel currDoss)
|
||||||
|
{
|
||||||
|
// aggiorno record sul DB
|
||||||
|
bool answ = await dbController.DossiersUpdateValore(currDoss);
|
||||||
|
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,24 +501,27 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Elenco ultimi n record flux log dato macchina e flusso (ordinato x data registrazione)
|
/// Elenco ultimi n record flux log dato macchina e flusso (ordinato x data registrazione)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="DtMax">Data massima (recupera eventi antecedenti)</param>
|
/// <param name="DtMax">Data massima x eventi</param>
|
||||||
|
/// <param name="DtMin">Data minima x eventi</param>
|
||||||
/// <param name="IdxMacchina">* = tutte, altrimenti solo x una data macchina</param>
|
/// <param name="IdxMacchina">* = tutte, altrimenti solo x una data macchina</param>
|
||||||
/// <param name="CodFlux">*=tutti, altrimenti solo selezionato</param>
|
/// <param name="CodFlux">*=tutti, altrimenti solo selezionato</param>
|
||||||
/// <param name="MaxRec">numero massimo record da restituire</param>
|
/// <param name="MaxRec">numero massimo record da restituire</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<List<FluxLog>> FluxLogGetLastFilt(DateTime DtMax, string IdxMacchina, string CodFlux, int MaxRec)
|
public async Task<List<FluxLog>> FluxLogGetLastFilt(DateTime DtMax, DateTime DtMin, string IdxMacchina, string CodFlux, int MaxRec)
|
||||||
{
|
{
|
||||||
List<FluxLog>? result = new List<FluxLog>();
|
List<FluxLog>? result = new List<FluxLog>();
|
||||||
Stopwatch stopWatch = new Stopwatch();
|
Stopwatch stopWatch = new Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
string readType = "DB";
|
string readType = "DB";
|
||||||
string currKey = $"{redisFluxLogFilt}:{IdxMacchina}:{CodFlux}:{MaxRec}:{DtMax:yyyyMMdd}:{DtMax:HHmm}";
|
string currKey = $"{redisFluxLogFilt}:{IdxMacchina}:{CodFlux}:{MaxRec}:{DtMax:yyyyMMddHHmm}:{DtMin:yyyyMMddHHmm}";
|
||||||
// cerco in redis dato valore sel macchina...
|
// cerco in redis dato valore sel macchina...
|
||||||
RedisValue rawData = redisDb.StringGet(currKey);
|
RedisValue rawData = redisDb.StringGet(currKey);
|
||||||
if (rawData.HasValue)
|
if (rawData.HasValue)
|
||||||
@@ -482,7 +531,7 @@ namespace MP.SPEC.Data
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = await Task.FromResult(dbController.FluxLogGetLastFilt(DtMax, IdxMacchina, CodFlux, MaxRec));
|
result = await Task.FromResult(dbController.FluxLogGetLastFilt(DtMax, DtMin, IdxMacchina, CodFlux, MaxRec));
|
||||||
// serializzo e salvo...
|
// serializzo e salvo...
|
||||||
rawData = JsonConvert.SerializeObject(result);
|
rawData = JsonConvert.SerializeObject(result);
|
||||||
redisDb.StringSet(currKey, rawData, TimeSpan.FromSeconds(10));
|
redisDb.StringSet(currKey, rawData, TimeSpan.FromSeconds(10));
|
||||||
@@ -593,8 +642,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 +768,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 +799,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,7 +892,30 @@ namespace MP.SPEC.Data
|
|||||||
return dbController.OdlStart(IdxOdl);
|
return dbController.OdlStart(IdxOdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> updateDossierValue(Dossiers currDoss, FluxLogDTO editFL)
|
/// <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(DossierModel currDoss, FluxLogDTO editFL)
|
||||||
{
|
{
|
||||||
bool answ = false;
|
bool answ = false;
|
||||||
// recupero intero set valori dossier deserializzando...
|
// recupero intero set valori dossier deserializzando...
|
||||||
@@ -886,13 +955,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 +1015,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 +1025,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>
|
||||||
@@ -995,6 +1103,14 @@ namespace MP.SPEC.Data
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task resetCacheArticoli()
|
||||||
|
{
|
||||||
|
RedisValue pattern = new RedisValue($"{redisArtByDossier}:*");
|
||||||
|
await ExecFlushRedisPattern(pattern);
|
||||||
|
pattern = new RedisValue($"{redisArtList}:*");
|
||||||
|
await ExecFlushRedisPattern(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Private Methods
|
#endregion Private Methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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; } = "*";
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,11 @@
|
|||||||
#region Public Constructors
|
#region Public Constructors
|
||||||
|
|
||||||
public SelectFluxParams()
|
public SelectFluxParams()
|
||||||
{ }
|
{
|
||||||
|
dtMin = DateTime.Today.AddMonths(-1);
|
||||||
|
dtMax = DateTime.Today.AddDays(1);
|
||||||
|
dtSnapMin = DateTime.Today.AddDays(-2);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
|
|
||||||
@@ -16,6 +20,7 @@
|
|||||||
public DateTime? dtRif { get; set; } = null;
|
public DateTime? dtRif { get; set; } = null;
|
||||||
public DateTime? dtMax { get; set; } = null;
|
public DateTime? dtMax { get; set; } = null;
|
||||||
public DateTime? dtMin { get; set; } = null;
|
public DateTime? dtMin { get; set; } = null;
|
||||||
|
public DateTime? dtSnapMin { get; set; } = null;
|
||||||
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;
|
||||||
@@ -36,6 +41,7 @@
|
|||||||
dtRif = this.dtRif,
|
dtRif = this.dtRif,
|
||||||
dtMax = this.dtMax,
|
dtMax = this.dtMax,
|
||||||
dtMin = this.dtMin,
|
dtMin = this.dtMin,
|
||||||
|
dtSnapMin = this.dtSnapMin,
|
||||||
IdxMacchina = this.IdxMacchina,
|
IdxMacchina = this.IdxMacchina,
|
||||||
lastUpdate = this.lastUpdate,
|
lastUpdate = this.lastUpdate,
|
||||||
LiveUpdate = this.LiveUpdate,
|
LiveUpdate = this.LiveUpdate,
|
||||||
@@ -54,6 +60,18 @@
|
|||||||
if (IdxMacchina != item.IdxMacchina)
|
if (IdxMacchina != item.IdxMacchina)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (dtMax != item.dtMax)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (dtMin != item.dtMin)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (dtRif != item.dtRif)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (dtSnapMin != item.dtSnapMin)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (CodFlux != item.CodFlux)
|
if (CodFlux != item.CodFlux)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -66,10 +84,10 @@
|
|||||||
if (TempoAgg != item.TempoAgg)
|
if (TempoAgg != item.TempoAgg)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (NumRec!= item.NumRec)
|
if (NumRec != item.NumRec)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (TotCount!= item.TotCount)
|
if (TotCount != item.TotCount)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (CurrPage != item.CurrPage)
|
if (CurrPage != item.CurrPage)
|
||||||
|
|||||||
@@ -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.709</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>
|
||||||
|
|||||||
@@ -40,33 +40,21 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">
|
<div class="col-3">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">Codice</span>
|
<span class="input-group-text">Codice</span>
|
||||||
<input type="text" class="form-control" placeholder="Articolo" @bind-value="@currRecord.CodArticolo">
|
<input type="text" class="form-control" placeholder="Articolo" @bind-value="@currRecord.CodArticolo">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-5">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">Disegno</span>
|
<span class="input-group-text">Disegno</span>
|
||||||
<input type="text" class="form-control" placeholder="Disegno" @bind-value="@currRecord.Disegno">
|
<input type="text" class="form-control" placeholder="Disegno" @bind-value="@currRecord.Disegno">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-1">
|
<div class="col-4">
|
||||||
<div class="input-group" title="Tipo">
|
|
||||||
<select @bind="@currRecord.Tipo" class="form-select text-end">
|
|
||||||
@if (ListTipoArt != null)
|
|
||||||
{
|
|
||||||
foreach (var item in ListTipoArt)
|
|
||||||
{
|
|
||||||
<option value="@item.value">@item.label</option>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-3">
|
|
||||||
<div class="input-group" title="Azienda">
|
<div class="input-group" title="Azienda">
|
||||||
|
<span class="input-group-text">Azienda</span>
|
||||||
<select @bind="@currRecord.Azienda" class="form-select text-end">
|
<select @bind="@currRecord.Azienda" class="form-select text-end">
|
||||||
@if (ListAziende != null)
|
@if (ListAziende != null)
|
||||||
{
|
{
|
||||||
@@ -81,8 +69,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-2">
|
<div class="row mt-2">
|
||||||
<div class="col-8">
|
<div class="col-3">
|
||||||
<input type="text" class="form-control" placeholder="Descrizione Articolo" @bind-value="@currRecord.DescArticolo">
|
<div class="input-group" title="Tipo">
|
||||||
|
<span class="input-group-text">Tipo</span>
|
||||||
|
<select @bind="@currRecord.Tipo" class="form-select text-end">
|
||||||
|
@if (ListTipoArt != null)
|
||||||
|
{
|
||||||
|
foreach (var item in ListTipoArt)
|
||||||
|
{
|
||||||
|
<option value="@item.value">@item.label</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-5">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-text">Descrizione</span>
|
||||||
|
<input type="text" class="form-control" placeholder="Descrizione Articolo" @bind-value="@currRecord.DescArticolo">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<div class="d-grid gap-2">
|
<div class="d-grid gap-2">
|
||||||
@@ -120,7 +125,10 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
@if (currRecord != null)
|
||||||
|
{
|
||||||
|
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
||||||
|
}
|
||||||
</th>
|
</th>
|
||||||
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
<th><i class="fa-solid fa-file"></i> Articolo</th>
|
||||||
<th><i class="fa-solid fa-compass-drafting"></i> Disegno</th>
|
<th><i class="fa-solid fa-compass-drafting"></i> Disegno</th>
|
||||||
@@ -136,7 +144,7 @@
|
|||||||
<tr class="@checkSelect(@record.CodArticolo)">
|
<tr class="@checkSelect(@record.CodArticolo)">
|
||||||
<td>
|
<td>
|
||||||
<button @onclick="() => selRecord(record)" class="btn btn-primary btn-sm" title="Modifica Record"><i class="bi bi-pencil-square"></i></button>
|
<button @onclick="() => selRecord(record)" class="btn btn-primary btn-sm" title="Modifica Record"><i class="bi bi-pencil-square"></i></button>
|
||||||
<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>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div>@record.CodArticolo</div>
|
<div>@record.CodArticolo</div>
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ namespace MP.SPEC.Pages
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
//MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
ListTipoArt = null;
|
ListTipoArt = null;
|
||||||
ListAziende = null;
|
ListAziende = null;
|
||||||
@@ -58,7 +57,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 +289,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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
@page "/Contacts"
|
||||||
|
@using MP.SPEC.Data
|
||||||
|
|
||||||
|
@inject MessageService AppMService
|
||||||
|
|
||||||
|
<div class="row mx-2">
|
||||||
|
<div class="col-12 col-lg-8 offset-lg-2">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header text-center">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4"></div>
|
||||||
|
<div class="col-4">
|
||||||
|
<h2>@Titolo</h2>
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<div class="badge rounded-pill bg-dark px-4 py-2">
|
||||||
|
<div class="px-1">
|
||||||
|
<a class="btn text-light text-decoration-none" href="https://www.egalware.com/" target="_blank">powered by EgalWare <img width="24" class="img-fluid" src="images/LogoEgw.png" /></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3"></div>
|
||||||
|
<div class="col-12 col-lg-6 py-3">
|
||||||
|
<img src="images/LogoMapoFull.png" class="img-fluid" />
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3"></div>
|
||||||
|
<div class="col-12">
|
||||||
|
<h4 class="card-title">@Messaggio</h4>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<h4>Sede Operativa</h4>
|
||||||
|
<address>
|
||||||
|
<strong>EgalWare s.r.l.</strong><br />
|
||||||
|
via Nazionale, 93<br />
|
||||||
|
24068 Seriate - BG<br />
|
||||||
|
<abbr title="Phone">P:</abbr>
|
||||||
|
035.290178<br />
|
||||||
|
<abbr title="Phone">P:</abbr>
|
||||||
|
035.460560
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<h4>Sede Legale</h4>
|
||||||
|
<address>
|
||||||
|
<strong>EgalWare s.r.l.</strong><br />
|
||||||
|
via Nazionale, 93<br />
|
||||||
|
24068 Seriate - BG<br />
|
||||||
|
<br />
|
||||||
|
<abbr title="P.Iva">VAT:</abbr>03985390164
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<h4>Supporto</h4>
|
||||||
|
<address>
|
||||||
|
<strong>Web:</strong><br />
|
||||||
|
Accedi al supporto dal <a href="https://support.egalware.com/" target="_blank">nostro sito web</a><br />
|
||||||
|
<br />
|
||||||
|
<strong>Email:</strong><br />
|
||||||
|
Scrivi un email a <a href="mailto:info@egalware.com">info at egalware.com</a>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
namespace MP.SPEC.Pages
|
||||||
|
{
|
||||||
|
public partial class Contacts : IDisposable
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected string Messaggio = "";
|
||||||
|
protected string Titolo = "";
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
Titolo = "MP SPEC";
|
||||||
|
Messaggio = "I nostri contattatti e siti di supporto";
|
||||||
|
AppMService.ShowSearch = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
+52
-57
@@ -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
|
||||||
@@ -52,12 +50,62 @@ namespace MP.SPEC.Pages
|
|||||||
isFiltering = false;
|
isFiltering = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task selRecordDoss(Dossiers selDoss)
|
protected async Task selRecordDoss(DossierModel selDoss)
|
||||||
{
|
{
|
||||||
currRecordDoss = selDoss;
|
currRecordDoss = selDoss;
|
||||||
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 DossierModel? 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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<div class="p-2 align-content-center fs-1">
|
<div class="p-2 align-content-center fs-1">
|
||||||
<b>MAPO SPEC</b>
|
<b>MAPO SPEC</b>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-2 bg-light">
|
<div class="p-2">
|
||||||
<img src="images/LogoEgw.png" class="image-fluid" height="64" />
|
<img src="images/LogoEgw.png" class="image-fluid" height="64" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -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.709</h4>
|
||||||
<br /> Note di rilascio:
|
<br /> Note di rilascio:
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6.16.2210.2014
|
6.16.2211.709
|
||||||
|
|||||||
@@ -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.709</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/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 154 KiB |
@@ -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