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; namespace EgwProxy.DataLayer.Controllers { public class ProdController : IDisposable { #region Public Methods /// /// Helper conversione a ProjectDTO /// /// record in formato ProdModel /// public static ProjectDTO ConvToDto(ProdModel currRec) { // ho valori mancanti che saranno calcolati dal cloud e valori messi a zero di default ProjectDTO answ = new ProjectDTO() { ProjCloudId = currRec.ProjCloudId, ProjLocalId = currRec.ProdDbId, ProjExtId = currRec.ProdId, // è calcolato sul cloud, da token --> machine ID MachineCloudId = 0, // è calcolato sul cloud, da token --> KeyNum KeyNum = 0, // disponibile solo su PROJ BTLFileName = "", PType = (EgwProxy.MagMan.BWType)currRec.PType, Machine = currRec.Machine, ProjDescription = currRec.Description, DtCreated = currRec.DtCreated, DtLastAction = DateTime.MinValue, DtSchedule = DateTime.MinValue, DtStartProd = DateTime.MinValue, // disponibile solo su PROJ ListName = "", ProcTimeEst = 0, ProcTimeReal = 0, IsActive = currRec.IsActive, IsArchived = currRec.IsArchived }; return answ; } public void Dispose() { } /// /// Get record by ProdId /// /// /// public ProdModel FindByProdId(int ProdId) { ProdModel answ; using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) { answ = localDbCtx .DbSetProd .Where(x => x.ProdId == ProdId) .SingleOrDefault(); } return answ; } /// /// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato /// /// /// /// public List GetUnsentAsc() { using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) { // retrieve return localDbCtx .DbSetProd .Where(x => x.ProjCloudId == 0) .OrderBy(x => x.ProdDbId) .ToList(); } } /// /// Update record su DB x ProjectCloudId /// /// /// /// public ProdModel UpdateCloudId(int ProdId, int ProjCloudId) { // cerco specifico Proj ProdModel currData; using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) { currData = localDbCtx .DbSetProd .Where(x => x.ProdId == ProdId) .SingleOrDefault(); if (currData != null) { try { // aggiorno valore BTL currData.ProjCloudId = ProjCloudId; // salvo record PROD localDbCtx.SaveChanges(); // cerco se ci siano projects collegati ed aggiorno pure loro... var projList = localDbCtx .DbSetProj .Where(x => x.ProdDbId == currData.ProdDbId) .ToList(); if (projList != null) { foreach (var item in projList) { item.ProjCloudId = ProjCloudId; } // salvo modifihce ai PROJ localDbCtx.SaveChanges(); } } catch (Exception exc) { string errMessage = $"EXCEPTION on Prod.UpdateCloudId:{Environment.NewLine}{exc}"; Console.WriteLine(errMessage); Log.Error(errMessage); } } else { string errMessage = $"ERROR on Prod.UpdateCloudId: req item was not found | ProdId {ProdId} | ProjCloudId {ProjCloudId}"; Console.WriteLine(errMessage); Log.Error(errMessage); } } return currData; } #endregion Public Methods #region Private Fields /// /// Istanza logger /// private NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }