public ActionResult GetTasks(int projectId, string taskGroup)
{
List<HumanTask> taskList = null;
string groupName = null;
Project currentProject = null;
List<LandingUserModel> usersToModel = null;
var user = userRepository.GetByName(User.Identity.Name);
if (projectId != -1)
{
currentProject = projectRepository.GetById(projectId);
taskList = currentProject.Tasks.ToList();
var usersList = projectProcessor.GetUsersAndCreatorInProject(projectId).ToList();
usersToModel = usersList.OrderBy(x => x.UserName).Select(currentUser => new LandingUserModel()
{
Id = currentUser.Id,
Name = currentUser.UserName,
Photo = userRepository.GetById(currentUser.Id).ImageData != null
}).ToList();
}
else
{
switch (taskGroup)
{
case "all":
taskList = projectRepository.GetAllProjectsForUser(user.Id).SelectMany(proj => proj.Tasks).ToList();
taskList.AddRange(projectRepository.GetAllProjectsForTheirCreator(user.Id).SelectMany(proj => proj.Tasks).ToList());
groupName = "All Tasks";
break;
case "my":
taskList = projectRepository.GetAllProjectsForUser(user.Id).SelectMany(proj => proj.Tasks).Where(x => x.AssigneeId == user.Id).ToList();
taskList.AddRange(projectRepository.GetAllProjectsForTheirCreator(user.Id).SelectMany(proj => proj.Tasks).Where(x => x.AssigneeId == user.Id).ToList());
groupName = "My Tasks";
break;
case "unassigned":
taskList = projectRepository.GetAllProjectsForUser(user.Id).SelectMany(proj => proj.Tasks).Where(x => x.AssigneeId == null).ToList();
taskList.AddRange(projectRepository.GetAllProjectsForTheirCreator(user.Id).SelectMany(proj => proj.Tasks).Where(x => x.AssigneeId == null).ToList());
groupName = "Unassigned";
break;
}
}
var tasksToModel = taskList.Where(x => x.Closed == (DateTime?)null).Select(task => new LandingTaskModel
{
Id = task.Id,
Description = stringExtensions.Truncate(task.Description, 70),
Name = stringExtensions.Truncate(task.Name, 70),
Priority = task.Priority,
Created = task.Created,
Creator = userRepository.GetById(task.CreatorId.GetValueOrDefault()).UserName.ToString(),
AssigneeId = task.AssigneeId,
Assignee = task.AssigneeId== null?null:userRepository.GetById(task.AssigneeId.GetValueOrDefault()).UserName.ToString(),
AssigneePhoto = task.AssigneeId==null?false:userRepository.GetById(task.AssigneeId.GetValueOrDefault()).ImageData!=null,
Finished = task.Finished
});
var model = new LandingProjectModel
{
Id = projectId != -1 ? currentProject.Id : -1,
Name = projectId != -1 ? currentProject.Name : groupName,
Tasks = tasksToModel,
Users = usersToModel
};
return Json(model, JsonRequestBehavior.AllowGet);
}