This commit is contained in:
zaccaria.majid
2023-11-07 17:07:45 +01:00
5 changed files with 444 additions and 43 deletions
+1 -1
View File
@@ -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();
+11 -5
View File
@@ -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>
}
+273 -12
View File
@@ -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;
}
}
}
+90 -22
View File
@@ -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>
+69 -3
View File
@@ -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>