Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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}"));
        }
Ejemplo n.º 3
0
        public ActionResult ChangeTaskStatus(int id)
        {
            var task = _taskRepository.Get(id);
            var vm   = new ChangeTaskStatusViewModel {
                TaskId = task.Id, TaskStatus = task.TaskStatus
            };

            return(View(vm));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
0
        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
                }));
            }
        }
Ejemplo n.º 7
0
        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);
        }