using EgwProxy.DataLayer.DbModel;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Data.Entity.Infrastructure.Design.Executor;
namespace EgwProxy.DataLayer.Controllers
{
public class LogMachineController : IDisposable
{
#region Public Constructors
///
/// Init classe
///
///
public LogMachineController()
{
}
#endregion Public Constructors
#region Public Methods
///
/// Helper conversione a LogMachineDTO
///
///
///
public static LogMachineDTO ConvToItemDto(LogMachineModel currRec)
{
LogMachineDTO answ = new LogMachineDTO()
{
DtEvent = currRec.DtEvent,
EvType = (MagMan.MachLogTypes)currRec.EvType,
ProjCloudId = currRec.ProjCloudId,
SupervId = currRec.SupervId,
VarValue = currRec.VarValue
};
return answ;
}
public void Dispose()
{
}
///
/// Recupero i dati in ordine crescente fino al num max indicato
///
///
///
public List GetUnsentAsc(int numMax)
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
return localDbCtx
.DbSetLogMac
.Where(x => (x.DtSent == null || x.DtSent < x.DtEvent) && x.ProjCloudId > 0)
.OrderBy(x => x.DtEvent)
.Take(numMax)
.ToList();
}
}
///
/// Aggiorna i record indicati inserendo dataora corrente x DtSent
///
///
///
public bool SetDtSent(List rec2upd)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
DateTime adesso = DateTime.Now;
foreach (var item in rec2upd)
{
var currRec = localDbCtx
.DbSetLogMac
.Where(x => x.DtSent == null && x.LogDbId == item.LogDbId)
.FirstOrDefault();
if (currRec != null)
{
currRec.DtSent = adesso;
}
// indico modificato
localDbCtx.Entry(currRec).State = System.Data.Entity.EntityState.Modified;
}
// Salvataggio finale
localDbCtx.SaveChanges();
}
return done;
}
///
/// Cerca di sistemare gli ID di Prod e ProjCloud mancanti
///
///
public bool TryFixProjCloudId()
{
// init vars
bool fatto = false;
int prodId = 0;
// vado sul DB
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
var list2proc = localDbCtx
.DbSetLogMac
.Where(x => x.ProjCloudId == 0 && ((int)x.EvType == 1 || (int)x.EvType == 2))
.OrderBy(x => x.DtEvent)
.ToList();
// se ci sono...
if (list2proc != null && list2proc.Count > 0)
{
// recupero elenco PROD
List prodList = localDbCtx
.DbSetProd
.AsNoTracking()
.ToList();
foreach (var item in list2proc)
{
prodId = 0;
// cerco valore
string[] dataList = item.VarValue.Split(';');
if (dataList != null && dataList.Count() > 0)
{
int.TryParse(dataList[0], out prodId);
// se trovato
if (prodId > 0)
{
// salvo il valore prodId
item.ProdId = prodId;
// cerco il projCloudId in elenco
var projRec = prodList.Where(x => x.ProdId == prodId).FirstOrDefault();
if (projRec != null)
{
item.ProjCloudId = projRec.ProjCloudId;
}
// indico modificato
localDbCtx.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
}
// salvo
localDbCtx.SaveChanges();
// registro
fatto = true;
}
}
// risultato
return fatto;
}
#endregion Public Methods
#region Private Fields
///
/// Istanza logger
///
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}