using System; using System.Collections.Generic; using System.Linq; using System.Text; using EgtBEAMWALL.DataLayer.DatabaseModels; namespace EgtBEAMWALL.DataLayer.Controllers { public class ProdController : IDisposable { #region Private Fields private DatabaseContext dbCtx; #endregion Private Fields #region Public Constructors public ProdController() { // Initialize database context dbCtx = new DatabaseContext(); } #endregion Public Constructors #if false /// /// Create record on DB /// /// /// /// public ProdModel Create(int newProdId, string Description) { ProdModel newProd = new ProdModel() { ProdId = newProdId, Description = Description }; try { // Add to database dbCtx.ProdList.Add(newProd); // Commit changes dbCtx.SaveChanges(); } catch { } return newProd; } /// /// Get paginated data from DB (ASC ordered) /// /// /// /// public List GetPaginatedAsc(int ProdDbIdStart, int numRecord) { int numEnd = ProdDbIdStart - numRecord; // check numEnd if (numEnd < 0) numEnd = 0; // retrieve return dbCtx .ProdList .Where(x => x.ProdDbId <= ProdDbIdStart) .OrderBy(x => x.ProdDbId) .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 .ProdList .Where(x => x.ProdDbId <= PartDbIdStart) .OrderByDescending(x => x.ProdDbId) .Take(numRecord) .ToList(); } /// /// Get filtered data by ProdectId (ASC ordered) /// /// /// public List GetByProdAsc(int ProdDbId) { // retrieve return dbCtx .ProdList .Where(x => x.ProdDbId == ProdDbId) .OrderBy(x => x.ProdDbId) .ToList(); } /// /// Get filtered data by ProdectId (DESC ordered) /// /// /// public List GetByProdDesc(int ProdDbId) { // retrieve return dbCtx .ProdList .Where(x => x.ProdDbId == ProdDbId) .OrderByDescending(x => x.ProdDbId) .ToList(); } /// /// Get record by RawPartDbId /// /// /// public ProdModel FindByRawPartDbId(int RawPartDbId) { var rawPart = dbCtx .RawPartList .Where(x => x.RawPartDbId == RawPartDbId) .SingleOrDefault(); return FindByProdDbId(rawPart.ProdDbId); } /// /// Get record by RawPartId /// /// /// public ProdModel FindByRawPartId(int RawPartId) { var rawPart = dbCtx .RawPartList .Where(x => x.RawPartId == RawPartId) .SingleOrDefault(); return FindByProdDbId(rawPart.ProdDbId); } #endif #region Protected Methods /// /// Get LAST paginated data from DB (DESC ordered) /// /// /// protected List GetLastDbModelDesc(int numRecord) { // se numRecord = 0 --> passo tutti if (numRecord == 0) { numRecord = dbCtx.ProdList.Count(); } // retrieve return dbCtx .ProdList .OrderByDescending(x => x.ProdId) .Take(numRecord) .ToList(); } #endregion Protected Methods #region Public Methods /// /// Aggiunta di un PROJ ad un PROD /// /// /// /// public bool AddProj(int ProdId, int ProjId) { bool done = false; // cerco Prod var currProd = dbCtx .ProdList .Where(x => x.ProdId == ProdId) .FirstOrDefault(); // cerco Proj var currProj = dbCtx .ProjList .Where(x => x.ProjDbId == currProd.ProdDbId) .FirstOrDefault(); // lo aggiorno currProj.ProjDbId = currProd.ProdDbId; // salvo dbCtx.SaveChanges(); return done; } public bool DeleteProd(int ProdId) { bool done = false; var currProd = FindByProdId(ProdId); // sel delle BTLParts da proj var machGroup2del = dbCtx .MachGroupList .Where(x => x.ProdDbId == currProd.ProdDbId); try { // remove from database dbCtx.MachGroupList.RemoveRange(machGroup2del); dbCtx.ProdList.Remove(currProd); // Commit changes dbCtx.SaveChanges(); done = true; } catch { } return done; } public void Dispose() { // Clear database context dbCtx.Dispose(); } /// /// Get record by ProdDbId /// /// /// public ProdModel FindByProdDbId(int ProdDbId) { return dbCtx .ProdList .Where(x => x.ProdDbId == ProdDbId) .SingleOrDefault(); } /// /// Get record by ProdId /// /// /// public ProdModel FindByProdId(int ProdId) { return dbCtx .ProdList .Where(x => x.ProdId == ProdId) .SingleOrDefault(); } /// /// Elenco progetti /// /// /// public List GetLastDesc(int numRecord) { List result = new List(); var dbResult = GetLastDbModelDesc(numRecord); // conversione result = dbResult.Select(x => new Core.ProjectFile(Core.ConstBeam.ProjectType.PROD, 0, x.ProdId, "")).ToList(); return result; } /// /// Fornisce nuovo indice VUOTO da usare (allocando sul DB) /// /// /// public int GetNextIndex(int ProjId) { int nextId = 0; // cerco se ne ho ALMENO 1.... var numRec = dbCtx.ProdList.Count(); if (numRec == 0) { nextId = 1; } else { // retrieve ultimo... var maxRecord = dbCtx .ProdList .OrderByDescending(x => x.ProdId) .Take(1) .FirstOrDefault(); // incremento nextId = maxRecord.ProdId + 1; } // creo nuovo... var newRec = dbCtx .ProdList .Add(new ProdModel() { ProdId = nextId, Locked = true }); // Commit changes dbCtx.SaveChanges(); return nextId; } /// /// Manage Lock by ProdId (proj & prod) /// /// ProjID /// Stato Lock da impostare /// public ProdModel LockByProdId(int ProdId, bool Locked) { // seleziono il prod... var currProd = dbCtx .ProdList .Where(x => x.ProdId == ProdId) .SingleOrDefault(); currProd.Locked = Locked; var currProj = dbCtx .ProjList .Where(x => x.ProdDbId == currProd.ProdDbId) .ToList(); currProj.ForEach(x => x.Locked = Locked); dbCtx.SaveChanges(); return currProd; } #endregion Public Methods } }