using System; using System.Collections.Generic; using System.Linq; using System.Text; using EgtBEAMWALL.DataLayer.DatabaseModels; namespace EgtBEAMWALL.DataLayer.Controllers { public class PartController : IDisposable { #region Private Fields private DatabaseContext dbCtx; #endregion Private Fields #region Public Fields public static PartController man = new PartController(); #endregion Public Fields #region Public Constructors public PartController() { // Initialize database context dbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING); } #endregion Public Constructors #region Protected Methods /// /// Get BtlPartDBId by ProjId + PDN /// /// /// /// protected int FindBtlPart(int ProjId, int PDN) { int BtlPartDbId = 0; #if false var currProj = dbCtx .ProjList .Where(x => x.ProjId == ProjId) .FirstOrDefault(); if (currProj != null) { var btlPart = dbCtx .BTLPartList .Where(x => x.ProjDbId == currProj.ProjDbId && x.PDN == PDN) .SingleOrDefault(); if (btlPart != null) { BtlPartDbId = btlPart.BTLPartDbId; } } #endif var btlPart = dbCtx .BTLPartList .Where(x => x.Project.ProjId == ProjId && x.PDN == PDN) .SingleOrDefault(); if (btlPart != null) { BtlPartDbId = btlPart.BTLPartDbId; } return BtlPartDbId; } /// /// Get BtlPartDBId by ProjId + BtlPartId /// /// /// /// protected int FindBtlPartByBPI(int ProjId, int BtlPartId) { int BtlPartDbId = 0; var btlPart = dbCtx .BTLPartList .Where(x => x.Project.ProjId == ProjId && x.PartId == BtlPartId) .SingleOrDefault(); if (btlPart != null) { BtlPartDbId = btlPart.BTLPartDbId; } return BtlPartDbId; } #endregion Protected Methods #region Public Methods /// /// Conversion of base class to DB model class /// /// /// /// public static PartModel ConvertFromCore(Core.PartM corePart, int currMachGroupDbId) { PartModel answ = new PartModel(); if (corePart != null) { int BTLPartId = man.FindBtlPartByBPI(corePart.nProjId, corePart.nBTLPartId); answ = new PartModel() { PartId = corePart.nPartId, PDN = corePart.nPDN, BTLPartDbId = BTLPartId, MachGroupDbId = currMachGroupDbId, State = Core.ItemState.Assigned, NAM = corePart.sNAM, W = corePart.dW, L = corePart.dL, H = corePart.dH, Material = corePart.sMATERIAL, DtStart = corePart.dtStartTime, DtEnd = corePart.dtEndTime, //DO = corePart.bDO, //CNT = corePart.nCNT, //TBP = corePart.nTBP, //DON = corePart.nDON, ROT = corePart.nCALC_ROT, //GRP = corePart.sGRP, //UNT = corePart.nUNT, CALC_State = (int)corePart.nCALC_State }; } return answ; } /// /// Delete single Part /// /// /// /// /// public bool Delete(int ProdId, int MachGroupId, int PartId) { bool done = false; var item2del = dbCtx .PartList .Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId) .SingleOrDefault(); try { // Remove from database dbCtx.PartList.Remove(item2del); // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; // aggiorno info sullo status StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.MachGroupMod, ""); } catch (Exception exc) { Console.WriteLine($"EXCEPTION on Delete: ProdId: {ProdId} | MachGroupId: {MachGroupId} | PartId: {PartId}{Environment.NewLine}{exc}"); } return done; } /// /// Delete single Part /// /// /// public bool Delete(int PartDbId) { bool done = false; var item2del = dbCtx .PartList .Where(x => x.PartDbId == PartDbId) .SingleOrDefault(); try { // Add to database dbCtx.PartList.Remove(item2del); // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; } catch (Exception exc) { Console.WriteLine($"EXCEPTION on Delete: {exc}"); } return done; } /// /// Delete Part by project /// /// /// public bool DeleteByMachGroup(int MachGroupDbId) { bool done = false; var items2del = dbCtx .PartList .Where(x => x.MachGroupDbId == MachGroupDbId); try { // Add to database dbCtx.PartList.RemoveRange(items2del); // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; } catch (Exception exc) { Console.WriteLine($"EXCEPTION on DeleteByMachGroup: {exc}"); } return done; } public void Dispose() { // Clear database context dbCtx.Dispose(); } /// /// Get record by DBId /// /// /// public PartModel FindByDbId(int PartDbId) { return dbCtx .PartList .Where(x => x.PartDbId == PartDbId) .SingleOrDefault(); } /// /// Get record by ExtId /// /// /// public PartModel FindByPartId(int PartId) { return dbCtx .PartList .Where(x => x.PartId == PartId) .SingleOrDefault(); } /// /// Reinizializzaizone del controller /// public void ResetController() { // Re-Initialize database context dbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING); } /// /// Update single Part /// /// /// public bool Update(PartModel updItem) { bool done = false; var item2update = dbCtx .PartList .Where(x => x.PartDbId == updItem.PartDbId) .SingleOrDefault(); try { // update, vers 1... dbCtx.Entry(item2update).CurrentValues.SetValues(updItem); //// update, vers 2 //dbCtx.PartList.Remove(item2del); //dbCtx.PartList.Add(updItem); // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; // aggiorno info sullo status StatusMapController.man.UpdateAction("", updItem.MachGroup.Prod.ProdId, updItem.MachGroup.MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.MachGroupMod, ""); } catch { } return done; } /// /// Set EndDate for Part /// /// /// /// public bool UpdateEnd(int ProdId, int MachGroupId, int PartId, DateTime DtEnd) { bool done = false; try { // aggiorno dbCtx .PartList .Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId) .FirstOrDefault() .DtEnd = DtEnd; // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; // aggiorno info sullo status StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.PartEnd, ""); } catch (Exception exc) { Console.WriteLine($"EXCEPTION on UpdateStatus: {exc}"); } return done; } /// /// Set StartDate for Part /// /// /// /// public bool UpdateStart(int ProdId, int MachGroupId, int PartId, DateTime DtStart) { bool done = false; try { // aggiorno dbCtx .PartList .Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId) .FirstOrDefault() .DtStart = DtStart; // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; // aggiorno info sullo status StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.PartStart, ""); } catch (Exception exc) { Console.WriteLine($"EXCEPTION on UpdateStatus: {exc}"); } return done; } /// /// Set Status for Part /// /// /// /// public bool UpdateStatus(int ProdId, int MachGroupId, int PartId, Core.ItemState newState) { bool done = false; try { // aggiorno dbCtx .PartList .Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId) .FirstOrDefault() .State = newState; // Commit changes dbCtx.SaveChanges(); ResetController(); done = true; // aggiorno info sullo status StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.MachGroupMod, ""); } catch (Exception exc) { Console.WriteLine($"EXCEPTION on UpdateStatus: {exc}"); } return done; } #endregion Public Methods } }