146 lines
6.0 KiB
C#
146 lines
6.0 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 TeamManager : ManagerBase<Team, TeamModel>
|
|
{
|
|
public TeamManager(EnVisageEntities dbContext)
|
|
: base(dbContext)
|
|
{
|
|
}
|
|
|
|
protected override Team InitInstance()
|
|
{
|
|
return new Team { Id = Guid.NewGuid() };
|
|
}
|
|
|
|
protected override Team RetrieveReadOnlyById(Guid key)
|
|
{
|
|
var team = DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key);
|
|
team.PeopleResources = team.PeopleResources.OrderBy(r => r.LastName).ToList();
|
|
return team;
|
|
}
|
|
|
|
public override DbSet<Team> DataTable
|
|
{
|
|
get
|
|
{
|
|
return DbContext.Teams;
|
|
}
|
|
}
|
|
|
|
public TeamModel LoadWithChildCollections(Guid? value, bool isReadOnly = true)
|
|
{
|
|
TeamModel result = (TeamModel)base.Load(value, isReadOnly);
|
|
|
|
return result;
|
|
}
|
|
|
|
public override Team Save(TeamModel model)
|
|
{
|
|
Team team = null;
|
|
if (Guid.Empty.Equals(model.Id))
|
|
{
|
|
|
|
team = base.Save(model);
|
|
|
|
var capScen = DbContext.Scenarios.Create();
|
|
capScen.Type = (int)ScenarioType.TeamPlannedCapacity;
|
|
capScen.Name = model.Name + " Planned Capacity";
|
|
capScen.Id = Guid.NewGuid();
|
|
team.PlannedCapacityScenarioId = capScen.Id;
|
|
team.Id = Guid.NewGuid();
|
|
DbContext.Scenarios.Add(capScen);
|
|
DbContext.SaveChanges();
|
|
if (model.UserId != null)
|
|
{
|
|
foreach (var userId in model.UserId)
|
|
{
|
|
var user2Team = DbContext.User2Team.Create();
|
|
user2Team.Id = Guid.NewGuid();
|
|
user2Team.TeamId = team.Id;
|
|
user2Team.UserId = userId.ToString();
|
|
DbContext.User2Team.Add(user2Team);
|
|
}
|
|
}
|
|
if (model.ViewId != null)
|
|
{
|
|
foreach (var itemId in model.ViewId)
|
|
{
|
|
var team2View = DbContext.Team2View.Create();
|
|
team2View.Id = Guid.NewGuid();
|
|
team2View.TeamId = team.Id;
|
|
team2View.ViewId = itemId;
|
|
DbContext.Team2View.Add(team2View);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
team = base.Save(model);
|
|
var projects = (from c in DbContext.Team2Project where c.TeamId == model.Id select c.ProjectId).Distinct().ToList();
|
|
var users = DbContext.User2Team.Where(x => x.TeamId == model.Id).ToList();
|
|
var users2remove = users.Where(x => model.UserId == null || !model.UserId.Contains(Guid.Parse(x.UserId))).Select(x => x.UserId).ToList();
|
|
|
|
users.Where(x => model.UserId == null || !model.UserId.Contains(Guid.Parse(x.UserId))).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
if (model.UserId != null)
|
|
foreach (var userId in model.UserId.Where(c => users.All(u => !c.ToString().Equals(u.UserId, StringComparison.InvariantCultureIgnoreCase))))
|
|
{
|
|
var user2Team = DbContext.User2Team.Create();
|
|
user2Team.Id = Guid.NewGuid();
|
|
user2Team.TeamId = team.Id;
|
|
user2Team.UserId = userId.ToString();
|
|
DbContext.Entry(user2Team).State = EntityState.Added;
|
|
}
|
|
foreach (var project in projects)
|
|
{
|
|
var projectUsers = (from c in DbContext.ProjectAccesses where c.ProjectId == project select c.PrincipalId).Distinct().ToList();
|
|
DbContext.ProjectAccesses.RemoveRange(DbContext.ProjectAccesses.Where(x => x.ProjectId == project && users2remove.Contains(x.PrincipalId.ToString())).ToList());
|
|
foreach (var userId in (from c in model.UserId where !projectUsers.Contains(c) select c).Distinct().ToList())
|
|
{
|
|
DbContext.ProjectAccesses.Add(new ProjectAccess()
|
|
{
|
|
PrincipalId = userId,
|
|
ProjectId = project,
|
|
Read = 1,
|
|
Write = 1
|
|
});
|
|
}
|
|
}
|
|
var existingViews = DbContext.Team2View.Where(x => x.TeamId == model.Id).ToList();
|
|
existingViews.Where(x => model.ViewId == null || !model.ViewId.Contains(x.ViewId)).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
if (model.ViewId != null)
|
|
foreach (var itemId in model.ViewId.Where(c => existingViews.All(u => !c.Equals(u.ViewId))))
|
|
{
|
|
var team2View = DbContext.Team2View.Create();
|
|
team2View.Id = Guid.NewGuid();
|
|
team2View.TeamId = team.Id;
|
|
team2View.ViewId = itemId;
|
|
DbContext.Entry(team2View).State = EntityState.Added;
|
|
}
|
|
}
|
|
|
|
return team;
|
|
}
|
|
|
|
public IList<Team> GetTeamsByUser(Guid? userId)
|
|
{
|
|
if (userId.HasValue)
|
|
{
|
|
var user2team = DbContext.User2Team.Where(t => t.UserId == userId.Value.ToString()).Select(t => t.TeamId).ToArray();
|
|
var teams = DataTable.Where(t => user2team.Contains(t.Id)).AsNoTracking().ToList();
|
|
teams.ForEach(t => t.PeopleResources = t.PeopleResources.OrderBy(r => r.LastName).ToList());
|
|
return teams;
|
|
}
|
|
|
|
return new List<Team>();
|
|
}
|
|
}
|
|
} |