Files
2025-09-09 17:14:58 +02:00

389 lines
12 KiB
C#

using Microsoft.AspNetCore.Components;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using static EgwCoreLib.Utils.DtUtils;
namespace MP_TAB3.Components
{
public partial class ProdConfMan : IDisposable
{
#region Public Properties
[Parameter]
public EventCallback<string> E_MachSel { get; set; }
[Parameter]
public EventCallback<bool> E_Updated { get; set; }
[Parameter]
public string IdxMacchSub { get; set; } = "";
[Parameter]
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Public Methods
public void Dispose()
{
ListComplete.Clear();
ListPaged.Clear();
ListaOdl.Clear();
ListaOper.Clear();
DictOpr.Clear();
}
#endregion Public Methods
#region Protected Properties
protected List<ElencoConfermeProdModel> ListComplete { get; set; } = new List<ElencoConfermeProdModel>();
protected List<ElencoConfermeProdModel> ListPaged { get; set; } = new List<ElencoConfermeProdModel>();
[Inject]
protected MessageService MServ { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
[Inject]
protected TabDataService TabDServ { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
InitConfig();
await ReloadBaseList();
if (RecMSE != null)
{
IdxMaccSel = RecMSE.IdxMacchina;
isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
if (isMulti)
{
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
}
}
await setupPeriodo();
await ReloadData();
}
}
protected async Task SetMacc(string selIdxMacc)
{
isProcessing = true;
await Task.Delay(1);
IdxMaccSel = selIdxMacc;
await ReloadData();
await Task.Delay(1);
isProcessing = false;
await E_MachSel.InvokeAsync(selIdxMacc);
}
protected void SetNumRec(int newNum)
{
NumRecPage = newNum;
UpdateTable();
}
protected async Task SetOdl(int selIdxOdl)
{
isProcessing = true;
IdxOdl = selIdxOdl;
// se ho odl --> imposto periodo
if (IdxOdl > 0)
{
var recOdl = GetOdl(IdxOdl);
if (recOdl != null && recOdl.IdxOdl == IdxOdl)
{
DateTime fine = DateTime.Today.AddDays(1);
DateTime inizio = fine.AddMonths(-1);
CurrPeriodo = new Periodo(recOdl.DataInizio ?? inizio.AddDays(-1), recOdl.DataFine ?? fine);
}
}
// altrimenti reset..
else
{
await setupPeriodo();
}
await ReloadData();
isProcessing = false;
//await Task.Delay(1);
}
protected void SetPage(int newNum)
{
PageNum = newNum;
UpdateTable();
}
protected async Task SetPeriodo(Periodo newPeriodo)
{
CurrPeriodo = newPeriodo;
await ReloadData();
}
protected void UpdateTable()
{
// esegue paginazione
if (TotalCount > NumRecPage)
{
ListPaged = ListComplete
.OrderByDescending(x => x.DataTo)
.Skip((PageNum - 1) * NumRecPage)
.Take(NumRecPage)
.ToList();
}
else
{
ListPaged = ListComplete
.OrderByDescending(x => x.DataTo)
.ToList();
}
}
#endregion Protected Methods
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private Dictionary<int, string> DictOpr = new Dictionary<int, string>();
private bool isMulti = false;
private bool isProcessing = false;
private List<ODLExpModel> ListaOdl = new List<ODLExpModel>();
private List<AnagOperatoriModel> ListaOper = new List<AnagOperatoriModel>();
private int NumRecPage = 10;
private int PageNum = 1;
/// <summary>
/// Indica se mostrare descrizione articolo su 3° riga
/// </summary>
private bool ShowArtDescr = false;
/// <summary>
/// Indica se mostrare CodExt (commessa) su 3° riga
/// </summary>
private bool ShowExtCode = false;
/// <summary>
/// Indica se partire da ultimo ODL x definire ultimo periodo...
/// </summary>
private bool ShowLastOdl = false;
/// <summary>
/// Indica se mostrare rilavorati in conferma produzione
/// </summary>
private bool ShowRilav = false;
private int TotalCount = 0;
private bool useOdl = false;
#endregion Private Fields
#region Private Properties
private Periodo CurrPeriodo { get; set; } = new Periodo();
private string IdxMaccAltra { get; set; } = "";
/// <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;
}
}
/// <summary>
/// Macchina selezionata MAIN
/// </summary>
private string IdxMaccMain
{
get => RecMSE != null ? RecMSE.IdxMacchina : "";
}
private string IdxMaccSel { get; set; } = "";
private int IdxOdl { get; set; } = 0;
private string selMessage
{
get => useOdl ? "Periodo da ODL" : "Periodo Libero";
}
private bool UseOdl
{
get => useOdl;
set
{
useOdl = value;
if (!value)
{
IdxOdl = 0;
}
}
}
#endregion Private Properties
#region Private Methods
private ODLExpModel ActiveOdl(DateTime dtRif)
{
var recOdl = ListaOdl
.Where(x => x.DataInizio <= dtRif && (x.DataFine >= dtRif || x.DataFine == null))
.OrderByDescending(x => x.DataInizio)
.FirstOrDefault();
return recOdl ?? new ODLExpModel();
}
private ODLExpModel GetOdl(int idxOdl)
{
var recOdl = ListaOdl
.Where(x => x.IdxOdl == idxOdl)
.FirstOrDefault();
return recOdl ?? new ODLExpModel();
}
/// <summary>
/// Init da valori configurazione
/// </summary>
private void InitConfig()
{
TabDServ.ConfigGetVal("TAB_confProdPeriodLastODL", ref ShowLastOdl);
TabDServ.ConfigGetVal("TAB_confProdShowRilav", ref ShowRilav);
TabDServ.ConfigGetVal("TAB_confProdShowArtDescr", ref ShowArtDescr);
TabDServ.ConfigGetVal("TAB_confProdShowExtCode", ref ShowExtCode);
}
private string OperDto(int matr)
{
string answ = $"[{matr}]";
// cerco in dizionario
if (DictOpr.ContainsKey(matr))
{
answ = DictOpr[matr];
}
else
{
// altrimenti cerco da lista e inserisco in dizionario
var recOpr = ListaOper.Where(x => x.MatrOpr == matr).FirstOrDefault();
if (recOpr != null)
{
answ = $"{recOpr.Cognome} {recOpr.Nome}";
}
DictOpr.Add(matr, answ);
}
return answ;
}
/// <summary>
/// Rileggo anagrafiche di base
/// </summary>
/// <returns></returns>
private async Task ReloadBaseList()
{
ListaOper = await TabDServ.ElencoOperatori();
}
/// <summary>
/// Aggiorno valori produzione alla data richiesta...
/// </summary>
/// <param name="newDate"></param>
private async Task ReloadData()
{
isProcessing = true;
await Task.Delay(1);
DateTime dtEnd = DateTime.Today.AddDays(1);
DateTime dtStart = dtEnd.AddMonths(-3);
if (!string.IsNullOrEmpty(IdxMaccSel))
{
ListaOdl = await TabDServ.OdlListByMaccPeriodo(IdxMaccSel, dtStart, dtEnd);
// se vuoto prendo 1 anno...
int maxTry = 3;
while (ListaOdl.Count < 1 && maxTry > 0)
{
dtStart = dtStart.AddMonths(-3);
ListaOdl = await TabDServ.OdlListByMaccPeriodo(IdxMaccSel, dtStart, dtEnd);
maxTry--;
}
ListComplete = await TabDServ.ElencoConfProdFiltAsync(IdxMaccSel, CurrPeriodo.Inizio, CurrPeriodo.Fine);
TotalCount = ListComplete.Count;
// esegue paginazione
UpdateTable();
}
isProcessing = false;
}
private async Task setupPeriodo()
{
bool doSet = true;
if (ShowLastOdl)
{
UseOdl = true;
var LastODL = await TabDServ.VSOdlGetLastByMacc(IdxMaccSel, 1);
if (LastODL != null)
{
var recOdl = LastODL
.Where(x => x.value > 0)
.FirstOrDefault();
if (recOdl != null)
{
var idxOdlLast = recOdl.value;
await SetOdl(idxOdlLast);
doSet = false;
}
}
}
// controllo di nuovo se impostare priodo
if (doSet)
{
DateTime fine = DateTime.Today.AddDays(1);
DateTime inizio = fine.AddMonths(-1);
CurrPeriodo = new Periodo(inizio, fine);
}
}
#endregion Private Methods
}
}