using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using EnVisage.Models; namespace EnVisage.Code.BLL { public class WorkWeekManager : ManagerBase { public WorkWeekManager(EnVisageEntities dbContext) : base(dbContext) { } protected override WorkWeek InitInstance() { return new WorkWeek { Id = Guid.NewGuid() }; } protected override WorkWeek RetrieveReadOnlyById(Guid key) { return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key); } public override DbSet DataTable { get { return DbContext.WorkWeeks; } } public override WorkWeek Save(WorkWeekModel model) { WorkWeek oldModel = null; if (model.Id != Guid.Empty) oldModel = this.Load(model.Id, false); var workWeek = base.Save(model); if (model.IsDefault && ((oldModel == null) || !oldModel.IsDefault)) this.Activate(workWeek); return workWeek; } public void Activate(Guid Id) { foreach (var ww in DataTable) { if (ww.Id == Id) { ww.IsDefault = true; DbContext.Entry(ww).State = EntityState.Modified; } else if (ww.IsDefault) { ww.IsDefault = false; DbContext.Entry(ww).State = EntityState.Modified; } } } public void Activate(WorkWeek ww) { if ((ww.Id == Guid.Empty) || ww.IsDefault) return; var currentActiveWorkWeeks = DataTable.Where(x => x.IsDefault && !x.Id.Equals(ww.Id)).ToList(); currentActiveWorkWeeks.ForEach(x => { x.IsDefault = false; DbContext.Entry(x).State = EntityState.Modified; }); ww.IsDefault = true; } public WorkWeek LoadDefault() { return DataTable.AsNoTracking().FirstOrDefault(t => t.IsDefault == true); } } }