f6406f833f
- diminuito problema di refresh automatico - inizio gestione dispose oggetti
256 lines
16 KiB
Plaintext
256 lines
16 KiB
Plaintext
@using MP.SPEC.Components
|
|
@using MP.SPEC.Data
|
|
|
|
@if (ListRecords == null)
|
|
{
|
|
<LoadingData></LoadingData>
|
|
}
|
|
else if (totalCount == 0)
|
|
{
|
|
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="row">
|
|
@if (currRecord != null && !showStats && isCurrOdl)
|
|
{
|
|
<div class="col-6 col-lg-8">
|
|
<button @onclick="() => forceSyncDb()" class="btn btn-success btn-sm btn-">Forza sync dati ODL <i class="bi bi-fast-forward-circle"></i></button>
|
|
</div>
|
|
<div class="col-6 col-lg-4 text-end">
|
|
@*<div class="px-2 input-group" title="Selezionare Data-Ora chiusura ODL">
|
|
<label class="input-group-text" for="dtMax"><i class="fa-regular fa-calendar-minus"></i></label>
|
|
<input class="form-control" @bind="@selDtFine" id="dtMax" type="datetime-local">
|
|
<button @onclick="() => chiudiOdl()" class="btn btn-danger btn-sm btn-">Registra chiusura ODL <i class="far fa-stop-circle"></i></button>
|
|
</div>*@
|
|
<button @onclick="() => chiudiOdl()" class="btn btn-danger btn-sm btn-">Registra chiusura ODL <i class="far fa-stop-circle"></i></button>
|
|
</div>
|
|
}
|
|
<div class="col-12">
|
|
<table class="table table-sm table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
<button @onclick="() => resetSel()" class="btn btn-primary btn-sm"><i class="bi bi-arrow-counterclockwise"></i></button>
|
|
</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-hard-drive"></i> Macchina</th>
|
|
<th><i class="fa-solid fa-circle-info"></i> Info ciclo</th>
|
|
<th><i class="fa-solid fa-calendar-day"></i> Periodo</th>
|
|
<th title="Durata in ore:min"><i class="fa-solid fa-clock"></i> Durata</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach (var record in ListRecords)
|
|
{
|
|
<tr class="@checkSelect(@record.IdxOdl)">
|
|
|
|
<td>
|
|
@if (isCurrOdl)
|
|
{
|
|
<button class="btn btn-primary btn-sm" @onclick="() => selRecord(record)"><i class="fa-solid fa-magnifying-glass"></i></button>
|
|
}
|
|
else
|
|
{
|
|
<button class="btn btn-secondary btn-sm disabled"><i class="fa-solid fa-magnifying-glass"></i></button>
|
|
}
|
|
</td>
|
|
<td>
|
|
@record.CodArticolo
|
|
<div class="small textConsensed text-secondary">@record.ArticoloNav.DescArticolo</div>
|
|
</td>
|
|
<td>
|
|
<div>
|
|
@tradFase(record.KeyRichiesta)
|
|
</div>
|
|
@if (record.Note != "")
|
|
{
|
|
<div class="small textConsensed text-secondary badge text-bg-light border border-secondary rounded">
|
|
<b class="text-dark"></b> <span class="text-wrap text-start"> @record.Note </span>
|
|
</div>
|
|
}
|
|
</td>
|
|
|
|
<td>
|
|
@record.IdxMacchina
|
|
<div class="small textConsensed text-secondary">@record.MachineNav.Descrizione</div>
|
|
</td>
|
|
<td>
|
|
<div class="small textConsensed"><b>N° pezzi:</b> @record.NumPezzi</div>
|
|
<div class="small textConsensed"><b>T. Ciclo:</b> @record.Tcassegnato.ToString("N3")</div>
|
|
|
|
</td>
|
|
<td>
|
|
<div class="small d-flex justify-content-between">
|
|
<div>
|
|
<div><b>@($"{@record.DataInizio:yyyy/MM/dd}")</b></div>
|
|
<div>@($"{@record.DataInizio:ddd HH:mm:ss}")</div>
|
|
</div>
|
|
<div class="p-0">
|
|
<i class="fa-solid fa-angles-right"></i>
|
|
</div>
|
|
<div>
|
|
@if (@record.DataFine != null)
|
|
{
|
|
<div><b>@($"{@record.DataFine:yyyy/MM/dd}")</b></div>
|
|
<div>@($"{@record.DataFine:ddd HH:mm:ss}")</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="text-secondary">
|
|
<div><b>@($"{DateTime.Now:yyyy/MM/dd}")</b></div>
|
|
<div>@($"{DateTime.Now:ddd HH:mm:ss}")</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<div>
|
|
<b>@record.DurataMinuti</b>
|
|
</div>
|
|
<div>
|
|
<button class="btn btn-sm btn-primary py-0" type="button" @onclick="() => selectStatRecord(record)" data-bs-toggle="modal" data-bs-target="#myModal" title="Mostra statistiche"><i class="fa-solid fa-chart-pie"></i></button>
|
|
</div>
|
|
<!-- Modal -->
|
|
</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
<div class="modal fade" id="myModal" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered modal-xl">
|
|
<div class="modal-content">
|
|
<div class="modal-header bg-primary col-12">
|
|
@if (statRecord != null)
|
|
{
|
|
<div class="col-3">
|
|
<b class="modal-title fs-1" id="staticBackdropLabel"><b>ODL @statRecord.IdxOdl</b></b>
|
|
</div>
|
|
<div class="col-6 fs-5">
|
|
<b>@statRecord.CodArticolo</b>
|
|
<div class="small textConsensed text-light">@statRecord.ArticoloNav.DescArticolo</div>
|
|
</div>
|
|
<div class="col-2 fs-5">
|
|
<b>@statRecord.IdxMacchina</b>
|
|
<div class="small textConsensed text-light">@statRecord.MachineNav.Descrizione</div>
|
|
</div>
|
|
}
|
|
<div class="col-1 text-end">
|
|
<button type="button" class="btn btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
</div>
|
|
<div class="modal-body col-12">
|
|
@if (statRecord != null && showStats)
|
|
{
|
|
<div class="d-flex justify-content-between">
|
|
<div class="col-8">
|
|
<div>
|
|
<table class="table">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width: 270px">
|
|
<div class="small textConsensed"><b>N° pezzi:</b> @statRecord.NumPezzi</div>
|
|
<div class="small textConsensed"><b>T. Ciclo:</b> @statRecord.Tcassegnato.ToString("N3")</div>
|
|
</td>
|
|
<td style="width: 300px">
|
|
<div class="small d-flex justify-content-between">
|
|
<div>
|
|
<div><b>@($"{@statRecord.DataInizio:yyyy/MM/dd}")</b></div>
|
|
<div>@($"{@statRecord.DataInizio:ddd HH:mm:ss}")</div>
|
|
</div>
|
|
<div class="p-0">
|
|
<i class="fa-solid fa-angles-right"></i>
|
|
</div>
|
|
<div>
|
|
@if (@statRecord.DataFine != null)
|
|
{
|
|
<div><b>@($"{@statRecord.DataFine:yyyy/MM/dd}")</b></div>
|
|
<div>@($"{@statRecord.DataFine:ddd HH:mm:ss}")</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="text-secondary">
|
|
<div><b>@($"{DateTime.Now:yyyy/MM/dd}")</b></div>
|
|
<div>@($"{DateTime.Now:ddd HH:mm:ss}")</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div>
|
|
<table class="table">
|
|
<tbody>
|
|
<tr>
|
|
<td>
|
|
<div>
|
|
@tradFase(statRecord.KeyRichiesta)
|
|
</div>
|
|
@if (statRecord.Note != "")
|
|
{
|
|
<div class="small textConsensed text-secondary badge text-bg-light border border-secondary rounded">
|
|
<b class="text-dark"></b> <span class="text-wrap text-start"> @statRecord.Note </span>
|
|
</div>
|
|
}
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div>
|
|
@if (statRecord != null)
|
|
{
|
|
|
|
@if (ListOdlStats != null)
|
|
{
|
|
@foreach (var stat in ListOdlStats)
|
|
{
|
|
<div class="p-1">
|
|
<div class="d-flex justify-content-between">
|
|
<div class="text-uppercase">
|
|
@stat.Descrizione
|
|
</div>
|
|
<div>
|
|
<b>@(formDurata(stat.TotDurata))</b>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="progress">
|
|
<div class="progress-bar @colorChanger(@stat.Css)" role="progressbar" aria-valuenow="0" aria-valuemin="0" style="width: @Math.Round(calcolaPerc(stat.TotDurata),0)%; background-color:@pbStyle(@stat.Css);" aria-valuemax="100">@($"{calcolaPerc(stat.TotDurata):N1}%")</div>
|
|
</div>
|
|
</div>
|
|
|
|
}
|
|
}
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="col-4 dcContainer">
|
|
@if (statRecord != null && ListOdlStats != null)
|
|
{
|
|
<div class="dcBox">
|
|
<ODLPlot SelectedOdl="@statRecord.IdxOdl"></ODLPlot>
|
|
</div>
|
|
<div class="dcBox dcOverlay d-flex">
|
|
<div class="align-self-center text-center w-100">
|
|
<b class="fs-3">@statRecord.DurataMinuti</b>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|