public ActionResult ChangeTaskStatus(ChangeTaskStatusViewModel vm) { if (ModelState.IsValid) { var selectedTask = _taskRepository.Get(vm.TaskId); if (selectedTask != null) { selectedTask.TaskStatus = vm.TaskStatus; selectedTask.UpdatedByUserId = WebUser.Id; _taskRepository.Update(selectedTask); _unitOfWork.Commit(); // Add Task Effort var effort = new TaskEffort { TaskId = selectedTask.Id, Effort = vm.Effort, Comments = vm.Comments, CreatedByUserId = WebUser.Id }; _taskEffortRepository.Create(effort); _unitOfWork.Commit(); return(RedirectToAction("Details", "Projects", new { Id = selectedTask.ProjectId })); } } return(View(vm)); }
public async Task <IActionResult> UpdateStatus([FromForm] ChangeTaskStatusViewModel model) { var command = this.unitOfWork.Create <ChangeTaskStatusCommand>(); var result = await command.ExecuteAsync(model); return(Redirect($"/Tasks/Details/{model.Id}")); }
public ActionResult ChangeTaskStatus(int id) { var task = _taskRepository.Get(id); var vm = new ChangeTaskStatusViewModel { TaskId = task.Id, TaskStatus = task.TaskStatus }; return(View(vm)); }
public ActionResult ChangeTaskStatus(ChangeTaskStatusViewModel vm) { if (ModelState.IsValid) { var selectedTask = _taskRepository.Get(vm.Id, "Assignee.User.Person"); if (selectedTask != null) { selectedTask.TaskStatus = vm.TaskStatus; selectedTask.UpdatedByUserId = WebUser.Id; _taskRepository.Update(selectedTask); _unitOfWork.Commit(); #if !DEBUG _emailComposerService.TaskUpdated(selectedTask.Id); #endif // Add Task Effort var effort = new TaskEffort { TaskId = selectedTask.Id, Effort = vm.Effort, Comments = vm.Comments, CreatedByUserId = WebUser.Id }; _taskEffortRepository.Create(effort); _unitOfWork.Commit(); // Log as a Task Activity var activity = new TaskActivity { TaskId = selectedTask.Id, Title = "Changed Status", Comment = $"{WebUser.Name} changed status of the Task at {DateTime.UtcNow.ToString("G")} to state {selectedTask.TaskStatus}, with comments - {vm.Comments}", CreatedByUserId = WebUser.Id }; _taskActivityRepository.Create(activity); _unitOfWork.Commit(); // Notify Creator of the Task var createdByUser = _userRepository.Get(selectedTask.CreatedByUserId); if (createdByUser != null) { var message = $"{selectedTask.Title} has been changed to {selectedTask.TaskStatus}"; _notificationService.NotifyUser("Task Status Changed", message, createdByUser.Code); } return(RedirectToAction("Details", "Tasks", new { selectedTask.Id })); } } return(View(vm)); }
public Events ChangeTaskStatus(Tasks task, ChangeTaskStatusViewModel model, ClaimsPrincipal principal) { return(_repo.Create(new Events { Action = "CHANGE_TASK_STATUS", Data = JsonConvert.SerializeObject(new { task_id = task.Id, status = model.status }), Message = $"{task.Name} status has been changed to {model.status} " + $"by {principal.FindFirstValue(AppClaimTypes.Username)}", Time = DateTime.UtcNow, UserId = principal.Identity.Name }).Entity); }
public IActionResult ChangeStatus(int id, [FromForm] ChangeTaskStatusViewModel model) { try { if (ModelState.IsValid) { var domain = Service <TaskDomain>(); var task = domain.Tasks.Id(id); if (task == null) { return(NotFound(new ApiResult() { Code = ResultCode.NotFound, Message = ResultCode.NotFound.DisplayName() })); } //validation var mess = ""; var status = JsonConvert.DeserializeObject <IEnumerable <string> >(task.Status); switch (model.status) { case "DOING": if (!status.Contains("NEW") && !status.Contains(model.status)) { mess += "Can not change to DOING\n"; } break; case "DONE": if (!status.Contains("DOING") && !status.Contains(model.status)) { mess += "Can not finish\n"; } if (string.IsNullOrWhiteSpace(model.task_report)) { mess += "Must have report"; } break; case "CANCEL": if ((status.Contains("DONE") || status.Contains("FINISH CONFIRM")) && !status.Contains(model.status)) { mess += "Can not cancel\n"; } if (string.IsNullOrWhiteSpace(model.task_report)) { mess += "Must have report\n"; } break; case "ACCEPTED": if (status.Contains("FINISH CONFIRMED") && !status.Contains(model.status)) { mess += "Already finish\n"; } if (status.Contains("CANCEL")) { mess += "Already cancel\n"; } break; case "DECLINED": if (status.Contains("FINISH CONFIRMED") && !status.Contains(model.status)) { mess += "Already finish\n"; } if (status.Contains("CANCEL")) { mess += "Already cancel\n"; } if (string.IsNullOrWhiteSpace(model.manager_review)) { mess += "Must have a review\n"; } break; case "FINISH CONFIRMED": if (!status.Contains("DONE") && !status.Contains(model.status)) { mess += "Haven't done yet\n"; } if (string.IsNullOrWhiteSpace(model.manager_review)) { mess += "Must have a review\n"; } break; default: mess += "Unsupported status\n"; break; } if (!string.IsNullOrEmpty(mess)) { return(BadRequest(new ApiResult { Code = ResultCode.FailValidation, Message = mess })); } //end validation domain.ChangeStatus(task, model); var ev = _eDomain.ChangeTaskStatus(task, model, User); _uow.SaveChanges(); if (task.OfUser != task.CreatedUser) { var data = new Dictionary <string, string>(); data["title"] = "Your task status has been changed"; data["message"] = ev.Message; _eDomain.Notify(new Message { Topic = User.Identity.Name == task.OfUser ? task.CreatedUser : task.OfUser, Data = data }); } _logger.CustomProperties(new { id, model }).Info("Change status"); return(NoContent()); } var message = ""; message += string.Join('\n', ModelState["status"].Errors.Select(e => e.ErrorMessage).ToList()); message += string.Join('\n', ModelState["mark"].Errors.Select(e => e.ErrorMessage).ToList()); message += string.Join('\n', ModelState["id"].Errors.Select(e => e.ErrorMessage).ToList()); message += string.Join('\n', ModelState["manager_review"].Errors.Select(e => e.ErrorMessage).ToList()); return(BadRequest(new ApiResult() { Code = ResultCode.FailValidation, Data = ModelState, Message = message })); } catch (Exception e) { _logger.Error(e); return(Error(new ApiResult() { Code = ResultCode.UnknownError, Message = ResultCode.UnknownError.DisplayName() + ": " + e.Message })); } }
public Tasks ChangeStatus(Tasks entity, ChangeTaskStatusViewModel model) { var currentStatus = JsonConvert.DeserializeObject <List <string> >(entity.Status); currentStatus.Remove(model.status); switch (model.status) { case "DOING": currentStatus.Remove("NEW"); currentStatus.Add(model.status); entity.StartTime = DateTime.UtcNow; break; case "DONE": currentStatus.Remove("DOING"); currentStatus.Remove("DUE SOON"); currentStatus.Add(model.status); entity.EndTime = DateTime.UtcNow; entity.TaskReport = model.task_report; if (model.confirm_image != null) { entity.ConfirmImage = UploadConfirmImage(entity, model.confirm_image); } break; case "CANCEL": currentStatus.Remove("DOING"); currentStatus.Remove("NEW"); currentStatus.Add(model.status); entity.TaskReport = model.task_report; break; case "DECLINED": currentStatus.Remove("ACCEPTED"); currentStatus.Add(model.status); entity.Mark = model.mark; entity.ReviewTime = DateTime.UtcNow; entity.ManagerReview = model.manager_review; break; case "ACCEPTED": currentStatus.Remove("DECLINED"); currentStatus.Add(model.status); entity.ManagerReview = model.manager_review; entity.Mark = model.mark; break; case "FINISH CONFIRMED": currentStatus.Remove("DUE SOON"); currentStatus.Remove("ACCEPTED"); currentStatus.Remove("DECLINED"); currentStatus.Add(model.status); entity.Mark = model.mark; entity.Status = model.status; entity.ManagerReview = model.manager_review; entity.ReviewTime = DateTime.UtcNow; break; default: throw new Exception("Unsupported status"); } entity.Status = JsonConvert.SerializeObject(currentStatus); return(entity); }