Merge branch 'release/FixDP_03'

This commit is contained in:
Samuele E. Locatelli
2025-03-08 09:11:24 +01:00
28 changed files with 892 additions and 903 deletions
-11
View File
@@ -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)
+297 -330
View File
@@ -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>&nbsp; @($" {CRecMSE.PezziConf}") &nbsp;
</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>&nbsp; @($" {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>&nbsp; @($" {CRecMSE.PezziConf}") &nbsp;
</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>&nbsp; @($" {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>&nbsp; @($" {CRecMSE.PezziConf}") &nbsp;
</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>&nbsp; @($" {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>&nbsp; @($" {CRecMSE.PezziConf}") &nbsp;
</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>&nbsp; @($" {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>
}
}
-10
View File
@@ -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
View File
@@ -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;}}
+32 -38
View File
@@ -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
View File
@@ -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;
}
+1
View File
@@ -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;
}
+1
View File
@@ -0,0 +1 @@
.pholderHeight{height:3rem;object-fit:cover;}
+5 -5
View File
@@ -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
{
+46 -46
View File
@@ -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>
+59 -65
View File
@@ -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>
+1 -1
View File
@@ -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>
+5 -21
View File
@@ -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 -1
View File
@@ -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
View File
@@ -1 +1 @@
6.16.2503.722
6.16.2503.809
+1 -1
View File
@@ -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>
+8
View File
@@ -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"
}
]
+28 -31
View File
@@ -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
}
}
-4
View File
@@ -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>
+2
View File
@@ -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>