TAB3: fix dati null

- Update  aggiornamento MSE durante setup ODL inibito
This commit is contained in:
Samuele Locatelli
2025-03-13 12:56:45 +01:00
parent 4e5910b0be
commit 16c2767c09
5 changed files with 333 additions and 331 deletions
+329 -327
View File
@@ -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()
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>6.16.2503.1309</Version>
<Version>6.16.2503.1312</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB3</RootNamespace>
</PropertyGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2503.1309</h4>
<h4>Versione: 6.16.2503.1312</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2503.1309
6.16.2503.1312
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2503.1309</version>
<version>6.16.2503.1312</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>