EnVisageOnline/Main/Source/EnVisage/Code/BLL/WorkWeekManager.cs

87 lines
2.1 KiB
C#

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<WorkWeek, WorkWeekModel>
{
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<WorkWeek> 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);
}
}
}