public Task ChangeStatus(Task task, TaskStatus newStatus) { ProjectSecurity.DemandEdit(task); if (task == null) { throw new ArgumentNullException("task"); } if (task.Project == null) { throw new Exception("Project can't be null."); } if (task.Project.Status == ProjectStatus.Closed) { throw new Exception(EngineResource.ProjectClosedError); } if (task.Status == newStatus) { return(task); } var senders = GetSubscribers(task); if (newStatus == TaskStatus.Closed && !factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutTaskClosing(senders, task); } if (newStatus == TaskStatus.Open && !factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutTaskResumed(senders, task); } task.Status = newStatus; task.LastModifiedBy = SecurityContext.CurrentAccount.ID; task.LastModifiedOn = TenantUtil.DateTimeNow(); task.StatusChangedOn = TenantUtil.DateTimeNow(); //subtask if (newStatus == TaskStatus.Closed) { if (!task.Responsibles.Any()) { task.Responsibles.Add(SecurityContext.CurrentAccount.ID); } subtaskDao.CloseAllSubtasks(task); foreach (var subTask in task.SubTasks) { subTask.Status = TaskStatus.Closed; } } return(taskDao.Save(task)); }
public Task ChangeStatus(Task task, TaskStatus newStatus) { ProjectSecurity.DemandEdit(task); if (task == null) { throw new ArgumentNullException("task"); } if (task.Project == null) { throw new Exception("Project can be null."); } if (task.Status == newStatus) { return(task); } var objectID = String.Format("{0}_{1}", task.UniqID, task.Project.ID); var milestone = task.Milestone != 0 ? _milestoneDao.GetById(task.Milestone) : null; switch (newStatus) { case TaskStatus.Closed: TimeLinePublisher.Task(task, milestone, EngineResource.ActionText_Closed, UserActivityConstants.ActivityActionType, UserActivityConstants.ImportantActivity); break; case TaskStatus.Open: TimeLinePublisher.Task(task, milestone, task.Status == TaskStatus.Closed ? EngineResource.ActionText_Reopen : EngineResource.ActionText_Accept, UserActivityConstants.ActivityActionType, UserActivityConstants.NormalActivity); break; } var senders = NotifySource.Instance.GetSubscriptionProvider().GetRecipients(NotifyConstants.Event_NewCommentForTask, objectID).ToList(); senders.RemoveAll(r => r.ID == SecurityContext.CurrentAccount.ID.ToString()); if (newStatus == TaskStatus.Closed && !_factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutTaskClosing(senders, task); } if (newStatus == TaskStatus.Open && !_factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutTaskResumed(senders, task); } _taskDao.TaskTrace(task.ID, (Guid)CallContext.GetData("CURRENT_ACCOUNT"), TenantUtil.DateTimeNow(), newStatus); task.Status = newStatus; task.LastModifiedBy = SecurityContext.CurrentAccount.ID; task.LastModifiedOn = TenantUtil.DateTimeNow(); task.StatusChangedOn = TenantUtil.DateTimeNow(); //subtask if (newStatus == TaskStatus.Closed) { if (task.Responsible.Equals(Guid.Empty)) { task.Responsible = SecurityContext.CurrentAccount.ID; } _subtaskDao.CloseAllSubtasks(task); } return(_taskDao.Save(task)); }