public OverviewModel ProjectOverview(int Id) { OverviewModel model; int userId = int.Parse(User.Identity.GetProjectUserId()); var managerTask = new TaskManager(); var managerProject = new ProjectUserManager(); var tasks = managerTask.GetTasksForProject(Id); int tasksDone = tasks.Where(t => t.State == managerTask.GetDoneStateId()).Count(); int tasksActive = tasks.Where(t => t.State == managerTask.GetActiveStateId()).Count(); int tasksUnassigned = managerTask.GetUnassignedTasks(Id).Count(); double workHours = managerTask.GetAllWorkTimeForProject(Id) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); var users = managerProject.GetUsersForProject(Id); List<string> devs = new List<string>(); foreach (var u in users) { devs.Add(u.UserName); } var project = managerProject.GetProject(Id); var projectLeaderName = managerProject.GetProjectLeader(Id).UserName; model = new OverviewModel( project.Id, project.Name, project.Description, project.Deadline, devs, tasksDone, tasksActive, tasksUnassigned, (int)(workHours / 3600), projectLeaderName); return model; }
public ActionResult AcceptStateChange(int taskId, int developerId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; manager.AcceptStateChange(taskId, developerId); TempData["DetailsPage"] = "1"; TempData["overlayId"] = "TaskDetails"; TempData["TaskDetailsId"] = "" + taskId; return Redirect("/Projects/Details/" + projectId); }
public ActionResult AddDeveloper(int taskId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; if (Request.Form["addUserId"] != null) { int developerId = int.Parse(Request.Form["addUserId"]); manager.AddDeveloperToTask(developerId, taskId, accepted: true); } TempData["DetailsPage"] = "1"; TempData["overlayId"] = "TaskDetails"; TempData["TaskDetailsId"] = "" + taskId; return Redirect("/Projects/Details/" + projectId); }
private TaskDetailsModel CreateTaskDetailsModel(int userId, int taskId) { var manager = new TaskManager(); var project = manager.GetProjectForTask(taskId); ViewData["isLeader"] = new ProjectUserManager().IsLeader(userId, project.Id); var task = manager.GetTask(taskId); var stateName = manager.GetTaskStateName(taskId); var users = manager.GetUsersForTask(taskId); var workTimes = manager.GetAllWorkTimeForTask(taskId); var comments = manager.GetComments(taskId); var canComment = task.State == manager.GetActiveStateId(); var addableDevelopers = manager.GetAddableOrRemovableDevelopers( taskId, project.Id, addable: true); var removableDevelopers = manager.GetAddableOrRemovableDevelopers( taskId, project.Id, addable: false); var unacceptedDevelopers = manager.GetUnacceptedDevelopers(taskId); var unacceptedTaskStateChanges = manager.GetUnacceptedTaskStateChanges(taskId); var acceptedTaskStateChanges = manager.GetAcceptedTaskStateChanges(taskId); int deletedId = manager.GetDeletedStateId(); ViewData["deletedId"] = deletedId; int doneId = manager.GetDoneStateId(); ViewData["doneId"] = doneId; int activeId = manager.GetActiveStateId(); ViewData["activeId"] = activeId; int newId = manager.GetNewStateId(); ViewData["newId"] = newId; ViewData["isUserOnTask"] = users.Any(u => u.Id == userId); ViewData["isUserApplyUnaccepted"] = unacceptedDevelopers.Any(u => u.Id == userId); Boolean maxDevelopers = task.MaxDevelopers == null ? false : task.MaxDevelopers <= users.Count; ViewData["userHasWorktime"] = workTimes.Any(w => w.ProjectUserId == userId); List<string> devs = new List<string>(); foreach (var u in users) { devs.Add(u.UserName); } List<CommentViewModel> commentViewModels = new List<CommentViewModel>(); foreach (var comment in comments) { var commentingUser = new ProjectUserManager().GetUser(comment.ProjectUserId); commentViewModels.Add( new CommentViewModel(comment.Content, comment.Timestamp, commentingUser.UserName.Trim())); } Dictionary<string, int> userHours = new Dictionary<string, int>(); foreach (var d in devs) { userHours.Add(d, 0); } foreach (var workTime in workTimes) { var userName = users.First(u => u.Id == workTime.ProjectUserId).UserName; int elapsed = (int)(workTime.EndTime.Subtract(workTime.StartTime).TotalSeconds / 3600); int currentHours = userHours[userName]; userHours[userName] = currentHours + elapsed; } bool projectDone = new ProjectUserManager().IsDone(task.ProjectId); return new TaskDetailsModel(task, stateName, devs, userHours, commentViewModels, canComment, addableDevelopers, removableDevelopers, unacceptedDevelopers, unacceptedTaskStateChanges, acceptedTaskStateChanges, projectDone, maxDevelopers); }
public ActionResult RestoreTask(int taskId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; var reason = Request.Form["restoreReason"]; manager.RestoreTask(taskId, userId, reason); TempData["DetailsPage"] = "1"; return Redirect("/Projects/Details/" + projectId); }
public ActionResult ReopenTask(int taskId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; var isLeader = new ProjectUserManager().IsLeader(userId, projectId); var reason = Request.Form["reopenReason"]; manager.UnfinishTask(taskId, userId, reason, isLeader); TempData["DetailsPage"] = "1"; TempData["overlayId"] = "TaskDetails"; TempData["TaskDetailsId"] = "" + taskId; return Redirect("/Projects/Details/" + projectId); }
public ActionResult FinalizeUserApplication(int taskId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; if (!manager.FinalizeUserApplication(taskId)) { // TODO: error display } TempData["DetailsPage"] = "1"; TempData["overlayId"] = "TaskDetails"; TempData["TaskDetailsId"] = "" + taskId; return Redirect("/Projects/Details/" + projectId); }
public ActionResult ApplyDeveloper(int taskId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; manager.AddDeveloperToTask(userId, taskId, accepted: false); TempData["DetailsPage"] = "1"; TempData["overlayId"] = "TaskDetails"; TempData["TaskDetailsId"] = "" + taskId; return Redirect("/Projects/Details/" + projectId); }
public IEnumerable<TaskListElement> TaskList(int Id) { int userId = int.Parse(User.Identity.GetProjectUserId()); List<TaskListElement> res = new List<TaskListElement>(); var manager = new TaskManager(); foreach (Task t in manager.GetTasksForProject(Id)) { string stateName = manager.GetTaskStateName(t.State); IEnumerable<ProjectUser> devUsers = manager.GetUsersForTask(t.Id); List<string> devs = new List<string>(); foreach (var v in devUsers) { devs.Add(v.UserName); } var workHours = manager.GetAllWorkTimeForTask(t.Id) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); bool hasComments = manager.IsCommented(t.Id); res.Add(new TaskListElement(t.Id,t.Name, stateName, devs, (int)(workHours / 3600), hasComments)); } return res; }
private PartialViewResult ShowOverview(int projectId) { OverviewModel model; int userId = int.Parse(User.Identity.GetProjectUserId()); var managerTask = new TaskManager(); var managerProject = new ProjectUserManager(); var tasks = managerTask.GetTasksForProject(projectId); ViewData["isLeader"] = managerProject.IsLeader(userId, projectId); int tasksDone = tasks.Where(t => t.State == managerTask.GetDoneStateId()).Count(); int tasksActive = tasks.Where(t => t.State == managerTask.GetActiveStateId()).Count(); int tasksUnassigned = managerTask.GetUnassignedTasks(projectId).Count(); double workHours = managerTask.GetAllWorkTimeForProject(projectId) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); var users = managerProject.GetUsersForProject(projectId); List<string> devs = new List<string>(); foreach (var u in users) { devs.Add(u.UserName); } var project = managerProject.GetProject(projectId); var projectLeaderName = managerProject.GetProjectLeader(projectId).UserName; model = new OverviewModel( project, devs, tasksDone, tasksActive, tasksUnassigned, (int)(workHours / 3600), projectLeaderName); return PartialView("_Overview", model); }
private PartialViewResult ShowDevelopers(int projectId) { List<DeveloperListElement> model = new List<DeveloperListElement>(); int userId = int.Parse(User.Identity.GetProjectUserId()); var managerTask = new TaskManager(); var managerProject = new ProjectUserManager(); ViewData["projectId"] = projectId; ViewData["isLeader"] = managerProject.IsLeader(userId, projectId); ViewData["isDone"] = managerProject.GetProject(projectId).Done; var tasks = managerTask.GetTasksForProject(projectId); var users = managerProject.GetUsersForProject(projectId); foreach (var u in users) { var workHours = managerTask.GetAllWorkTimeForUser(u.Id, projectId) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); int tasksDone = tasks.Where(t => t.State == managerTask.GetDoneStateId()).Count(); int tasksAssigned = managerTask.GetAssignedTasks(u.Id, projectId).Count(); model.Add(new DeveloperListElement(u, (int)(workHours / 3600), tasksDone, tasksAssigned)); } return PartialView("_Developers", model); }
// GET: Projects public ActionResult Index() { int userId = int.Parse(User.Identity.GetProjectUserId()); var projectUserManager = new ProjectUserManager(); var taskManager = new TaskManager(); var projects = projectUserManager.GetProjectsForUser(userId); var projectListElements = new List<ProjectListElement>(); foreach (var p in projects) { int devs = projectUserManager.GetUsersForProject(p.Id).Count; int tasks = taskManager.GetTasksForProject(p.Id).Count; var element = new ProjectListElement(p, devs, tasks); projectListElements.Add(element); } if (TempData.ContainsKey("errorMessage")){ ViewData["errorMessage"] = TempData["errorMessage"]; } return View(new ProjectsViewModel(projectListElements)); }
public ActionResult Finish(int Id) { int userId = int.Parse(User.Identity.GetProjectUserId()); var project = new ProjectUserManager().GetProject(Id); var manager = new TaskManager(); var tasks = new TaskManager().GetTasksForProject(Id); if (tasks.Count == 0 || tasks.All(t => t.State == manager.GetDeletedStateId() || t.State == manager.GetDoneStateId())) { new ProjectUserManager().FinishProject(Id); } else { TempData["errorMessage"] = "Can't finish project, there are still tasks in progress!"; } return Redirect(Request.UrlReferrer.ToString()); }
private void BuildUserWorkTimeValues(List<object> xValues, List<object> yValues, DateTime startTime, DateTime endTime, int projectId) { var managerProject = new ProjectUserManager(); var managerTask = new TaskManager(); var users = managerProject.GetUsersForProject(projectId); foreach (var u in users) { double seconds = 0.0; if (startTime != DateTime.MinValue && endTime != DateTime.MinValue) { seconds = managerTask.GetAllWorkTimeForUser(u.Id, projectId) .Where(wt => wt.StartTime >= startTime && wt.EndTime <= endTime) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } else if (startTime != DateTime.MinValue && endTime == DateTime.MinValue) { seconds = managerTask.GetAllWorkTimeForUser(u.Id, projectId) .Where(wt => wt.StartTime >= startTime) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } else if (startTime == DateTime.MinValue && endTime != DateTime.MinValue) { seconds = managerTask.GetAllWorkTimeForUser(u.Id, projectId) .Where(wt => wt.EndTime <= endTime) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } else { seconds = managerTask.GetAllWorkTimeForUser(u.Id, projectId) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } xValues.Add(u.UserName); yValues.Add(((int)seconds / 3600)); } }
private void BuildTaskDoneWorktimeValues(List<object> xValues, List<object> yValues, DateTime startTime, DateTime endTime, int projectId) { var managerProject = new ProjectUserManager(); var managerTask = new TaskManager(); int doneId = managerTask.GetDoneStateId(); var doneTasks = managerTask.GetTasksForProject(projectId).Where(t => t.State == doneId); foreach (var t in doneTasks) { double seconds = 0.0; if (startTime != DateTime.MinValue && endTime != DateTime.MinValue) { seconds = managerTask.GetAllWorkTimeForTask(t.Id) .Where(wt => wt.StartTime >= startTime && wt.EndTime <= endTime) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } else if (startTime != DateTime.MinValue && endTime == DateTime.MinValue) { seconds = managerTask.GetAllWorkTimeForTask(t.Id) .Where(wt => wt.StartTime >= startTime) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } else if (startTime == DateTime.MinValue && endTime != DateTime.MinValue) { seconds = managerTask.GetAllWorkTimeForTask(t.Id) .Where(wt => wt.EndTime <= endTime) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } else { seconds = managerTask.GetAllWorkTimeForTask(t.Id) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); } xValues.Add(t.Name); yValues.Add(((int)seconds / 3600)); } }
private void BuildNumberOfFinishedTasksValues(List<object> xValues, List<object> yValues, DateTime startTime, DateTime endTime, int projectId) { var managerProject = new ProjectUserManager(); var managerTask = new TaskManager(); int count = 0; int doneId = managerTask.GetDoneStateId(); var doneTasks = managerTask.GetTasksForProject(projectId).Where(t => t.State == doneId); foreach (var t in doneTasks) { var dtst = managerTask.GetDoneTaskStateChanges(t.Id); if (dtst.Count == 0) // invalid test data continue; var max = dtst.Max(st => st.Timestamp); var finalStateChange = dtst.SingleOrDefault(st => st.Timestamp == max); if (startTime != DateTime.MinValue && endTime != DateTime.MinValue) { if (finalStateChange.Timestamp >= startTime && finalStateChange.Timestamp <= endTime) count++; } else if (startTime != DateTime.MinValue && endTime == DateTime.MinValue) { if (finalStateChange.Timestamp >= startTime) count++; } else if (startTime == DateTime.MinValue && endTime != DateTime.MinValue) { if (finalStateChange.Timestamp <= endTime) count++; } else { count++; } } xValues.Add("Finished Tasks"); yValues.Add(count); }
public ActionResult AddWorkTime(int taskId) { var manager = new TaskManager(); int userId = int.Parse(User.Identity.GetProjectUserId()); var projectId = manager.GetProjectForTask(taskId).Id; DateTime startTime = DateTime.Now.AddHours(1); DateTime endTime = DateTime.Now; try { startTime = DateTime.Parse(Request.Form["startTime"]); endTime = DateTime.Parse(Request.Form["endTime"]); } catch (Exception ex) { TempData["errorMessage"] = "Wrong date/time format!"; } if (startTime < endTime && startTime.AddMinutes(-5) < DateTime.Now) { WorktimeData data = new WorktimeData() { ProjectUserId = userId, TaskId = taskId, StartTime = startTime, EndTime = endTime }; if (!manager.AddWorkTime(data)) { TempData["errorMessage"] = "Overlapping work time!"; } } else { TempData["errorMessage"] = "Invalid start or end time!"; } TempData["DetailsPage"] = "1"; TempData["overlayId"] = "TaskDetails"; TempData["TaskDetailsId"] = "" + taskId; return Redirect("/Projects/Details/" + projectId); }
private PartialViewResult ShowTasks(int projectId) { List<TaskListElement> model = new List<TaskListElement>(); int userId = int.Parse(User.Identity.GetProjectUserId()); var manager = new TaskManager(); int deletedId = manager.GetDeletedStateId(); ViewData["projectId"] = projectId; ViewData["deletedId"] = deletedId; ViewData["isLeader"] = new ProjectUserManager().IsLeader(userId, projectId); ViewData["isDone"] = new ProjectUserManager().GetProject(projectId).Done; var tasks = manager.GetTasksForProject(projectId); foreach (var t in tasks) { var name = manager.GetTaskStateName(t.Id); var isCommented = manager.IsCommented(t.Id); var workHours = manager.GetAllWorkTimeForTask(t.Id) .Sum(w => w.EndTime.Subtract(w.StartTime).TotalSeconds); var developers = manager.GetUsersForTask(t.Id); List<string> devs = new List<string>(); foreach (var v in developers) { devs.Add(v.UserName); } TaskListElement element = new TaskListElement(t, name, devs, (int)(workHours / 3600), isCommented); model.Add(element); } return PartialView("_Tasks", model); }