public Subtask ChangeStatus(Task task, Subtask subtask, TaskStatus newStatus) { if (subtask == null) { throw new Exception("subtask.Task"); } if (task == null) { throw new ArgumentNullException("task"); } if (task.Status == TaskStatus.Closed) { throw new Exception("task can't be closed"); } if (subtask.Status == newStatus) { return(subtask); } ProjectSecurity.DemandEdit(task, subtask); switch (newStatus) { case TaskStatus.Closed: TimeLinePublisher.Subtask(subtask, task, EngineResource.ActionText_Closed, UserActivityConstants.ActivityActionType, UserActivityConstants.ImportantActivity); break; case TaskStatus.Open: TimeLinePublisher.Subtask(subtask, task, subtask.Status == TaskStatus.Closed ? EngineResource.ActionText_Reopen : EngineResource.ActionText_Accept, UserActivityConstants.ActivityActionType, UserActivityConstants.SmallActivity); break; } subtask.Status = newStatus; subtask.LastModifiedBy = SecurityContext.CurrentAccount.ID; subtask.LastModifiedOn = TenantUtil.DateTimeNow(); subtask.StatusChangedOn = TenantUtil.DateTimeNow(); if (subtask.Responsible.Equals(Guid.Empty)) { subtask.Responsible = SecurityContext.CurrentAccount.ID; } var objectID = task.UniqID + "_" + task.Project.ID; var senders = NotifySource.Instance.GetSubscriptionProvider().GetRecipients(NotifyConstants.Event_NewCommentForTask, objectID).ToList(); senders.RemoveAll(r => r.ID == SecurityContext.CurrentAccount.ID.ToString()); if (task.Status != TaskStatus.Closed && newStatus == TaskStatus.Closed && !_factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutSubTaskClosing(senders, task, subtask); } if (task.Status != TaskStatus.Closed && newStatus == TaskStatus.Open && !_factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutSubTaskResumed(senders, task, subtask); } return(_subtaskDao.Save(subtask)); }
public Subtask ChangeStatus(Task task, Subtask subtask, TaskStatus newStatus) { if (subtask == null) { throw new Exception("subtask.Task"); } if (task == null) { throw new ArgumentNullException("task"); } if (task.Status == TaskStatus.Closed) { throw new Exception("task can't be closed"); } if (subtask.Status == newStatus) { return(subtask); } ProjectSecurity.DemandEdit(task, subtask); subtask.Status = newStatus; subtask.LastModifiedBy = SecurityContext.CurrentAccount.ID; subtask.LastModifiedOn = TenantUtil.DateTimeNow(); subtask.StatusChangedOn = TenantUtil.DateTimeNow(); if (subtask.Responsible.Equals(Guid.Empty)) { subtask.Responsible = SecurityContext.CurrentAccount.ID; } var senders = GetSubscribers(task); if (task.Status != TaskStatus.Closed && newStatus == TaskStatus.Closed && !factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutSubTaskClosing(senders, task, subtask); } if (task.Status != TaskStatus.Closed && newStatus == TaskStatus.Open && !factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutSubTaskResumed(senders, task, subtask); } return(subtaskDao.Save(subtask)); }