Merge branch 'Release/MpTab_DP_02'
This commit is contained in:
@@ -78,8 +78,30 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il codice IdxMacchina dell'impianto PARENT (se multi) altrimenti la stessa macchina...
|
||||
/// </summary>
|
||||
protected string getIdxMaccParent()
|
||||
{
|
||||
string answ = IdxMaccSel;
|
||||
// se fosse multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
int iSharp = IdxMaccSel.IndexOf('#');
|
||||
if (iSharp > 0)
|
||||
{
|
||||
// sistemo nome
|
||||
answ = IdxMaccSel.Substring(0, iSharp);
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await Task.Delay(1);
|
||||
@@ -87,7 +109,7 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
enableControlli = SMServ.GetConfBool("enableControlli");
|
||||
IdxMaccSel = RecMSE.IdxMacchina;
|
||||
bool isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
|
||||
isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
|
||||
if (isMulti)
|
||||
{
|
||||
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
|
||||
@@ -103,7 +125,44 @@ namespace MP_TAB3.Components
|
||||
await doUpdate();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Macchina selezionata MAIN
|
||||
/// </summary>
|
||||
private string IdxMaccMain
|
||||
{
|
||||
get => RecMSE != null ? RecMSE.IdxMacchina : "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
|
||||
/// </summary>
|
||||
private string idxMaccAltraTav
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (RecMSE != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
int iSharp = IdxMaccMain.IndexOf('#');
|
||||
if (iSharp > 0)
|
||||
{
|
||||
// ora verifico SE ALTRA TAVOLA ha ODL...
|
||||
string nomeTav = IdxMaccMain.Substring(iSharp);
|
||||
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
|
||||
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
|
||||
// sistemo nome
|
||||
answ = IdxMaccMain.Replace(nomeTav, altraTav);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
protected async Task SaveKo()
|
||||
{
|
||||
isProcessing = true;
|
||||
@@ -112,6 +171,17 @@ namespace MP_TAB3.Components
|
||||
showNote = false;
|
||||
await doUpdate();
|
||||
await E_Updated.InvokeAsync(false);
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(100);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
Log.Info("Registrazione SaveKo x controllo pezzo");
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
@@ -129,6 +199,17 @@ namespace MP_TAB3.Components
|
||||
showNote = false;
|
||||
await doUpdate();
|
||||
await E_Updated.InvokeAsync(true);
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(100);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
Log.Info("Registrazione SaveOk x controllo pezzo");
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
@@ -144,8 +225,8 @@ namespace MP_TAB3.Components
|
||||
await Task.Delay(1);
|
||||
IdxMaccSel = selIdxMacc;
|
||||
await doUpdate();
|
||||
isProcessing = false;
|
||||
await Task.Delay(1);
|
||||
isProcessing = false;
|
||||
await E_MachSel.InvokeAsync(selIdxMacc);
|
||||
}
|
||||
|
||||
@@ -222,6 +303,7 @@ namespace MP_TAB3.Components
|
||||
private Periodo CurrPeriodo { get; set; } = new Periodo();
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private string IdxMaccAltra { get; set; } = "";
|
||||
|
||||
private int IdxOdl { get; set; } = 0;
|
||||
|
||||
|
||||
@@ -66,11 +66,11 @@ else
|
||||
</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 class="px-1">@($"{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 class="px-1">@($"{CRecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -122,22 +122,21 @@ else
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-5">
|
||||
<div class="col-5 px-0">
|
||||
<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="col-7 small py-1 px-0">
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1 small">ART:</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 class="text-center text-light d-flex justify-content-between lh-sm">
|
||||
<div class="px-1 small">ODL:</div>
|
||||
<div class="px-1">@($"{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 class="text-center text-light d-flex justify-content-between lh-sm">
|
||||
<div class="px-1 small">PODL:</div>
|
||||
<div class="px-1">@($"{CRecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -402,9 +402,11 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
// se riceve evento relativo a questo impianto --> ricarico dati prod...
|
||||
detailLoaded = false;
|
||||
Log.Info("TabDServ_DataInvalidated: Reload Data");
|
||||
// carico dettagli
|
||||
await loadDetails();
|
||||
setGaugeVals();
|
||||
//await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+329
-327
@@ -12,82 +12,6 @@ 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]
|
||||
@@ -106,7 +30,7 @@ namespace MP_TAB3.Components
|
||||
set
|
||||
{
|
||||
// salvo SOLO SE non sono in conferma
|
||||
if (!setupActive)
|
||||
if (!setupActive && !isProcessing)
|
||||
{
|
||||
currRecMSE = value;
|
||||
}
|
||||
@@ -256,248 +180,6 @@ 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>
|
||||
@@ -574,11 +256,11 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 10;
|
||||
isProcessing = true;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
|
||||
@@ -661,12 +343,12 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
MaxVal = 3;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
// chiamo stored x riprendere ODL (toglie data chiusura...)
|
||||
var rowRes = await TabDServ.OdlReopenOdlMacc(IdxMaccSel);
|
||||
if (rowRes != null && rowRes.IdxOdl > 0)
|
||||
@@ -689,6 +371,7 @@ namespace MP_TAB3.Components
|
||||
await FlushMpIoOdlCache();
|
||||
// chiudo update...
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -702,12 +385,12 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
MaxVal = 3;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
// se ho ODL su altra macchina...
|
||||
if (IdxOdlAltra > 0)
|
||||
{
|
||||
@@ -729,6 +412,7 @@ namespace MP_TAB3.Components
|
||||
await advStep(currStep++);
|
||||
// chiudo update...
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -744,13 +428,13 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 8;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
await confermaProdOdl(true);
|
||||
await advStep(currStep++);
|
||||
// se vedesse TCRich a zero lo reimposta a quello assegnato...
|
||||
@@ -865,6 +549,7 @@ namespace MP_TAB3.Components
|
||||
MaxVal = 11;
|
||||
int currStep = 0;
|
||||
// elimino dati status...
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
SDService.MachProdStRem(IdxMaccParent);
|
||||
|
||||
@@ -880,7 +565,6 @@ namespace MP_TAB3.Components
|
||||
{ }
|
||||
}
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
DateTime adesso = DateTime.Now;
|
||||
await advStep(currStep++);
|
||||
// proseguo
|
||||
@@ -1085,7 +769,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
if (!setupActive)
|
||||
if (!setupActive && !isProcessing)
|
||||
{
|
||||
if (RecMSE != null && !RecMSE.MostlyEquals(lastRecMSE))
|
||||
{
|
||||
@@ -1122,11 +806,11 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 7;
|
||||
isProcessing = true;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
// leggo idxOdl da ultimo odl attivo x macchina
|
||||
@@ -1387,13 +1071,13 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 9;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
|
||||
// se vedesse TCRich a zero lo reimposta a quello assegnato...
|
||||
if (tcRichAttr == 0)
|
||||
@@ -1461,6 +1145,324 @@ 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 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 Private Methods
|
||||
|
||||
private void checkAll()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<Version>6.16.2503.1309</Version>
|
||||
<Version>6.16.2503.1314</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>MP_TAB3</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MAPOSPEC </i>
|
||||
<h4>Versione: 6.16.2503.1309</h4>
|
||||
<h4>Versione: 6.16.2503.1314</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2503.1309
|
||||
6.16.2503.1314
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2503.1309</version>
|
||||
<version>6.16.2503.1314</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>
|
||||
|
||||
@@ -138,7 +138,15 @@ article {
|
||||
* {
|
||||
font-size: 15px;
|
||||
}
|
||||
@media (max-width: 450.98) {
|
||||
@media (max-width: 450) {
|
||||
* {
|
||||
font-size: 13px;
|
||||
}
|
||||
.longStopListNotes {
|
||||
max-height: 120px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
* {
|
||||
font-size: 14px;
|
||||
}
|
||||
@@ -146,17 +154,9 @@ article {
|
||||
max-height: 120px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 601.98px) {
|
||||
* {
|
||||
font-size: 16px;
|
||||
}
|
||||
.longStopListNotes {
|
||||
max-height: 120px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
* {
|
||||
font-size: 18px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.top-row:not(.auth) {
|
||||
display: none;
|
||||
|
||||
@@ -158,9 +158,9 @@ a, .btn-link {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
@media (max-width: 450.98) {
|
||||
@media (max-width: 450) {
|
||||
* {
|
||||
font-size: 14px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.longStopListNotes {
|
||||
@@ -169,9 +169,9 @@ a, .btn-link {
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 601.98px) {
|
||||
@media (max-width: 600px) {
|
||||
* {
|
||||
font-size: 16px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.longStopListNotes {
|
||||
max-height: 120px;
|
||||
@@ -180,7 +180,7 @@ a, .btn-link {
|
||||
|
||||
@media (max-width: 800px) {
|
||||
* {
|
||||
font-size: 18px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.top-row:not(.auth) {
|
||||
display: none;
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');html,body{font-family:'Open Sans Condensed',sans-serif;background-color:#151321;color:#ededed;}.cardObj{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardObjNoBL{border-radius:.375rem 0 0 .375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardFullHeight{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;height:100%;}.longStopListNotes{height:100%;}.borderStd{border-radius:.375rem;}.table-dark{--bs-table-color:#fff;--bs-table-bg:transparent;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color);}h1:focus{outline:0;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.top-row{background-color:#05173d;justify-content:flex-end;height:3.5rem;display:flex;align-items:center;}.top-row ::deep a,.top-row ::deep .btn-link{white-space:nowrap;text-decoration:none;}.top-row ::deep a:hover,.top-row ::deep .btn-link:hover{text-decoration:underline;}.top-row ::deep a:first-child{overflow:hidden;text-overflow:ellipsis;}.top-row{position:sticky;top:0;z-index:1;}.top-row.auth ::deep a:first-child{flex:1;text-align:right;width:0;}.top-row,article{padding-left:1rem!important;padding-right:.5rem!important;}*{font-size:15px;}@media(max-width:450.98){*{font-size:14px;}.longStopListNotes{max-height:120px;}}@media(max-width:601.98px){*{font-size:16px;}.longStopListNotes{max-height:120px;}}@media(max-width:800px){*{font-size:18px;}.top-row:not(.auth){display:none;}#mainBody{width:100%;}.top-row.auth{justify-content:space-between;}.top-row ::deep a,.top-row ::deep .btn-link{margin-left:0;}}
|
||||
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');html,body{font-family:'Open Sans Condensed',sans-serif;background-color:#151321;color:#ededed;}.cardObj{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardObjNoBL{border-radius:.375rem 0 0 .375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardFullHeight{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;height:100%;}.longStopListNotes{height:100%;}.borderStd{border-radius:.375rem;}.table-dark{--bs-table-color:#fff;--bs-table-bg:transparent;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color);}h1:focus{outline:0;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.top-row{background-color:#05173d;justify-content:flex-end;height:3.5rem;display:flex;align-items:center;}.top-row ::deep a,.top-row ::deep .btn-link{white-space:nowrap;text-decoration:none;}.top-row ::deep a:hover,.top-row ::deep .btn-link:hover{text-decoration:underline;}.top-row ::deep a:first-child{overflow:hidden;text-overflow:ellipsis;}.top-row{position:sticky;top:0;z-index:1;}.top-row.auth ::deep a:first-child{flex:1;text-align:right;width:0;}.top-row,article{padding-left:1rem!important;padding-right:.5rem!important;}*{font-size:15px;}@media(max-width:450){*{font-size:13px;}.longStopListNotes{max-height:120px;}}@media(max-width:600px){*{font-size:14px;}.longStopListNotes{max-height:120px;}}@media(max-width:800px){*{font-size:16px;}.top-row:not(.auth){display:none;}#mainBody{width:100%;}.top-row.auth{justify-content:space-between;}.top-row ::deep a,.top-row ::deep .btn-link{margin-left:0;}}
|
||||
Reference in New Issue
Block a user