Merge branch 'release/FixDP_03'
This commit is contained in:
@@ -155,17 +155,6 @@ namespace MP_TAB3.Components
|
||||
await RefreshScadLogIn(currOprTokLsDeco);
|
||||
await EA_UserIsOk.InvokeAsync(true);
|
||||
}
|
||||
|
||||
#if false
|
||||
// infine controllo sia valida macchina richiesta rispetto a memoria...
|
||||
// cerco MSE macchina
|
||||
var machMse = MsgServ.GetMachineMse(CurrMacc);
|
||||
if (machMse != null)
|
||||
{
|
||||
MsgServ.LastIdxMacchina = "";
|
||||
NavMan.NavigateTo("status-map");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
protected async Task RefreshScadLogIn(string decodValue)
|
||||
|
||||
@@ -1,359 +1,326 @@
|
||||
@if (isLoading)
|
||||
@if (isLoading || CRecMSE == 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-4"></span>
|
||||
<span class="placeholder col-7"></span>
|
||||
<span class="placeholder col-12 pholderHeight"></span>
|
||||
<span class="placeholder col-12"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-8"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-7"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-8"></span>
|
||||
<span>...loading stage 1...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (CRecMSE == null)
|
||||
@if (FullMode)
|
||||
{
|
||||
<div class="card text-white mapBlock shadow bg-secondary p-0 m-0">
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info w-100 fs-3">No data</div>
|
||||
<div class="placeholder-glow">
|
||||
<span class="placeholder col-4 mb-1"></span>
|
||||
<span class="placeholder col-7 mb-1"></span>
|
||||
<span class="placeholder col-12 mb-1 pholderHeight"></span>
|
||||
<span class="placeholder col-12 mb-1"></span>
|
||||
<span class="placeholder col-3 mb-1"></span>
|
||||
<span class="placeholder col-8 mb-1"></span>
|
||||
<span class="placeholder col-3 mb-1"></span>
|
||||
<span class="placeholder col-7 mb-1"></span>
|
||||
<span class="placeholder col-3 mb-1"></span>
|
||||
<span class="placeholder col-8 mb-1"></span>
|
||||
<span>...loading stage 2...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<PlaceholderStatusMap></PlaceholderStatusMap>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (FullMode)
|
||||
<PlaceholderDetail></PlaceholderDetail>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (FullMode)
|
||||
{
|
||||
if (Width > 640)
|
||||
{
|
||||
if (Width > 640)
|
||||
{
|
||||
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@CRecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@CRecMSE.DescrizioneStato </span>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<b>@(FormatDurata(CRecMSE.Durata))</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {CRecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {CRecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-4">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-8 py-1" style="line-height: 1.6rem;">
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"ODL{CRecMSE.IdxOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"PODL{CRecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 py-0 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@CRecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@CRecMSE.DescrizioneStato </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@CRecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@CRecMSE.DescrizioneStato</span>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<b>
|
||||
@(FormatDurata(CRecMSE.Durata))
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {CRecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {CRecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-5">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-7 small py-2" style="line-height: 1.6rem; font-size:0.9rem;">
|
||||
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"ODL{CRecMSE.IdxOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"PODL{CRecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="cardObj px-3 py-1 text-sizer">
|
||||
<div class="text-center d-flex justify-content-between align-items-center row">
|
||||
<div class="col-12">
|
||||
<h4 class="text-center mb-0 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-4 fs-4">
|
||||
<div class="lh-1">
|
||||
<div class="text-end text-light fw-bold d-flex justify-content-between border-bottom border-secondary">
|
||||
<div class="px-0">
|
||||
Cicli Prod
|
||||
</div>
|
||||
@if (datiProdAct != null)
|
||||
{
|
||||
<div class="px-0">@($"{datiProdAct.PzTotODL}")</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="px-0">@($"{CRecMSE.PezziProd}")</div>
|
||||
}
|
||||
</div>
|
||||
@if (datiProdAct != null)
|
||||
{
|
||||
@if (datiProdAct.Pz2RecTot > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-warning d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Da Confermare
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.Pz2RecTot}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Da Confermare
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.Pz2RecTot}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (NumScartiConf > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-danger d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Scarti Versati
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{NumScartiConf}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (datiProdAct.PzConfRilav > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-info d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Rilav Versati
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.PzConfRilav}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="text-end text-success d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Buoni Versati
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.PzConfBuoni}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (CRecMSE.extraVal > 0)
|
||||
{
|
||||
<div class="text-end text-primary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Qta Extra
|
||||
</div>
|
||||
<div class="px-0">@($"{CRecMSE.extraVal}")</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4" style="max-height: 8rem; max-width: 7rem;">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
|
||||
<div class="w-100">
|
||||
@if (!string.IsNullOrEmpty(IdxMacchSub))
|
||||
{
|
||||
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
|
||||
@IdxMacchSub
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="w-100 fs-4">
|
||||
<div class="text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ART</div>
|
||||
<div class="px-0">@CRecMSE.CodArticolo</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ODL</div>
|
||||
<div class="px-0">@CRecMSE.IdxOdl</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">PODL:</div>
|
||||
<div class="px-0">@CRecMSE.IdxPOdl</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between mt-2 px-0 mx-0">
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
@if (showPodl)
|
||||
{
|
||||
<button class="btn btn-outline-warning py-2 w-100" @onclick="TogglePOdl" title="Hide ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-up"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-warning py-2 w-100 @isDisabled(showDraw)" @onclick="TogglePOdl" title="Show ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mb-2 mx-1 py-2 @CRecMSE.Semaforo rounded" @onclick="ShowDetail">
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="p-0 mr-auto me-1">
|
||||
@CRecMSE.DescrizioneStato
|
||||
</div>
|
||||
<div class="p-0">
|
||||
<div class="px-0">
|
||||
<b>@(FormatDurata(CRecMSE.Durata))</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (enableDisegno)
|
||||
{
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
@if (showDraw)
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {CRecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
<button class="btn btn-outline-info py-2 w-100" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-up"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-info py-2 w-100 @isDisabled(showPodl)" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
<button class="btn btn-secondary py-2 w-100 disabled" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {CRecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-4">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-8 py-1" style="line-height: 1.6rem;">
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"ODL{CRecMSE.IdxOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"PODL{CRecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (enableDisegno && showDraw)
|
||||
else
|
||||
{
|
||||
string docUrl = string.IsNullOrEmpty(CRecMSE.Disegno) ? $"disegni/{CRecMSE.CodArticolo}.pdf" : $"disegni/{CRecMSE.Disegno}.pdf";
|
||||
<div class="bg-light p-1">
|
||||
<PdfDisplay Width="100%" PdfUrl="@docUrl" HeightList="@heightList"></PdfDisplay>
|
||||
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 py-0 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@CRecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@CRecMSE.DescrizioneStato</span>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<b>
|
||||
@(FormatDurata(CRecMSE.Durata))
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {CRecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {CRecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-5">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-7 small py-2" style="line-height: 1.6rem; font-size:0.9rem;">
|
||||
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"ODL{CRecMSE.IdxOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"PODL{CRecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (showPodl)
|
||||
{
|
||||
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="0" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="TogglePOdl" ShowClose="false"></CurrOdlDetail>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="cardObj px-3 py-1 text-sizer">
|
||||
<div class="text-center d-flex justify-content-between align-items-center row">
|
||||
<div class="col-12">
|
||||
<h4 class="text-center mb-0 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-4 fs-4">
|
||||
<div class="lh-1">
|
||||
<div class="text-end text-light fw-bold d-flex justify-content-between border-bottom border-secondary">
|
||||
<div class="px-0">
|
||||
Cicli Prod
|
||||
</div>
|
||||
@if (datiProdAct != null)
|
||||
{
|
||||
<div class="px-0">@($"{datiProdAct.PzTotODL}")</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="px-0">@($"{CRecMSE.PezziProd}")</div>
|
||||
}
|
||||
</div>
|
||||
@if (datiProdAct != null)
|
||||
{
|
||||
@if (datiProdAct.Pz2RecTot > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-warning d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Da Confermare
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.Pz2RecTot}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Da Confermare
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.Pz2RecTot}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (NumScartiConf > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-danger d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Scarti Versati
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{NumScartiConf}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (datiProdAct.PzConfRilav > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-info d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Rilav Versati
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.PzConfRilav}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="text-end text-success d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Buoni Versati
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{datiProdAct.PzConfBuoni}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (CRecMSE.extraVal > 0)
|
||||
{
|
||||
<div class="text-end text-primary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Qta Extra
|
||||
</div>
|
||||
<div class="px-0">@($"{CRecMSE.extraVal}")</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4" style="max-height: 8rem; max-width: 7rem;">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
|
||||
<div class="w-100">
|
||||
@if (!string.IsNullOrEmpty(IdxMacchSub))
|
||||
{
|
||||
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
|
||||
@IdxMacchSub
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="w-100 fs-4">
|
||||
<div class="text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ART</div>
|
||||
<div class="px-0">@CRecMSE.CodArticolo</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ODL</div>
|
||||
<div class="px-0">@CRecMSE.IdxOdl</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">PODL:</div>
|
||||
<div class="px-0">@CRecMSE.IdxPOdl</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between mt-2 px-0 mx-0">
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
@if (showPodl)
|
||||
{
|
||||
<button class="btn btn-outline-warning py-2 w-100" @onclick="TogglePOdl" title="Hide ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-up"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-warning py-2 w-100 @isDisabled(showDraw)" @onclick="TogglePOdl" title="Show ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mb-2 mx-1 py-2 @CRecMSE.Semaforo rounded" @onclick="ShowDetail">
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="p-0 mr-auto me-1">
|
||||
@CRecMSE.DescrizioneStato
|
||||
</div>
|
||||
<div class="p-0">
|
||||
<b>@(FormatDurata(CRecMSE.Durata))</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (enableDisegno)
|
||||
{
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
@if (showDraw)
|
||||
{
|
||||
<button class="btn btn-outline-info py-2 w-100" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-up"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-info py-2 w-100 @isDisabled(showPodl)" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
<button class="btn btn-secondary py-2 w-100 disabled" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (enableDisegno && showDraw)
|
||||
{
|
||||
string docUrl = string.IsNullOrEmpty(CRecMSE.Disegno) ? $"disegni/{CRecMSE.CodArticolo}.pdf" : $"disegni/{CRecMSE.Disegno}.pdf";
|
||||
<div class="bg-light p-1">
|
||||
<PdfDisplay Width="100%" PdfUrl="@docUrl" HeightList="@heightList"></PdfDisplay>
|
||||
</div>
|
||||
}
|
||||
@if (showPodl)
|
||||
{
|
||||
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="0" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="TogglePOdl" ShowClose="false"></CurrOdlDetail>
|
||||
}
|
||||
}
|
||||
@@ -428,16 +428,6 @@ namespace MP_TAB3.Components
|
||||
datiProdAct = SDService.MachProdStGet(IdxMaccCur);
|
||||
}
|
||||
isMulti = SMServ.DictMacchMulti[IdxMaccMain] == 1;
|
||||
#if false
|
||||
if (!string.IsNullOrEmpty(IdxMacchSub))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
//isMulti = false;
|
||||
isMulti = SMServ.DictMacchMulti[IdxMaccMain] == 1;
|
||||
}
|
||||
#endif
|
||||
// verificare
|
||||
if (!FullMode || !detailLoaded || doForce)
|
||||
{
|
||||
|
||||
@@ -136,10 +136,6 @@
|
||||
height: 10rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
.pholderHeight {
|
||||
height: 7rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
@media (max-width: 640.98px) {
|
||||
.imgFitToSize {
|
||||
height: 7.5rem;
|
||||
@@ -147,7 +143,4 @@
|
||||
.card-body {
|
||||
background-color: transparent;
|
||||
}
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
}
|
||||
}
|
||||
@@ -152,7 +152,6 @@
|
||||
--bs-shadow-rgb: var(--bs-dark-rgb);
|
||||
}
|
||||
|
||||
|
||||
.card-body {
|
||||
background-color: currentColor;
|
||||
background-image: linear-gradient(121deg, rgba(255, 255, 255, 0.20) -0.71%, rgba(255, 255, 255, 0.05) 97.66%);
|
||||
@@ -163,11 +162,6 @@
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.pholderHeight {
|
||||
height: 7rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
@media (max-width: 640.98px){
|
||||
.imgFitToSize{
|
||||
height: 7.5rem;
|
||||
@@ -175,9 +169,6 @@
|
||||
.card-body{
|
||||
background-color: transparent;
|
||||
}
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.text-sizer{font-size:1.1rem;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}.pholderHeight{height:7rem;object-fit:cover;}@media(max-width:640.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}.pholderHeight{height:5rem;}}
|
||||
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.text-sizer{font-size:1.1rem;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}@media(max-width:640.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}}
|
||||
@@ -9,6 +9,18 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class NotesMan
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private int durataMinCurr = 5;
|
||||
|
||||
private int durataMinLast = 0;
|
||||
|
||||
private int numGiorniCurr = 3;
|
||||
|
||||
private int numGiorniLast = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
@@ -18,6 +30,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected CommentiModel? currComm { get; set; } = null;
|
||||
protected EventListModel? currEv { get; set; } = null;
|
||||
|
||||
protected int DurataMin
|
||||
@@ -43,11 +56,6 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
#if false
|
||||
[Inject]
|
||||
protected NavigationManager NavMan { get; set; } = null!;
|
||||
#endif
|
||||
|
||||
protected int NumGiorni
|
||||
{
|
||||
get => numGiorniCurr;
|
||||
@@ -88,27 +96,6 @@ namespace MP_TAB3.Components
|
||||
await ReloadData();
|
||||
}
|
||||
|
||||
protected async Task reloadAfterDelOrUpd(bool rel)
|
||||
{
|
||||
if (rel)
|
||||
{
|
||||
await ReloadData();
|
||||
currComm = null;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
|
||||
protected CommentiModel? currComm { get; set; } = null;
|
||||
|
||||
protected async Task setCurrComm(CommentiModel _CurrComm)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
if(_CurrComm != null)
|
||||
{
|
||||
currComm = _CurrComm;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task EditRec(CommentiModel currRec)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
@@ -129,20 +116,27 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task reloadAfterDelOrUpd(bool rel)
|
||||
{
|
||||
if (rel)
|
||||
{
|
||||
await ReloadData();
|
||||
currComm = null;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task setCurrComm(CommentiModel _CurrComm)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
if (_CurrComm != null)
|
||||
{
|
||||
currComm = _CurrComm;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private int durataMinCurr = 5;
|
||||
|
||||
private int durataMinLast = 0;
|
||||
|
||||
private int numGiorniCurr = 3;
|
||||
|
||||
private int numGiorniLast = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private async Task DoUpdate(bool forceReload)
|
||||
|
||||
+318
-321
@@ -12,6 +12,82 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class OdlMan
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool approvTCEnabled = false;
|
||||
|
||||
private bool confRett = true;
|
||||
|
||||
private double currVal = 0;
|
||||
|
||||
private List<string> emailAdmDest = new List<string>();
|
||||
|
||||
private bool enableAnnullaSetup = false;
|
||||
|
||||
private bool enableFixSetup = false;
|
||||
|
||||
private bool enableRiattrezzaggio = false;
|
||||
|
||||
private bool enableRPO = true;
|
||||
|
||||
private bool enableSchedaTecnica = false;
|
||||
|
||||
private bool enableSplitODL = false;
|
||||
|
||||
private int expTimeMsec = 500;
|
||||
|
||||
private bool forceCloseOdl = true;
|
||||
|
||||
private int gPeriodReopenOdlTav = 1;
|
||||
|
||||
private int idxPOdlSel = 0;
|
||||
|
||||
private bool isMaster = false;
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
private bool isProcessing = false;
|
||||
|
||||
private bool isSlave = false;
|
||||
|
||||
private int lastIdxPOdl = 0;
|
||||
|
||||
private string lblOut = "";
|
||||
|
||||
private int MaxVal = 10;
|
||||
|
||||
private int modoConfProd = 0;
|
||||
|
||||
private double nextVal = 0;
|
||||
|
||||
private string noteAttr = "";
|
||||
|
||||
private int numDayOdl = 5;
|
||||
|
||||
private int PzPallet = 0;
|
||||
|
||||
private string searchPodl = "";
|
||||
|
||||
private bool showAll = false;
|
||||
|
||||
private bool showChkCloseOdlVal = false;
|
||||
|
||||
private bool showOdlDetail = false;
|
||||
|
||||
private bool showOdlProvv = false;
|
||||
|
||||
private bool showPOdlData = true;
|
||||
|
||||
private bool showReopenOdlTav = false;
|
||||
|
||||
private bool showSplitOdlOnTav = false;
|
||||
|
||||
private bool showSplitOdlRiattr = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
@@ -180,6 +256,248 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private bool annullaSetupVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = inAttr && enableAnnullaSetup && RecMSE != null && RecMSE.PezziConf == 0;
|
||||
// forzato: se è doppia tavola è SEMPRE false...
|
||||
if (isMulti)
|
||||
{
|
||||
answ = false;
|
||||
}
|
||||
// 2024.04.15 deciso con Gian di togliere la possibilità di annullare su doppia tavola (problema di doppio reset con conferme aperte su altra tavola)
|
||||
//DateTime adesso = DateTime.Now;
|
||||
//if (isMulti)
|
||||
//{
|
||||
// var pUpd = Task.Run(async () =>
|
||||
// {
|
||||
// // controllo ANCHE che la tav correntemente selezionata NON abbia pezzi da confermare
|
||||
// datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccMain, adesso);
|
||||
// answ = datiProdAct.PzConfBuoni == 0 && datiProdAct.Pz2RecScarto == 0;
|
||||
// });
|
||||
// pUpd.Wait();
|
||||
//}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private string baseLang
|
||||
{
|
||||
get => MsgServ.UserPrefGet("Lang");
|
||||
}
|
||||
|
||||
private bool cancelSetupEnabled
|
||||
{
|
||||
//get => InAttr && enableSchedaTecnica && enableAnnullaSetup;
|
||||
get => inAttr && enableAnnullaSetup;
|
||||
}
|
||||
|
||||
private ODLExpModel currOdl { get; set; } = new ODLExpModel();
|
||||
|
||||
private PODLExpModel currPodl { get; set; } = new PODLExpModel();
|
||||
|
||||
private MappaStatoExpl? currRecMSE { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se l'ALTRA macchina NON abbia ODL valido (== 0)
|
||||
/// </summary>
|
||||
private bool emptyOdlAltraMacc
|
||||
{
|
||||
get => IdxOdlAltra == 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se la macchina NON abbia ODL valido (== 0)
|
||||
/// </summary>
|
||||
private bool emptyOdlMacc
|
||||
{
|
||||
get => IdxOdl == 0;
|
||||
}
|
||||
|
||||
private bool endProdDisabled
|
||||
{
|
||||
get => !odlOk || needConfProd;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Variabile idxMacc parent x selezione ODL
|
||||
/// </summary>
|
||||
private string IdxMaccParent { get; set; } = "";
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Valore calcolato key ODL corrente...
|
||||
/// </summary>
|
||||
private int IdxOdl { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Valore calcolato key ODL altra tavola attivo...
|
||||
/// </summary>
|
||||
private int IdxOdlAltra { get; set; } = 0;
|
||||
|
||||
private bool inAttr { get; set; } = false;
|
||||
|
||||
private bool isLoading { get; set; } = false;
|
||||
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
|
||||
private string lblWarnBody
|
||||
{
|
||||
get => odlOk ? Traduci("ConfProdBeforeContinueBody") : Traduci("setOdlBeforeContinueBody");
|
||||
}
|
||||
|
||||
private string lblWarnHead
|
||||
{
|
||||
get => odlOk ? Traduci("ConfProdBeforeContinueHead") : Traduci("setOdlBeforeContinueHead");
|
||||
}
|
||||
|
||||
private int MatrOpr
|
||||
{
|
||||
get => MsgServ.MatrOpr;
|
||||
}
|
||||
|
||||
private bool needConfProd { get; set; } = false;
|
||||
|
||||
private int numPz2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecTot;
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = RecMSE != null ? RecMSE.PezziProd - RecMSE.PezziConf : 0;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private int numRil2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecRilav;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private int numSca2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecScarto;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private bool setupActive { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Verifica visibilità btn riprendi ODL su 2° tavola SE:
|
||||
/// - sia un impianto MULTI (= con + tavole)
|
||||
/// - sia disattrezzata la tavola
|
||||
/// - in tab congif: se sia abilitato la ripresa ODL sulla seconda tavola
|
||||
/// - in tab config: sia il grace period
|
||||
/// - NON SIANO passati i minuti indicati dalla chiusura
|
||||
/// </summary>
|
||||
private bool showReopOdlTav
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
// se è multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se NON HA ODL...
|
||||
if (emptyOdlMacc)
|
||||
{
|
||||
if (!emptyOdlAltraMacc)
|
||||
{
|
||||
// verifico SE siamo nel gracePeriod... chiuso da meno di 1h
|
||||
DateTime adesso = DateTime.Now;
|
||||
DateTime dtChiusura = DateTime.Now.AddHours(-1);
|
||||
try
|
||||
{
|
||||
var lastOdl = TabDServ.OdlLastByMacc(IdxMaccSel, true);
|
||||
if (lastOdl != null)
|
||||
{
|
||||
dtChiusura = lastOdl.DataFine ?? DateTime.Now.AddHours(-1);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
// ora verifico SE E SOLO SE è ANCORA in attrezzaggio ora verifico SE
|
||||
// ALTRA TAVOLA ha ODL...
|
||||
if (dtChiusura.AddMinutes(gPeriodReopenOdlTav) > adesso)
|
||||
{
|
||||
answ = showReopenOdlTav;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica visibilità btn split ODL su 2° tavola SE:
|
||||
/// - sia un impianto MULTI (= con + tavole)
|
||||
/// - sia già attrezzata la prima tavola
|
||||
/// - in tab Congif: se sia abilitato lo split ODL sulla seconda tavola
|
||||
/// - la macchina SIA ANCORA in attrezzaggio (2019.07.08) = 2
|
||||
/// </summary>
|
||||
private bool showSplitOdlOnTavVal
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
// se è multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se NON HA ODL ma ce l'ha altra tavola...
|
||||
if (emptyOdlMacc)
|
||||
{
|
||||
// ora verifico SE ALTRA TAVOLA ha ODL...
|
||||
if (!emptyOdlAltraMacc)
|
||||
{
|
||||
answ = showSplitOdlOnTav;
|
||||
}
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private decimal tcRichAttr { get; set; } = 0;
|
||||
|
||||
private string txtBtnOdlDetail
|
||||
{
|
||||
get => showOdlDetail ? "Nascondi Dettaglio PODL" : "MOSTRA Dettaglio ODL Corrente";
|
||||
}
|
||||
|
||||
private string txtForceCloseOdl
|
||||
{
|
||||
get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL");
|
||||
}
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
@@ -195,10 +513,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected async Task CheckAttr()
|
||||
{
|
||||
#if false
|
||||
// rileggo ODL
|
||||
await updateIdxOdl();
|
||||
#endif
|
||||
// verifico attrezzaggio su macchina corrente o se multi su parent
|
||||
string idxMacc2check = isMulti ? IdxMaccParent : IdxMaccSel;
|
||||
StatoMacchineModel rigaStato = TabDServ.StatoMacchina(idxMacc2check);
|
||||
@@ -1147,323 +1461,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool approvTCEnabled = false;
|
||||
|
||||
private bool confRett = true;
|
||||
|
||||
private double currVal = 0;
|
||||
|
||||
private List<string> emailAdmDest = new List<string>();
|
||||
|
||||
private bool enableAnnullaSetup = false;
|
||||
|
||||
private bool enableFixSetup = false;
|
||||
|
||||
private bool enableRiattrezzaggio = false;
|
||||
|
||||
private bool enableRPO = true;
|
||||
|
||||
private bool enableSchedaTecnica = false;
|
||||
|
||||
private bool enableSplitODL = false;
|
||||
|
||||
private int expTimeMsec = 500;
|
||||
|
||||
private bool forceCloseOdl = true;
|
||||
|
||||
private int gPeriodReopenOdlTav = 1;
|
||||
|
||||
private int idxPOdlSel = 0;
|
||||
|
||||
private bool isMaster = false;
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
private bool isProcessing = false;
|
||||
|
||||
private bool isSlave = false;
|
||||
|
||||
private int lastIdxPOdl = 0;
|
||||
|
||||
private string lblOut = "";
|
||||
|
||||
private int MaxVal = 10;
|
||||
|
||||
private int modoConfProd = 0;
|
||||
|
||||
private double nextVal = 0;
|
||||
|
||||
private string noteAttr = "";
|
||||
|
||||
private int numDayOdl = 5;
|
||||
|
||||
private int PzPallet = 0;
|
||||
|
||||
private string searchPodl = "";
|
||||
|
||||
private bool showAll = false;
|
||||
|
||||
private bool showChkCloseOdlVal = false;
|
||||
|
||||
private bool showOdlDetail = false;
|
||||
|
||||
private bool showOdlProvv = false;
|
||||
|
||||
private bool showPOdlData = true;
|
||||
|
||||
private bool showReopenOdlTav = false;
|
||||
|
||||
private bool showSplitOdlOnTav = false;
|
||||
|
||||
private bool showSplitOdlRiattr = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private bool annullaSetupVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = inAttr && enableAnnullaSetup && RecMSE != null && RecMSE.PezziConf == 0;
|
||||
// forzato: se è doppia tavola è SEMPRE false...
|
||||
if (isMulti)
|
||||
{
|
||||
answ = false;
|
||||
}
|
||||
// 2024.04.15 deciso con Gian di togliere la possibilità di annullare su doppia tavola (problema di doppio reset con conferme aperte su altra tavola)
|
||||
//DateTime adesso = DateTime.Now;
|
||||
//if (isMulti)
|
||||
//{
|
||||
// var pUpd = Task.Run(async () =>
|
||||
// {
|
||||
// // controllo ANCHE che la tav correntemente selezionata NON abbia pezzi da confermare
|
||||
// datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccMain, adesso);
|
||||
// answ = datiProdAct.PzConfBuoni == 0 && datiProdAct.Pz2RecScarto == 0;
|
||||
// });
|
||||
// pUpd.Wait();
|
||||
//}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private string baseLang
|
||||
{
|
||||
get => MsgServ.UserPrefGet("Lang");
|
||||
}
|
||||
|
||||
private bool cancelSetupEnabled
|
||||
{
|
||||
//get => InAttr && enableSchedaTecnica && enableAnnullaSetup;
|
||||
get => inAttr && enableAnnullaSetup;
|
||||
}
|
||||
|
||||
private ODLExpModel currOdl { get; set; } = new ODLExpModel();
|
||||
|
||||
private PODLExpModel currPodl { get; set; } = new PODLExpModel();
|
||||
|
||||
private MappaStatoExpl? currRecMSE { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se l'ALTRA macchina NON abbia ODL valido (== 0)
|
||||
/// </summary>
|
||||
private bool emptyOdlAltraMacc
|
||||
{
|
||||
get => IdxOdlAltra == 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se la macchina NON abbia ODL valido (== 0)
|
||||
/// </summary>
|
||||
private bool emptyOdlMacc
|
||||
{
|
||||
get => IdxOdl == 0;
|
||||
}
|
||||
|
||||
private bool endProdDisabled
|
||||
{
|
||||
get => !odlOk || needConfProd;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Variabile idxMacc parent x selezione ODL
|
||||
/// </summary>
|
||||
private string IdxMaccParent { get; set; } = "";
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Valore calcolato key ODL corrente...
|
||||
/// </summary>
|
||||
private int IdxOdl { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Valore calcolato key ODL altra tavola attivo...
|
||||
/// </summary>
|
||||
private int IdxOdlAltra { get; set; } = 0;
|
||||
|
||||
private bool inAttr { get; set; } = false;
|
||||
|
||||
private bool isLoading { get; set; } = false;
|
||||
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
|
||||
private string lblWarnBody
|
||||
{
|
||||
get => odlOk ? Traduci("ConfProdBeforeContinueBody") : Traduci("setOdlBeforeContinueBody");
|
||||
}
|
||||
|
||||
private string lblWarnHead
|
||||
{
|
||||
get => odlOk ? Traduci("ConfProdBeforeContinueHead") : Traduci("setOdlBeforeContinueHead");
|
||||
}
|
||||
|
||||
private int MatrOpr
|
||||
{
|
||||
get => MsgServ.MatrOpr;
|
||||
}
|
||||
|
||||
private bool needConfProd { get; set; } = false;
|
||||
|
||||
private int numPz2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecTot;
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = RecMSE != null ? RecMSE.PezziProd - RecMSE.PezziConf : 0;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private int numSca2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecScarto;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
private int numRil2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecRilav;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private bool setupActive { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Verifica visibilità btn riprendi ODL su 2° tavola SE:
|
||||
/// - sia un impianto MULTI (= con + tavole)
|
||||
/// - sia disattrezzata la tavola
|
||||
/// - in tab congif: se sia abilitato la ripresa ODL sulla seconda tavola
|
||||
/// - in tab config: sia il grace period
|
||||
/// - NON SIANO passati i minuti indicati dalla chiusura
|
||||
/// </summary>
|
||||
private bool showReopOdlTav
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
// se è multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se NON HA ODL...
|
||||
if (emptyOdlMacc)
|
||||
{
|
||||
if (!emptyOdlAltraMacc)
|
||||
{
|
||||
// verifico SE siamo nel gracePeriod... chiuso da meno di 1h
|
||||
DateTime adesso = DateTime.Now;
|
||||
DateTime dtChiusura = DateTime.Now.AddHours(-1);
|
||||
try
|
||||
{
|
||||
var lastOdl = TabDServ.OdlLastByMacc(IdxMaccSel, true);
|
||||
if (lastOdl != null)
|
||||
{
|
||||
dtChiusura = lastOdl.DataFine ?? DateTime.Now.AddHours(-1);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
// ora verifico SE E SOLO SE è ANCORA in attrezzaggio ora verifico SE
|
||||
// ALTRA TAVOLA ha ODL...
|
||||
if (dtChiusura.AddMinutes(gPeriodReopenOdlTav) > adesso)
|
||||
{
|
||||
answ = showReopenOdlTav;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica visibilità btn split ODL su 2° tavola SE:
|
||||
/// - sia un impianto MULTI (= con + tavole)
|
||||
/// - sia già attrezzata la prima tavola
|
||||
/// - in tab Congif: se sia abilitato lo split ODL sulla seconda tavola
|
||||
/// - la macchina SIA ANCORA in attrezzaggio (2019.07.08) = 2
|
||||
/// </summary>
|
||||
private bool showSplitOdlOnTavVal
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
// se è multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se NON HA ODL ma ce l'ha altra tavola...
|
||||
if (emptyOdlMacc)
|
||||
{
|
||||
// ora verifico SE ALTRA TAVOLA ha ODL...
|
||||
if (!emptyOdlAltraMacc)
|
||||
{
|
||||
answ = showSplitOdlOnTav;
|
||||
}
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private decimal tcRichAttr { get; set; } = 0;
|
||||
|
||||
private string txtBtnOdlDetail
|
||||
{
|
||||
get => showOdlDetail ? "Nascondi Dettaglio PODL" : "MOSTRA Dettaglio ODL Corrente";
|
||||
}
|
||||
|
||||
private string txtForceCloseOdl
|
||||
{
|
||||
get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL");
|
||||
}
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void checkAll()
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<div class="card text-white2 shadow bg-dark p-0 m-0">
|
||||
<div class="card-body rounded rounded-3 py-2">
|
||||
<div class="row">
|
||||
<div class="col-12 placeholder-glow text-center mb-2">
|
||||
<span class="placeholder col-3 fs-2 bg-light"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow">
|
||||
<span class="placeholder text-light col-12"></span>
|
||||
<span class="placeholder text-warning placeholder-sm col-9"></span>
|
||||
<span class="placeholder text-warning placeholder-sm col-2"></span>
|
||||
<span class="placeholder text-success placeholder-sm col-9"></span>
|
||||
<span class="placeholder text-success placeholder-sm col-2"></span>
|
||||
<span class="placeholder text-primary placeholder-sm col-9"></span>
|
||||
<span class="placeholder text-primary placeholder-sm col-2"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow text-center">
|
||||
<span class="placeholder col-6 bg-success pholderHeight rounded rounded-5"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow">
|
||||
<span class="placeholder col-12"></span>
|
||||
<span class="placeholder text-light col-9"></span>
|
||||
<span class="placeholder text-light col-2"></span>
|
||||
<span class="placeholder text-light col-9"></span>
|
||||
<span class="placeholder text-light col-2"></span>
|
||||
<span class="placeholder text-light col-9"></span>
|
||||
<span class="placeholder text-light col-2"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center mt-1">
|
||||
<span class="placeholder placeholder-lg fs-2 col-2 bg-warning"></span>
|
||||
<span class="placeholder placeholder-lg fs-2 col-7 bg-primary"></span>
|
||||
<span class="placeholder placeholder-lg fs-2 col-2 bg-info"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,4 @@
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
.pholderHeight{height:5rem;object-fit:cover;}
|
||||
@@ -0,0 +1,30 @@
|
||||
<div class="cardObj card shadow bg-dark border border-3 border-secondary p-0 rounded rounded-4">
|
||||
<div class="card-body px-1">
|
||||
<div class="row">
|
||||
<div class="col-12 placeholder-glow text-center mb-2">
|
||||
<span class="placeholder col-12 fs-1 bg-secondary"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center mb-2">
|
||||
<span class="placeholder col-12 fs-3 bg-light pholderHeight"></span>
|
||||
<span class="placeholder col-12 fs-3 bg-light pholderHeight"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center">
|
||||
<span class="placeholder col-12 fs-2 bg-success"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center my-1">
|
||||
<span class="placeholder placeholder-lg col-4 bg-success"></span>
|
||||
<span class="placeholder placeholder-lg col-3 bg-danger"></span>
|
||||
<span class="placeholder placeholder-lg col-4 bg-warning"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow text-center">
|
||||
<span class="placeholder col-12 bg-success fs-1 h-100 rounded-circle"></span>
|
||||
</div>
|
||||
<div class="col-8 placeholder-glow">
|
||||
<span class="placeholder small text-light col-9"></span>
|
||||
<span class="placeholder small text-light col-2"></span>
|
||||
<span class="placeholder small text-light col-9"></span>
|
||||
<span class="placeholder small text-light col-2"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,4 @@
|
||||
.pholderHeight {
|
||||
height: 3rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
.pholderHeight {
|
||||
height: 3rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
.pholderHeight{height:3rem;object-fit:cover;}
|
||||
@@ -131,7 +131,7 @@
|
||||
<div class="d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
<i class="fa-solid fa-spinner span fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -148,7 +148,7 @@
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
<i class="fa-solid fa-spinner span fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -165,7 +165,7 @@
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
<i class="fa-solid fa-spinner span fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -182,7 +182,7 @@
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
<i class="fa-solid fa-spinner span fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -199,7 +199,7 @@
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
<i class="fa-solid fa-spinner span fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -8,6 +8,26 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class ProdConfirm
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool chkPzBuoniNeg = false;
|
||||
|
||||
private bool confRett = false;
|
||||
|
||||
private bool enableMagPrint = false;
|
||||
|
||||
private bool enablePzProdLasciati = false;
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
private string lblOut = "";
|
||||
|
||||
private int modoConfProd = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
@@ -155,8 +175,8 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected int numPzProdotti2Rec { get; set; } = 0;
|
||||
|
||||
protected int numPzRilavConf { get; set; } = 0;
|
||||
protected int numPzRilav2Rec { get; set; } = 0;
|
||||
protected int numPzRilavConf { get; set; } = 0;
|
||||
protected int numPzScaConf { get; set; } = 0;
|
||||
|
||||
protected int numPzScarto2Rec { get; set; } = 0;
|
||||
@@ -206,6 +226,31 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private bool confProdActive { get; set; } = false;
|
||||
|
||||
private MappaStatoExpl? currRecMSE { get; set; } = null;
|
||||
|
||||
private DateTime dtReqUpdate { get; set; } = DateTime.Now;
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
|
||||
private bool isProcessing { get; set; } = false;
|
||||
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
|
||||
private int MatrOpr
|
||||
{
|
||||
get => MsgServ.MatrOpr;
|
||||
}
|
||||
|
||||
private int numPzLasc { get; set; } = 0;
|
||||
|
||||
private bool showConfirm { get; set; } = true;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
@@ -274,19 +319,12 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected async Task SalvaConfPz()
|
||||
{
|
||||
int delay = 1;
|
||||
isProcessing = true;
|
||||
Log.Info("Conf 01");
|
||||
// effettua conferma con conf da DB del tipo (giorni / turni / periodo
|
||||
bool fatto = effettuaConfermaProd();
|
||||
await Task.Delay(delay);
|
||||
await TabDServ.FlushCache("StatoProd");
|
||||
await Task.Delay(delay);
|
||||
Log.Info("Conf 02");
|
||||
// refresh tabella dati tablet...
|
||||
await TabDServ.RicalcMse(IdxMaccSel, 0);
|
||||
await Task.Delay(delay);
|
||||
Log.Info("Conf 03");
|
||||
// rileggo e salvo..
|
||||
var ListMSE = await SDService.MseGetAll(true);
|
||||
if (ListMSE != null)
|
||||
@@ -296,22 +334,17 @@ namespace MP_TAB3.Components
|
||||
// aggiorno MSE attuale
|
||||
RecMSE = ListMSE.Find(x => x.IdxMacchina == IdxMaccSel);
|
||||
}
|
||||
await Task.Delay(delay);
|
||||
// mostro output
|
||||
lblOut = $"Confermata produzione {numPzConfermati - numPzLasciati} pezzi (+{numPzLasciati} pz lasciati, +{numPzScarto2Rec} pz scarto) |{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}";
|
||||
// cambio button conferma...
|
||||
confProdActive = false;
|
||||
numPzLasciati = 0;
|
||||
await Task.Delay(delay);
|
||||
dtReqUpdate = DateTime.Now;
|
||||
// azzero cache pezzi conf
|
||||
SDService.MachNumPzSet(IdxMaccSel, -1);
|
||||
await DoUpdate();
|
||||
await Task.Delay(delay);
|
||||
await RefreshData();
|
||||
await Task.Delay(delay);
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
Log.Info("Conf 04");
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
@@ -349,39 +382,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
private bool chkPzBuoniNeg = false;
|
||||
private bool confRett = false;
|
||||
private bool enableMagPrint = false;
|
||||
private bool enablePzProdLasciati = false;
|
||||
private bool isMulti = false;
|
||||
private string lblOut = "";
|
||||
private int modoConfProd = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private bool confProdActive { get; set; } = false;
|
||||
private MappaStatoExpl? currRecMSE { get; set; } = null;
|
||||
private DateTime dtReqUpdate { get; set; } = DateTime.Now;
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private bool isProcessing { get; set; } = false;
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
|
||||
private int MatrOpr
|
||||
{
|
||||
get => MsgServ.MatrOpr;
|
||||
}
|
||||
|
||||
private int numPzLasc { get; set; } = 0;
|
||||
|
||||
private bool showConfirm { get; set; } = true;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -54,14 +54,6 @@ namespace MP_TAB3.Components
|
||||
[Parameter]
|
||||
public timeControlMode modoControllo { get; set; } = timeControlMode.testo;
|
||||
|
||||
#if false
|
||||
/// <summary>
|
||||
/// modalit� controllo tempo
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public timeMode modoTempo { get; set; } = timeMode.MC;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Valore tempo (centesimale)
|
||||
/// </summary>
|
||||
@@ -88,15 +80,12 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// tempo selezionato in formato Minuti Secondi
|
||||
/// </summary>
|
||||
protected DateTime selTempoMS
|
||||
protected int selMin
|
||||
{
|
||||
get => DateTime.Today.Add(TempoMS);
|
||||
get => TempoMS.Minutes;
|
||||
set
|
||||
{
|
||||
TempoMS = value.Subtract(value.Date);
|
||||
TempoMS = new TimeSpan(selOre, value, selSec);
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
@@ -110,15 +99,7 @@ namespace MP_TAB3.Components
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
protected int selMin
|
||||
{
|
||||
get => TempoMS.Minutes;
|
||||
set
|
||||
{
|
||||
TempoMS = new TimeSpan(selOre,value, selSec);
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
|
||||
protected int selSec
|
||||
{
|
||||
get => TempoMS.Seconds;
|
||||
@@ -129,6 +110,19 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// tempo selezionato in formato Minuti Secondi
|
||||
/// </summary>
|
||||
protected DateTime selTempoMS
|
||||
{
|
||||
get => DateTime.Today.Add(TempoMS);
|
||||
set
|
||||
{
|
||||
TempoMS = value.Subtract(value.Date);
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
|
||||
protected bool ShowMS { get; set; } = true;
|
||||
|
||||
[Inject]
|
||||
@@ -162,48 +156,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti centesimali a minuti/secondi
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected TimeSpan minCent2Sec(decimal valore)
|
||||
{
|
||||
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti/secondi a minuti centesimali
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected decimal minSec2Cent(TimeSpan valore)
|
||||
{
|
||||
decimal answ = 0;
|
||||
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
//baseLang = SMServ.GetConf("baseLang");
|
||||
}
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
showControls();
|
||||
}
|
||||
|
||||
protected string Traduci(string lemma)
|
||||
{
|
||||
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string _baseLang { get; set; } = "IT";
|
||||
@@ -278,6 +230,48 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti centesimali a minuti/secondi
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected TimeSpan minCent2Sec(decimal valore)
|
||||
{
|
||||
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti/secondi a minuti centesimali
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected decimal minSec2Cent(TimeSpan valore)
|
||||
{
|
||||
decimal answ = 0;
|
||||
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
//baseLang = SMServ.GetConf("baseLang");
|
||||
}
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
showControls();
|
||||
}
|
||||
|
||||
protected string Traduci(string lemma)
|
||||
{
|
||||
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<Version>6.16.2503.722</Version>
|
||||
<Version>6.16.2503.809</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>MP_TAB3</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -2,22 +2,20 @@ namespace MP_TAB3.Pages
|
||||
{
|
||||
public partial class Controls
|
||||
{
|
||||
#region Public Methods
|
||||
#region Private Fields
|
||||
|
||||
private string IdxMaccSubSel = "";
|
||||
|
||||
#endregion Public Methods
|
||||
private bool IsLoading = false;
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
|
||||
#endregion Protected Properties
|
||||
#endregion Private Fields
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected async Task ForceReload()
|
||||
{
|
||||
IsLoading = true;
|
||||
await Task.Delay(50);
|
||||
await Task.Delay(5);
|
||||
IsLoading = false;
|
||||
}
|
||||
|
||||
@@ -33,19 +31,5 @@ namespace MP_TAB3.Pages
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private string IdxMaccSubSel = "";
|
||||
|
||||
private bool IsLoading = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Methods
|
||||
|
||||
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MAPOSPEC </i>
|
||||
<h4>Versione: 6.16.2503.722</h4>
|
||||
<h4>Versione: 6.16.2503.809</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2503.722
|
||||
6.16.2503.809
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2503.722</version>
|
||||
<version>6.16.2503.809</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -58,5 +58,13 @@
|
||||
{
|
||||
"outputFile": "Components/ProdStopMan.razor.css",
|
||||
"inputFile": "Components/ProdStopMan.razor.less"
|
||||
},
|
||||
{
|
||||
"outputFile": "Components/PlaceholderDetail.razor.css",
|
||||
"inputFile": "Components/PlaceholderDetail.razor.less"
|
||||
},
|
||||
{
|
||||
"outputFile": "Components/PlaceholderStatusMap.razor.css",
|
||||
"inputFile": "Components/PlaceholderStatusMap.razor.less"
|
||||
}
|
||||
]
|
||||
@@ -1,7 +1,6 @@
|
||||
using MP.Data.DatabaseModels;
|
||||
using NLog;
|
||||
using StackExchange.Redis;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
@@ -9,6 +8,17 @@ namespace MP.Data.Services
|
||||
{
|
||||
public class SharedMemService : BaseServ
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
/// <summary>
|
||||
/// Oggetto vocabolario x uso continuo traduzione
|
||||
/// </summary>
|
||||
private List<VocabolarioModel> ObjVocabolario = new List<VocabolarioModel>();
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
@@ -56,6 +66,11 @@ namespace MP.Data.Services
|
||||
/// </summary>
|
||||
public List<AnagEventiModel> ListEventi { get; set; } = new List<AnagEventiModel>();
|
||||
|
||||
/// <summary>
|
||||
/// Lista macchine master2slave stati
|
||||
/// </summary>
|
||||
public List<Macchine2SlaveModel> ListM2S { get; set; } = new List<Macchine2SlaveModel>();
|
||||
|
||||
/// <summary>
|
||||
/// List configurazione attiva da tab DB
|
||||
/// </summary>
|
||||
@@ -66,13 +81,6 @@ namespace MP.Data.Services
|
||||
/// </summary>
|
||||
public List<AnagStatiModel> ListStati { get; set; } = new List<AnagStatiModel>();
|
||||
|
||||
/// <summary>
|
||||
/// Lista macchine master2slave stati
|
||||
/// </summary>
|
||||
public List<Macchine2SlaveModel> ListM2S { get; set; } = new List<Macchine2SlaveModel>();
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Lista completa stati
|
||||
/// </summary>
|
||||
@@ -85,6 +93,12 @@ namespace MP.Data.Services
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private List<LinkMenu> AllMenuData { get; set; } = new List<LinkMenu>();
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
@@ -199,6 +213,12 @@ namespace MP.Data.Services
|
||||
Log.Info("SharedMemService | SetEventi executed!");
|
||||
}
|
||||
|
||||
public void SetM2S(List<Macchine2SlaveModel> newList)
|
||||
{
|
||||
ListM2S = newList ?? new List<Macchine2SlaveModel>();
|
||||
Log.Info("SharedMemService | SetM2S executed!");
|
||||
}
|
||||
|
||||
public void SetMsfd(List<VMSFDModel> newList)
|
||||
{
|
||||
ListMSFD = newList ?? new List<VMSFDModel>();
|
||||
@@ -207,12 +227,6 @@ namespace MP.Data.Services
|
||||
Log.Info("SharedMemService | SetMsfd executed!");
|
||||
}
|
||||
|
||||
public void SetM2S(List<Macchine2SlaveModel> newList)
|
||||
{
|
||||
ListM2S = newList ?? new List<Macchine2SlaveModel>();
|
||||
Log.Info("SharedMemService | SetM2S executed!");
|
||||
}
|
||||
|
||||
public void SetStati(List<AnagStatiModel> allStati)
|
||||
{
|
||||
ListStati = allStati ?? new List<AnagStatiModel>();
|
||||
@@ -282,22 +296,5 @@ namespace MP.Data.Services
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
/// <summary>
|
||||
/// Oggetto vocabolario x uso continuo traduzione
|
||||
/// </summary>
|
||||
private List<VocabolarioModel> ObjVocabolario = new List<VocabolarioModel>();
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private List<LinkMenu> AllMenuData { get; set; } = new List<LinkMenu>();
|
||||
|
||||
#endregion Private Properties
|
||||
}
|
||||
}
|
||||
@@ -373,10 +373,6 @@ namespace MP.Data.Services
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#if false
|
||||
private string redisMseKey = "MP:MON:Cache:MSE";
|
||||
#endif
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -82,6 +82,7 @@ namespace MP.Data.Services
|
||||
/// Evento richiesta rilettura dati pagina (x refresh pagine aperte)
|
||||
/// </summary>
|
||||
public event EventHandler ReloadRequest = delegate { };
|
||||
|
||||
/// <summary>
|
||||
/// Evento report dati invalidati x rilettura
|
||||
/// </summary>
|
||||
@@ -1314,6 +1315,7 @@ namespace MP.Data.Services
|
||||
ReloadRequest.Invoke(this, rea);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invio notifica dati invalidati x impianto
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user