205 lines
8.2 KiB
C#
205 lines
8.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using EnVisage.Models;
|
|
using System.Data.Entity;
|
|
|
|
namespace EnVisage.Code.BLL
|
|
{
|
|
public class ViewManager : ManagerBase<View, ViewModel>
|
|
{
|
|
public ViewManager(EnVisageEntities dbContext)
|
|
: base(dbContext)
|
|
{
|
|
}
|
|
|
|
public override View Save(ViewModel model)
|
|
{
|
|
View view = null;
|
|
if (Guid.Empty.Equals(model.Id))
|
|
{
|
|
view = base.Save(model);
|
|
|
|
if (model.CompanyId != null)
|
|
{
|
|
foreach (var companyId in model.CompanyId)
|
|
{
|
|
var company2View = DbContext.Company2View.Create();
|
|
company2View.Id = Guid.NewGuid();
|
|
company2View.ViewId = view.Id;
|
|
company2View.CompanyId = companyId;
|
|
DbContext.Company2View.Add(company2View);
|
|
}
|
|
}
|
|
|
|
if (model.UserId != null)
|
|
{
|
|
foreach (var userId in model.UserId)
|
|
{
|
|
var user2View = DbContext.User2View.Create();
|
|
user2View.Id = Guid.NewGuid();
|
|
user2View.ViewId = view.Id;
|
|
user2View.UserId = userId;
|
|
DbContext.User2View.Add(user2View);
|
|
}
|
|
}
|
|
|
|
if (model.CostCenterId != null)
|
|
{
|
|
foreach (var costCenterId in model.CostCenterId)
|
|
{
|
|
var view2CostCenter = DbContext.View2CostCenter.Create();
|
|
view2CostCenter.Id = Guid.NewGuid();
|
|
view2CostCenter.ViewId = view.Id;
|
|
view2CostCenter.CostCenterId = costCenterId;
|
|
DbContext.View2CostCenter.Add(view2CostCenter);
|
|
}
|
|
}
|
|
|
|
if (model.TeamId != null)
|
|
{
|
|
foreach (var teamId in model.TeamId)
|
|
{
|
|
var team2View = DbContext.Team2View.Create();
|
|
team2View.Id = Guid.NewGuid();
|
|
team2View.ViewId = view.Id;
|
|
team2View.TeamId = teamId;
|
|
DbContext.Team2View.Add(team2View);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
view = base.Save(model);
|
|
|
|
var companies = DbContext.Company2View.Where(x => x.ViewId == model.Id).ToList();
|
|
companies.Where(x => model.CompanyId == null || !model.CompanyId.Contains(x.CompanyId)).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
|
|
if (model.CompanyId != null)
|
|
{
|
|
foreach (var companyId in model.CompanyId.Where(c => !companies.Select(x => x.CompanyId).Contains(c)))
|
|
{
|
|
var company2View = DbContext.Company2View.Create();
|
|
company2View.Id = Guid.NewGuid();
|
|
company2View.ViewId = view.Id;
|
|
company2View.CompanyId = companyId;
|
|
DbContext.Company2View.Add(company2View);
|
|
}
|
|
}
|
|
|
|
var users = DbContext.User2View.Where(x => x.ViewId == model.Id).ToList();
|
|
users.Where(x => model.UserId == null || !model.UserId.Contains(x.UserId)).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
|
|
if (model.UserId != null)
|
|
{
|
|
foreach (var userId in model.UserId.Where(c => !users.Select(x => x.UserId).Contains(c)))
|
|
{
|
|
var user2View = DbContext.User2View.Create();
|
|
user2View.Id = Guid.NewGuid();
|
|
user2View.ViewId = view.Id;
|
|
user2View.UserId = userId;
|
|
DbContext.Entry(user2View).State = EntityState.Added;
|
|
}
|
|
}
|
|
|
|
var costcenters = DbContext.View2CostCenter.Where(x => x.ViewId == model.Id).ToList();
|
|
costcenters.Where(x => model.CostCenterId == null || !model.CostCenterId.Contains(x.CostCenterId)).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
if (model.CostCenterId != null)
|
|
{
|
|
foreach (var costCenterId in model.CostCenterId)
|
|
{
|
|
var view2CostCenter = DbContext.View2CostCenter.Create();
|
|
view2CostCenter.Id = Guid.NewGuid();
|
|
view2CostCenter.ViewId = view.Id;
|
|
view2CostCenter.CostCenterId = costCenterId;
|
|
DbContext.View2CostCenter.Add(view2CostCenter);
|
|
}
|
|
}
|
|
|
|
var team2Views = DbContext.Team2View.Where(x => x.ViewId == view.Id).ToList();
|
|
team2Views.Where(x => model.TeamId == null || !model.TeamId.Contains(x.TeamId)).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
|
|
if (model.TeamId != null)
|
|
{
|
|
foreach (var teamId in model.TeamId.Where(c => !team2Views.Select(x => x.TeamId).Contains(c)))
|
|
{
|
|
var team2View = DbContext.Team2View.Create();
|
|
team2View.Id = Guid.NewGuid();
|
|
team2View.ViewId = view.Id;
|
|
team2View.TeamId = teamId;
|
|
DbContext.Entry(team2View).State = EntityState.Added;
|
|
}
|
|
}
|
|
}
|
|
return view;
|
|
}
|
|
|
|
public ViewModel LoadWithChildCollections(Guid? value, bool isReadOnly = true)
|
|
{
|
|
ViewModel result = (ViewModel)base.Load(value, isReadOnly);
|
|
if (value.HasValue)
|
|
{
|
|
var companies = DbContext.Company2View.Where(x => x.ViewId == value.Value).ToList();
|
|
result.CompanyId = companies.Select(x => x.CompanyId).ToList();
|
|
result.Company = companies.Select(x => x.Company.Name).ToList();
|
|
|
|
var users = DbContext.User2View.Where(x => x.ViewId == value.Value).ToList();
|
|
result.UserId = users.Select(x => x.UserId).ToList();
|
|
|
|
var costcenters = DbContext.View2CostCenter.Where(x => x.ViewId == value.Value).ToList();
|
|
result.CostCenterId = costcenters.Select(x => x.CostCenterId).ToList();
|
|
|
|
var teams = DbContext.Team2View.Where(t => t.ViewId == value.Value).ToList();
|
|
result.TeamId = teams.Select(t => t.TeamId).ToList();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
protected override View InitInstance()
|
|
{
|
|
return new View { Id = Guid.NewGuid() };
|
|
}
|
|
|
|
protected override View RetrieveReadOnlyById(Guid key)
|
|
{
|
|
return DataTable.AsNoTracking().FirstOrDefault(t=>t.Id == key);
|
|
}
|
|
|
|
public override System.Data.Entity.DbSet<View> DataTable
|
|
{
|
|
get
|
|
{
|
|
return DbContext.Views;
|
|
}
|
|
}
|
|
|
|
public IList<View> GetViewsByOwner(Guid? ownerId)
|
|
{
|
|
if (ownerId.HasValue)
|
|
{
|
|
return DataTable.Where(t => t.User2View.Select(x => x.UserId).Contains(ownerId.Value)).AsNoTracking().ToList();
|
|
}
|
|
|
|
return new List<View>();
|
|
}
|
|
|
|
public IList<Team> GetTeams(Guid? viewId)
|
|
{
|
|
if (!viewId.HasValue || Guid.Empty.Equals(viewId))
|
|
return new List<Team>();
|
|
var teams = (from tv in DbContext.Team2View
|
|
join t in DbContext.Teams on tv.TeamId equals t.Id
|
|
where tv.ViewId == viewId
|
|
orderby t.Name
|
|
select t).AsNoTracking().ToList();
|
|
teams.ForEach(t => t.PeopleResources = t.PeopleResources.OrderBy(r=>r.LastName).ToList());
|
|
|
|
return teams;
|
|
}
|
|
}
|
|
} |