Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop
This commit is contained in:
@@ -150,7 +150,7 @@ namespace MP_TAB_SERV.Components
|
||||
ListSelODL = await TabDServ.VSOdlGetUnused(IdxMaccCurr, ShowAll, numDayOdl);
|
||||
DateTime dateTo = DateTime.Today.AddDays(1);
|
||||
DateTime dateFrom = dateTo.AddMonths(-1);
|
||||
ListComplete = await TabDServ.OdlListByMacc(IdxMaccCurr, dateFrom, dateTo);
|
||||
ListComplete = await TabDServ.OdlListByMaccPeriodo(IdxMaccCurr, dateFrom, dateTo);
|
||||
TotalCount = ListComplete.Count;
|
||||
// esegue paginazione
|
||||
UpdateTable();
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
<div class="col-12 col-md-6 mb-2">
|
||||
<div class="input-group input-group-lg">
|
||||
<input type="text" class="form-control w-25" placeholder="Cerca" aria-label="Cerca">
|
||||
<select class="form-select w-50" @bind="IdxOdlSel">
|
||||
<select class="form-select w-50" @bind="IdxPOdlSel">
|
||||
@foreach (var item in ListODL)
|
||||
{
|
||||
<option value="@item.value">@item.label</option>
|
||||
@@ -147,23 +147,29 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
@if (idxOdlSel > 0)
|
||||
@if (idxPOdlSel > 0)
|
||||
{
|
||||
<button class="btn btn-lg btn-primary w-100"><i class="fa-solid fa-check me-1"></i> INIZIO Attrezzaggio</button>
|
||||
<button class="btn btn-lg btn-primary w-100" @onclick="StartSetup"><i class="fa-solid fa-check me-1"></i> INIZIO Attrezzaggio</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-lg btn-outline-warning w-100" disabled="@isInAttr" @onclick="togOdlDetail"><i class="fa-solid fa-star me-1"></i> Dettaglio ODL</button>
|
||||
}
|
||||
</div>
|
||||
@if (idxOdlSel > 0)
|
||||
@if (idxPOdlSel > 0)
|
||||
{
|
||||
<div class="col-12 col-sm-6">
|
||||
<label class="form-label">note Attrezzaggio</label>
|
||||
<textarea class="form-control" rows="3" @bind="@noteAttr"></textarea>
|
||||
</div>
|
||||
<div class="col-12 col-sm-6">
|
||||
<SelTempoMSMC TempoMC="@tcRichAttr" modoControllo="SelTempoMSMC.timeControlMode.selettori"></SelTempoMSMC>
|
||||
<SelTempoMSMC TempoMC="@tcRichAttr" modoControllo="SelTempoMSMC.timeControlMode.selettori" E_TCRich="SaveTCRich"></SelTempoMSMC>
|
||||
<select class="form-select" @bind="PzPallet">
|
||||
@for (int i = 1; i <= 20; i++)
|
||||
{
|
||||
<option value="@i">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@ using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using static MP.Data.Objects.Enums;
|
||||
using static StackExchange.Redis.Role;
|
||||
using System.Text;
|
||||
|
||||
namespace MP_TAB_SERV.Components
|
||||
{
|
||||
@@ -30,14 +33,14 @@ namespace MP_TAB_SERV.Components
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected int IdxOdlSel
|
||||
protected int IdxPOdlSel
|
||||
{
|
||||
get => idxOdlSel;
|
||||
get => idxPOdlSel;
|
||||
set
|
||||
{
|
||||
if (idxOdlSel != value)
|
||||
if (idxPOdlSel != value)
|
||||
{
|
||||
idxOdlSel = value;
|
||||
idxPOdlSel = value;
|
||||
showOdlDetail = value > 0;
|
||||
var pUpd = Task.Run(async () =>
|
||||
{
|
||||
@@ -54,6 +57,9 @@ namespace MP_TAB_SERV.Components
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
[Inject]
|
||||
protected MessageService MServ { get; set; } = null!;
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
[Inject]
|
||||
protected MessageService MServ { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Verifica ODL OK (ovvero caricato x macchina...)
|
||||
@@ -105,7 +111,7 @@ namespace MP_TAB_SERV.Components
|
||||
protected string getIdxMaccParent()
|
||||
{
|
||||
string answ = IdxMaccSel;
|
||||
// se è multi controllo
|
||||
// se � multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
@@ -123,6 +129,9 @@ namespace MP_TAB_SERV.Components
|
||||
{
|
||||
//baseLang = SMServ.GetConf("baseLang");
|
||||
numDayOdl = SMServ.GetConfInt("numDaySelOdl");
|
||||
confRett = SMServ.GetConfBool("confRett");
|
||||
enableSplitODL = SMServ.GetConfBool("enableSplitODL");
|
||||
modoConfProd = SMServ.GetConfInt("modoConfProd");
|
||||
if (RecMSE != null)
|
||||
{
|
||||
IdxMaccSel = RecMSE.IdxMacchina;
|
||||
@@ -131,6 +140,9 @@ namespace MP_TAB_SERV.Components
|
||||
}
|
||||
checkAll();
|
||||
}
|
||||
private bool enableSplitODL = false;
|
||||
private int modoConfProd = 0;
|
||||
private bool confRett = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
@@ -138,6 +150,11 @@ namespace MP_TAB_SERV.Components
|
||||
await ReloadData(false);
|
||||
}
|
||||
|
||||
protected void SaveTCRich(double newTCRich)
|
||||
{
|
||||
tcRichAttr = newTCRich;
|
||||
}
|
||||
|
||||
protected async Task SetMacc(string selIdxMacc)
|
||||
{
|
||||
isProcessing = true;
|
||||
@@ -148,6 +165,246 @@ namespace MP_TAB_SERV.Components
|
||||
await Task.Delay(10);
|
||||
}
|
||||
|
||||
private int MatrOpr
|
||||
{
|
||||
get => MServ.MatrOpr;
|
||||
}
|
||||
/// <summary>
|
||||
/// verifica se sia necessario confermare la prod dell'ODL precedente prima di chiudere e lo fa in automatico...
|
||||
/// </summary>
|
||||
/// <param name="confZero">boolean, true = deve confermare 0 pezzi (es. in setup)</param>
|
||||
private async Task confermaProdOdl(bool confZero)
|
||||
{
|
||||
// 2016.11.17 NOTA: introdotti scarti, li confermiamo SEMPRE a zero se in setup, per� da valutare SE a FINE ATTREZZAGGIO chiedere num pezzi e num scarti (saldo zero buoni) da inserire...
|
||||
bool fatto = false;
|
||||
DateTime adesso = DateTime.Now;
|
||||
if (confZero)
|
||||
{
|
||||
// confermo produzione ZERO pezzi (in setup)
|
||||
if (confRett)
|
||||
{
|
||||
// confermo al netto dei pezzi lasciati...
|
||||
fatto = TabDServ.ConfermaProdMacchinaFull(IdxMaccSel, modoConfProd, 0, 0, 0, adesso, MatrOpr);
|
||||
}
|
||||
else
|
||||
{
|
||||
fatto = TabDServ.ConfermaProdMacchina(IdxMaccSel, modoConfProd, 0, 0, adesso, MatrOpr);
|
||||
}
|
||||
}
|
||||
else // se NON sono in setup verifico se ho pz da confermare
|
||||
{
|
||||
// recupero pz da confermare
|
||||
var rawData = await TabDServ.PezziProdMacchina(IdxMaccSel);
|
||||
prodMacchina = rawData.FirstOrDefault() ?? new PzProdModel();
|
||||
if (prodMacchina.pezziNonConfermati > 0)
|
||||
{
|
||||
// confermo produzione ZERO pezzi (in setup)
|
||||
if (confRett)
|
||||
{
|
||||
// confermo al netto dei pezzi lasciati...
|
||||
fatto = TabDServ.ConfermaProdMacchinaFull(IdxMaccSel, modoConfProd, prodMacchina.pezziNonConfermati, 0, 0, adesso, MatrOpr);
|
||||
}
|
||||
else
|
||||
{
|
||||
fatto = TabDServ.ConfermaProdMacchina(IdxMaccSel, modoConfProd, prodMacchina.pezziNonConfermati, 0, adesso, MatrOpr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected int PzPallet = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Dichiarazione inizio attrezzaggio PODL indicato
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected async Task StartSetup()
|
||||
{
|
||||
/***************************************************
|
||||
* comprende gestione machineSlave x fix ODL master --> slave
|
||||
*
|
||||
***************************************************/
|
||||
|
||||
bool inAttr = false;
|
||||
// se � multi mi chiedo se sia DAVVERO in attrezzaggio...
|
||||
if (isMulti)
|
||||
{
|
||||
try
|
||||
{
|
||||
// controllo se NON SONO gi� in attrezzaggio...
|
||||
var rigaStato = TabDServ.StatoMacchina(IdxMaccParent);
|
||||
inAttr = (rigaStato.IdxStato == 2);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
// proseguo
|
||||
int idxODL_curr = 0;
|
||||
await confermaProdOdl(false);
|
||||
if (IdxPOdlSel > 0)
|
||||
{
|
||||
// se vedesse TCRich a zero lo reimposta a quello assegnato...
|
||||
if (tcRichAttr == 0)
|
||||
{
|
||||
tcRichAttr = (double)currPodl.Tcassegnato;
|
||||
}
|
||||
if (enableSplitODL)
|
||||
{
|
||||
// splitto VECCHIO ODL (se � rimasto qualcosa da produrre e se ce ne � rimasto uno.......)
|
||||
try
|
||||
{
|
||||
var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel);
|
||||
if (currOdl != null && currOdl.Count > 0)
|
||||
{
|
||||
int idxODLTemp = currOdl[0].IdxOdl;
|
||||
decimal tcAss = currOdl[0].Tcassegnato;
|
||||
await TabDServ.OdlSplit(idxODLTemp, MatrOpr, IdxMaccSel, tcAss, PzPallet, $"inizio attrezzaggio, Sospensione ODL {idxODLTemp}, generato residuo con pari TCiclo: {tcAss}", false, 0);
|
||||
}
|
||||
// se � multi processo ANCHE x altra tavola...
|
||||
if (isMulti)
|
||||
{
|
||||
#if false
|
||||
int _idxOdl = DataLayerObj.taODL.getByMacchina(idxMaccAltraTav)[0].IdxODL;
|
||||
DataLayerObj.taODL.splitODL(_idxOdl, DataLayerObj.MatrOpr, idxMaccAltraTav, TCAssegnato(_idxOdl), PzPallet, string.Format("inizio attrezzaggio, Sospensione ODL {0}, generato residuo con pari TCiclo: {1}", _idxOdl, TCAssegnato(_idxOdl)), false, 0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
#if false
|
||||
// 2018.07.24 verifico se devo lavorare come ODL classico o come RPO (Richiesta / Promessa / ODL)
|
||||
if (enableRPO)
|
||||
{
|
||||
// creo nuovo ODL da promessa ed associo
|
||||
DateTime adesso = DateTime.Now;
|
||||
DataLayerObj.taODL.inizioSetupPromessa(idxODLSel, DataLayerObj.MatrOpr, idxMacchinaFix, TCRichAttr, PzPallet, txtNote.Text, adesso);
|
||||
// salvo ODL attrezzato
|
||||
idxODL_curr = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0].IdxODL;
|
||||
}
|
||||
// ODL classico
|
||||
else
|
||||
{
|
||||
// avvio NUOVO ODL
|
||||
DataLayerObj.taODL.inizioSetup(idxODLSel, DataLayerObj.MatrOpr, idxMacchinaFix, TCRichAttr, PzPallet, txtNote.Text);
|
||||
// salvo ODL Current
|
||||
idxODL_curr = idxODLSel;
|
||||
}
|
||||
// process evento
|
||||
int idxEvento = 2; // !!!HARD CODED
|
||||
string evText = "Registrato inizio attrezzaggio per ODL {0}";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine(String.Format(evText, idxODL_curr));
|
||||
processaEvento(idxMacchinaFix, idxEvento, sb.ToString(), idxODL_curr);
|
||||
// indico INIZIO SETUP su REDIS come EXE della macchina...
|
||||
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
|
||||
string outData = $"TS:{ts}|MATR:{DataLayerObj.MatrOpr}|ODL:{idxODL_curr}";
|
||||
// aggiungo articolo, commessa, richiesta pezzi...
|
||||
try
|
||||
{
|
||||
var datiODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0];
|
||||
string setArtVal = $"{datiODL.CodArticolo}";
|
||||
string setPzCommVal = $"{datiODL.NumPezzi}";
|
||||
string setCommVal = $"ODL{datiODL.IdxODL:00000000}";
|
||||
// FIXME TODO: scrivere come sotto? testare valvital x linea LASCO
|
||||
DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.startSetup, outData);
|
||||
DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setArt, setArtVal);
|
||||
DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setComm, setCommVal);
|
||||
DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setPzComm, setPzCommVal);
|
||||
DataLayerObj.updateMachineParameter(idxMacchinaFix, "setArt", setArtVal);
|
||||
DataLayerObj.updateMachineParameter(idxMacchinaFix, "setComm", setCommVal);
|
||||
DataLayerObj.updateMachineParameter(idxMacchinaFix, "setPzComm", setPzCommVal);
|
||||
DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setParameter, "ForceUpdate");
|
||||
// li aggiungo ANCHE sui PLC slave se ci sono...
|
||||
if (isMaster)
|
||||
{
|
||||
// calcolo gli slave...
|
||||
var slaveList = DataLayerObj.taM2S.getByMaster(idxMacchina);
|
||||
foreach (var machine in slaveList)
|
||||
{
|
||||
outData = $"TS:{ts}|MATR:{DataLayerObj.MatrOpr}|Master Machine: {idxMacchinaFix}";
|
||||
// invio chiusura attrezzaggio
|
||||
DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.startSetup, outData);
|
||||
DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal);
|
||||
DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal);
|
||||
DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal);
|
||||
DataLayerObj.updateMachineParameter(machine.IdxMacchinaSlave, "setArt", setArtVal);
|
||||
DataLayerObj.updateMachineParameter(machine.IdxMacchinaSlave, "setComm", setCommVal);
|
||||
DataLayerObj.updateMachineParameter(machine.IdxMacchinaSlave, "setPzComm", setPzCommVal);
|
||||
DataLayerObj.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
// se � multi CHIUDO ODL x altra tavola...
|
||||
if (isMulti)
|
||||
{
|
||||
// se NON sono in attrezzaggio...
|
||||
if (!inAttr)
|
||||
{
|
||||
int idxOdlAltra = 0;
|
||||
try
|
||||
{
|
||||
var tabOdl = DataLayerObj.taODL.getByMacchina(idxMaccAltraTav);
|
||||
if (tabOdl.Rows.Count > 0)
|
||||
{
|
||||
idxOdlAltra = DataLayerObj.taODL.getByMacchina(idxMaccAltraTav)[0].IdxODL;
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog("Durante recupero idxOdlAltra " + exc.ToString(), tipoLog.EXCEPTION);
|
||||
}
|
||||
// procedo se ho ODL
|
||||
if (idxOdlAltra > 0)
|
||||
{
|
||||
sb.AppendLine("---");
|
||||
DataLayerObj.taODL.fineProd(idxOdlAltra, idxMaccAltraTav);
|
||||
evText = "Registrato inizio attrezzaggio per ODL {0} (setup seconda tavola)";
|
||||
sb.AppendLine(String.Format(evText, idxOdlAltra));
|
||||
processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
|
||||
}
|
||||
lblOut.Text = sb.ToString().Replace("---", "<br/>");
|
||||
}
|
||||
// update buttons...
|
||||
checkAll();
|
||||
}
|
||||
// se � master --> chiamo update child!
|
||||
if (isMaster)
|
||||
{
|
||||
DataLayerObj.taODL.fixMachineSlave(idxMacchina, 30, 1);
|
||||
}
|
||||
// resetto contapezzi redis...
|
||||
DataLayerObj.saveCounter(idxMacchinaFix, "0");
|
||||
// imposto ODL su redis...
|
||||
DataLayerObj.saveCurrODL(idxMacchinaFix, idxODL_curr.ToString());
|
||||
// salvo odl selezionato
|
||||
idxOdl = idxODL_curr;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if false
|
||||
lblOut.Text = "Selezionare un ORDINE valido!";
|
||||
#endif
|
||||
}
|
||||
|
||||
#if false
|
||||
// refresh finale
|
||||
checkBtnStatus();
|
||||
fixSplitBtn(false);
|
||||
// sollevo evento!
|
||||
if (eh_reqUpdate != null)
|
||||
{
|
||||
eh_reqUpdate(this, new EventArgs());
|
||||
}
|
||||
#endif
|
||||
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
protected void togOdlDetail()
|
||||
{
|
||||
showOdlDetail = !showOdlDetail;
|
||||
@@ -178,6 +435,7 @@ namespace MP_TAB_SERV.Components
|
||||
|
||||
private string IdxMaccSel = "";
|
||||
|
||||
private int idxPOdlSel = 0;
|
||||
private bool isInAttr = false;
|
||||
|
||||
private bool isInProd = false;
|
||||
@@ -188,13 +446,13 @@ namespace MP_TAB_SERV.Components
|
||||
|
||||
private bool isSlave = false;
|
||||
|
||||
private int lastIdxPOdl = 0;
|
||||
private string noteAttr = "";
|
||||
private int numDayOdl = 5;
|
||||
|
||||
private bool showAll = false;
|
||||
|
||||
private bool showOdlDetail = false;
|
||||
|
||||
private string noteAttr = "";
|
||||
private double tcRichAttr = 1;
|
||||
|
||||
#endregion Private Fields
|
||||
@@ -213,8 +471,6 @@ namespace MP_TAB_SERV.Components
|
||||
get => RecMSE != null ? RecMSE.IdxOdl ?? 0 : 0;
|
||||
}
|
||||
|
||||
private int idxOdlSel { get; set; } = 0;
|
||||
|
||||
private string lblWarnBody
|
||||
{
|
||||
get => odlOk ? Traduci("ConfProdBeforeContinueBody") : Traduci("setOdlBeforeContinueBody");
|
||||
@@ -330,10 +586,15 @@ namespace MP_TAB_SERV.Components
|
||||
|
||||
private async Task ReloadPOdlDetailData()
|
||||
{
|
||||
if (IdxOdlSel > 0)
|
||||
if (IdxPOdlSel > 0)
|
||||
{
|
||||
currPodl = await TabDServ.PODLExp_getByKey(IdxOdlSel);
|
||||
tcRichAttr = (double)currPodl.Tcassegnato;
|
||||
currPodl = await TabDServ.PODLExp_getByKey(IdxPOdlSel);
|
||||
// controllo se � cambiato PODL
|
||||
if (IdxPOdlSel != lastIdxPOdl)
|
||||
{
|
||||
lastIdxPOdl = IdxPOdlSel;
|
||||
tcRichAttr = (double)currPodl.Tcassegnato;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -737,6 +737,33 @@ namespace MP.Data.Controllers
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ODL corrente macchina
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <returns></returns>
|
||||
public List<ODLExpModel> OdlCurrByMacc(string idxMacchina)
|
||||
{
|
||||
List<ODLExpModel> dbResult = new List<ODLExpModel>();
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
try
|
||||
{
|
||||
var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
|
||||
dbResult = dbCtx
|
||||
.DbSetODLExp
|
||||
.FromSqlRaw("EXEC stp_ODL_getByMacchina @IdxMacchina", IdxMacchina)
|
||||
.AsNoTracking()
|
||||
.ToList();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Eccezione durante OdlCurrByMacc{Environment.NewLine}{exc}");
|
||||
}
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco ODL data macchina e periodo
|
||||
/// </summary>
|
||||
@@ -744,7 +771,7 @@ namespace MP.Data.Controllers
|
||||
/// <param name="dtStart"></param>
|
||||
/// <param name="dtEnd"></param>
|
||||
/// <returns></returns>
|
||||
public List<ODLModel> OdlListByMacc(string idxMacchina, DateTime dtStart, DateTime dtEnd)
|
||||
public List<ODLModel> OdlListByMaccPeriodo(string idxMacchina, DateTime dtStart, DateTime dtEnd)
|
||||
{
|
||||
List<ODLModel> dbResult = new List<ODLModel>();
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
@@ -762,7 +789,7 @@ namespace MP.Data.Controllers
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Eccezione durante ListOdlAll{Environment.NewLine}{exc}");
|
||||
Log.Error($"Eccezione durante OdlListByMaccPeriodo{Environment.NewLine}{exc}");
|
||||
}
|
||||
}
|
||||
return dbResult;
|
||||
@@ -825,6 +852,67 @@ namespace MP.Data.Controllers
|
||||
}
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Split ODL
|
||||
/// </summary>
|
||||
/// <param name="idxODL"></param>
|
||||
/// <param name="matrOpr"></param>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <param name="TCRich"></param>
|
||||
/// <param name="pzPallet"></param>
|
||||
/// <param name="note"></param>
|
||||
/// <param name="startNewOdl"></param>
|
||||
/// <param name="qtyRich"></param>
|
||||
/// <returns></returns>
|
||||
public bool OdlSplit(int idxODL, int matrOpr, string idxMacchina, decimal TCRich, int pzPallet, string note, bool startNewOdl, int qtyRich)
|
||||
{
|
||||
bool fatto = false;
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
try
|
||||
{
|
||||
var IdxODL = new SqlParameter("@idxODL", idxODL);
|
||||
var MatrOpr = new SqlParameter("@MatrOpr", matrOpr);
|
||||
var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina);
|
||||
var TCRichAttr = new SqlParameter("@TCRichAttr", TCRich);
|
||||
var PzPallet = new SqlParameter("@PzPallet", pzPallet);
|
||||
var Note = new SqlParameter("@Note", note);
|
||||
var StartNewOdl = new SqlParameter("@StartNewOdl", startNewOdl);
|
||||
var QtyRich = new SqlParameter("@QtyRich", qtyRich);
|
||||
var result = dbCtx
|
||||
.Database
|
||||
.ExecuteSqlRaw("EXEC stp_ODL_split @idxODL, @MatrOpr, @IdxMacchina, @TCRichAttr, @PzPallet, @Note, @StartNewOdl, @QtyRich", IdxODL, MatrOpr, IdxMacc, TCRichAttr, PzPallet, Note, StartNewOdl, QtyRich);
|
||||
fatto = result != 0;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Eccezione durante OdlSplit{Environment.NewLine}{exc}");
|
||||
}
|
||||
}
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stato prod macchina
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <returns></returns>
|
||||
public List<PzProdModel> PezziProdMacchina(string idxMacchina)
|
||||
{
|
||||
List<PzProdModel> dbResult = new List<PzProdModel>();
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
|
||||
dbResult = dbCtx
|
||||
.DbSetPzProd
|
||||
.FromSqlRaw("EXEC stp_PzProd_getByMacchina @IdxMacchina", IdxMacchina)
|
||||
.AsNoTracking()
|
||||
.ToList();
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero PODL da chiave
|
||||
/// </summary>
|
||||
@@ -856,26 +944,6 @@ namespace MP.Data.Controllers
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stato prod macchina
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <returns></returns>
|
||||
public List<PzProdModel> PezziProdMacchina(string idxMacchina)
|
||||
{
|
||||
List<PzProdModel> dbResult = new List<PzProdModel>();
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
|
||||
dbResult = dbCtx
|
||||
.DbSetPzProd
|
||||
.FromSqlRaw("EXEC stp_PzProd_getByMacchina @IdxMacchina", IdxMacchina)
|
||||
.AsNoTracking()
|
||||
.ToList();
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce elenco RC filtrato
|
||||
/// </summary>
|
||||
|
||||
@@ -1033,6 +1033,43 @@ namespace MP.Data.Services
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ODL corrente macchina
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<ODLExpModel>> OdlCurrByMacc(string idxMacchina)
|
||||
{
|
||||
string source = "DB";
|
||||
Stopwatch sw = new Stopwatch();
|
||||
sw.Start();
|
||||
List<ODLExpModel>? result = new List<ODLExpModel>();
|
||||
// cerco in redis...
|
||||
string currKey = $"{redisBaseKey}:ODL:{idxMacchina}:CURR";
|
||||
RedisValue rawData = await redisDb.StringGetAsync(currKey);
|
||||
if (rawData.HasValue)
|
||||
{
|
||||
result = JsonConvert.DeserializeObject<List<ODLExpModel>>($"{rawData}");
|
||||
source = "REDIS";
|
||||
}
|
||||
else
|
||||
{
|
||||
result = await Task.FromResult(dbTabController.OdlCurrByMacc(idxMacchina));
|
||||
// riordino
|
||||
result = result.OrderByDescending(x => x.DataInizio).ToList();
|
||||
// serializzp e salvo...
|
||||
rawData = JsonConvert.SerializeObject(result);
|
||||
await redisDb.StringSetAsync(currKey, rawData, FastCache);
|
||||
}
|
||||
if (result == null)
|
||||
{
|
||||
result = new List<ODLExpModel>();
|
||||
}
|
||||
sw.Stop();
|
||||
Log.Debug($"OdlCurrByMacc | {source} | {sw.Elapsed.TotalMilliseconds}ms");
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco ODL data macchina e periodo
|
||||
/// </summary>
|
||||
@@ -1040,7 +1077,7 @@ namespace MP.Data.Services
|
||||
/// <param name="dtStart"></param>
|
||||
/// <param name="dtEnd"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<ODLModel>> OdlListByMacc(string idxMacchina, DateTime dtStart, DateTime dtEnd)
|
||||
public async Task<List<ODLModel>> OdlListByMaccPeriodo(string idxMacchina, DateTime dtStart, DateTime dtEnd)
|
||||
{
|
||||
string source = "DB";
|
||||
Stopwatch sw = new Stopwatch();
|
||||
@@ -1056,7 +1093,7 @@ namespace MP.Data.Services
|
||||
}
|
||||
else
|
||||
{
|
||||
result = await Task.FromResult(dbTabController.OdlListByMacc(idxMacchina, dtStart, dtEnd));
|
||||
result = await Task.FromResult(dbTabController.OdlListByMaccPeriodo(idxMacchina, dtStart, dtEnd));
|
||||
// riordino
|
||||
result = result.OrderByDescending(x => x.DataInizio).ToList();
|
||||
// serializzp e salvo...
|
||||
@@ -1068,7 +1105,7 @@ namespace MP.Data.Services
|
||||
result = new List<ODLModel>();
|
||||
}
|
||||
sw.Stop();
|
||||
Log.Debug($"OdlListByMacc | {source} | {sw.Elapsed.TotalMilliseconds}ms");
|
||||
Log.Debug($"OdlListByMaccPeriodo | {source} | {sw.Elapsed.TotalMilliseconds}ms");
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1119,6 +1156,35 @@ namespace MP.Data.Services
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Split ODL
|
||||
/// </summary>
|
||||
/// <param name="idxODL"></param>
|
||||
/// <param name="matrOpr"></param>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <param name="TCRich"></param>
|
||||
/// <param name="pzPallet"></param>
|
||||
/// <param name="note"></param>
|
||||
/// <param name="startNewOdl"></param>
|
||||
/// <param name="qtyRich"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> OdlSplit(int idxODL, int matrOpr, string idxMacchina, decimal TCRich, int pzPallet, string note, bool startNewOdl, int qtyRich)
|
||||
{
|
||||
bool answ = false;
|
||||
try
|
||||
{
|
||||
// inserisco evento
|
||||
answ = dbTabController.OdlSplit(idxODL, matrOpr, idxMacchina, TCRich, pzPallet, note, startNewOdl, qtyRich);
|
||||
await FlushCache("ODL");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
string logMsg = $"Eccezione in OdlSplit | macchina: {idxMacchina} | idxODL: {idxODL}{Environment.NewLine}{exc}";
|
||||
Log.Error(logMsg);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stato prod macchina
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user