Files
mapo-core/MP-TAB/MP-TAB.Client/Components/MachineBlock.razor
T
Samuele Locatelli e65c36f538 TAB:
- salvataggio dati in localStorage
2023-10-02 12:27:41 +02:00

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";
}