e65c36f538
- salvataggio dati in localStorage
234 lines
7.9 KiB
Plaintext
234 lines
7.9 KiB
Plaintext
@if (RecMSE == null)
|
|
{
|
|
<div class="card text-white mapBlock shadow bg-secondary p-0 m-0">
|
|
<div class="card-body">
|
|
<div class="placeholder-glow">
|
|
<span class="placeholder col-7"></span>
|
|
<span class="placeholder col-4"></span>
|
|
<span class="placeholder col-4"></span>
|
|
<span class="placeholder col-7"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
@if (FullMode)
|
|
{
|
|
<div class="card mapBlock shadow @RecMSE.Semaforo p-0 m-0" @onclick="ShowDetail">
|
|
<img src="@ImgUrlMacc(RecMSE.Url)" class="card-img-top" alt="@RecMSE.CodMacchina">
|
|
<div class="m-1 bg-black">
|
|
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start rCTop">
|
|
<div class="labelTopDx px-2 w-100">
|
|
<div class="row">
|
|
<div class="col-3 text-start">
|
|
Art
|
|
</div>
|
|
<div class="col-9 text-end fw-bold">
|
|
@RecMSE.CodArticolo
|
|
</div>
|
|
</div>
|
|
<div class="row small">
|
|
<div class="col-6 text-start">
|
|
@($"PODL{RecMSE.IdxPOdl:00000000}")
|
|
</div>
|
|
<div class="col-6 text-end">
|
|
@($"ODL{RecMSE.IdxOdl:00000000}")
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="card bg-black text-light p-0 rCBot">
|
|
<div class="row justify-content-center mx-0">
|
|
<div class="col-12 px-1">
|
|
<h4 class="text-start mb-0 fw-bold">
|
|
@RecMSE.Nome
|
|
</h4>
|
|
</div>
|
|
<div class="col-12 p-1 @RecMSE.Semaforo">
|
|
<div class="d-flex justify-content-between">
|
|
<div class="p-0 mr-auto">
|
|
<b>@RecMSE.DescrizioneStato</b>
|
|
</div>
|
|
<div class="p-0">
|
|
@(formatDurata(RecMSE.Durata))
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-12 p-0 text-nowrap" style="font-size: 1.2em; line-height: 1.0em;">
|
|
<div class="row px-1 fw-bold" style="font-size:0.85em;">
|
|
<div class="col pe-0">
|
|
<small class="text-success">Confermati</small>
|
|
</div>
|
|
<div class="col text-center px-0">
|
|
<small class="text-warning">Prodotti</small>
|
|
</div>
|
|
<div class="col text-end ps-0">
|
|
<small class="text-light">Ordinati</small>
|
|
</div>
|
|
</div>
|
|
<div class="row px-1">
|
|
<div class="col pe-0 text-success">
|
|
@($"{RecMSE.PezziConf:N0}")
|
|
</div>
|
|
<div class="col text-center text-warning px-0">
|
|
@($"{RecMSE.PezziProd:N0}")
|
|
</div>
|
|
<div class="col text-end ps-0">
|
|
@($"{RecMSE.NumPezzi:N0}")
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col m-1">
|
|
<ProdAdvDispl CountData="@CurrCount"></ProdAdvDispl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
@code {
|
|
|
|
[Parameter]
|
|
public MappaStatoExpl? RecMSE { get; set; } = null;
|
|
|
|
|
|
[Parameter]
|
|
public int keepAliveMin { get; set; } = 5;
|
|
|
|
|
|
[Parameter]
|
|
public bool FullMode { get; set; } = true;
|
|
|
|
[Inject]
|
|
protected NavigationManager NavMan { get; set; } = null!;
|
|
|
|
|
|
protected int kaFactor = 60 / 2;
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
// se configurata uso cartella virtuale... altrimenti cartella processo
|
|
imgBasePath = Environment.CurrentDirectory;// @"C:\Steamware\macchine";
|
|
}
|
|
|
|
private string imgBasePath = "";
|
|
|
|
protected ProdAdvDispl.ProdCounter CurrCount
|
|
{
|
|
get
|
|
{
|
|
ProdAdvDispl.ProdCounter answ = new ProdAdvDispl.ProdCounter()
|
|
{
|
|
numPzConf = (int)RecMSE.PezziConf,
|
|
numPzOrd= (int)RecMSE.NumPezzi,
|
|
numPzProd= (int)RecMSE.PezziProd
|
|
};
|
|
return answ;
|
|
}
|
|
}
|
|
|
|
protected async Task ShowDetail()
|
|
{
|
|
NavMan.NavigateTo($"machine-detail/?IdxMacc={RecMSE!.IdxMacchina}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// url completo immagine
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <returns></returns>
|
|
public string ImgUrlMacc(string url)
|
|
{
|
|
string answ = "";
|
|
if (string.IsNullOrEmpty(url.ToString()))
|
|
{
|
|
url = "Steamware.png";
|
|
}
|
|
// verifico esistenza macchina SMALL...
|
|
answ = $"images/macchine/small/{url}";
|
|
string fullPath = Path.Combine(imgBasePath, "wwwroot", answ);
|
|
if (!File.Exists(fullPath))
|
|
{
|
|
// se non ci fosse cerco immagine fullsize
|
|
answ = $"images/macchine/{url}";
|
|
fullPath = Path.Combine(imgBasePath, "wwwroot", answ);
|
|
}
|
|
// altrimenti metto default Steamware
|
|
if (!File.Exists(fullPath))
|
|
{
|
|
answ = "images/macchine/Steamware.png";
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// formatta la durata in minuti in un modo "human readable" gg/ore/min
|
|
/// </summary>
|
|
/// <param name="minuti">minuti</param>
|
|
/// <returns></returns>
|
|
public static string formatDurata(double? minuti)
|
|
{
|
|
string answ = "??";
|
|
if (minuti != null)
|
|
{
|
|
DateTime tempo = new DateTime();
|
|
tempo = tempo.AddMinutes((double)minuti);
|
|
|
|
if (minuti < 60)
|
|
{
|
|
answ = $"{tempo.Minute:00}:{tempo.Second:00}";
|
|
}
|
|
else if (minuti < 1440)
|
|
{
|
|
answ = $"{tempo.Hour}h {tempo.Minute}m";
|
|
}
|
|
else
|
|
{
|
|
answ = $"{tempo.DayOfYear}g {tempo.Hour}h";
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
|
|
{
|
|
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
|
|
string answ = cssStatus(semaforo);
|
|
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
|
|
{
|
|
answ = $"{baseCss}Ro";
|
|
// blink se secondo pari...
|
|
DateTime adesso = DateTime.Now;
|
|
int resto = 0;
|
|
Math.DivRem(adesso.Second, 2, out resto);
|
|
if (resto == 0)
|
|
{
|
|
answ += "_b";
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
private string cssStatus(string codSemaforo)
|
|
{
|
|
// se vuoto --> mostra nero!
|
|
if (string.IsNullOrEmpty(codSemaforo))
|
|
{
|
|
codSemaforo = "sNe";
|
|
}
|
|
string codColore = codSemaforo.Substring(1, 2);
|
|
string answ = $"{baseCss}{codColore}";
|
|
return answ;
|
|
}
|
|
protected string baseCss = "sem";
|
|
}
|