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(Constants.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 #if false /// /// Conversion of base class to DB model class /// /// /// /// public static PartModel ConvertFromCore(Core.PartM corePart, int currMachGroupDbId) { PartModel answ = new PartModel(); if (corePart != null) { answ = new PartModel() { PartId = corePart.nPartId, PDN = corePart.nPDN, BTLPartDbId = man.FindBtlPart(corePart.nProjId, corePart.nPDN), 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.nState }; } return answ; } #endif #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.FindBtlPart(corePart.nProjId, corePart.nPDN); 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.nState }; } return answ; } #if false /// /// Conversion of base class to DB model class /// /// /// public PartModel Convert(Core.Part corePart) { PartModel answ = new PartModel(); if (corePart != null) { answ = new PartModel() { PartId = corePart.nPartId, PDN = corePart.nPDN, DO = corePart.bDO, NAM = corePart.sNAM, W = corePart.dW, L = corePart.dL, H = corePart.dH, MAT = corePart.sMATERIAL, CNT = corePart.nCNT, TBP = corePart.nTBP, DON = corePart.nDON, ROT = corePart.nROT, GRP = corePart.sGRP, UNT = corePart.nUNT, CALC_State = (int)corePart.nState }; } return answ; } /// /// Create multiple Part record associated to MachGroup /// /// /// /// public List Create(int MachGroupID, List partData) { // se è adv mode --> uso TUTTI i dati if (DbManager.AdvDataModel) { try { // Add to database dbCtx.PartList.AddRange(partData); // Commit changes dbCtx.SaveChanges(); } catch { } return partData; } // se non adv --> faccio solo copia degli id... else { List partIdList = new List(); foreach (var item in partData) { partIdList.Add(item.PartId); } return CreateBaseObj(MachGroupID, partIdList); } } /// /// Create multiple (empty) Part record associated to Project /// /// /// /// public List CreateBaseObj(int ProjDbId, List rawListData) { List partData = new List(); foreach (var item in rawListData) { PartModel newItem = new PartModel() { ProjDbId = ProjDbId, PartId = item }; partData.Add(newItem); } try { // Add to database dbCtx.PartList.AddRange(partData); // Commit changes dbCtx.SaveChanges(); } catch { } return partData; } /// /// Get filtered data by ProjectId (ASC ordered) /// /// /// public List GetByProjectAsc(int ProjDbId) { // retrieve return dbCtx .PartList .Where(x => x.ProjDbId == ProjDbId) .OrderBy(x => x.PartDbId) .ToList(); } /// /// Get filtered data by ProjectId (DESC ordered) /// /// /// public List GetByProjectDesc(int ProjDbId) { // retrieve return dbCtx .PartList .Where(x => x.ProjDbId == ProjDbId) .OrderByDescending(x => x.PartDbId) .ToList(); } /// /// Get paginated data from DB (ASC ordered) /// /// /// /// public List GetPaginatedAsc(int PartDbIdStart, int numRecord) { int numEnd = PartDbIdStart - numRecord; // check numEnd if (numEnd < 0) numEnd = 0; // retrieve return dbCtx .PartList .Where(x => x.PartDbId <= PartDbIdStart) .OrderBy(x => x.PartDbId) .Take(numRecord) .ToList(); } /// /// Get paginated data from DB (DESC ordered) /// /// /// /// public List GetPaginatedDesc(int PartDbIdStart, int numRecord) { int numEnd = PartDbIdStart - numRecord; // check numEnd if (numEnd < 0) numEnd = 0; // retrieve return dbCtx .PartList .Where(x => x.PartDbId <= PartDbIdStart) .OrderByDescending(x => x.PartDbId) .Take(numRecord) .ToList(); } #endif /// /// 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(); 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(); 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(); 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(); } /// /// 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(); 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(); 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(); 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(); 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 } }