public void Delete(Task task) { if (task == null) { throw new ArgumentNullException("task"); } ProjectSecurity.DemandEdit(task); task.SubTasks.ForEach(subTask => _subtaskDao.Delete(subTask.ID)); _taskDao.Delete(task.ID); var milestone = task.Milestone != 0 ? _milestoneDao.GetById(task.Milestone) : null; TimeLinePublisher.Task(task, milestone, EngineResource.ActionText_Delete, UserActivityConstants.ActivityActionType, UserActivityConstants.NormalActivity); var objectID = task.UniqID + "_" + task.Project.ID; var recipients = NotifySource.Instance.GetSubscriptionProvider().GetRecipients(NotifyConstants.Event_NewCommentForTask, objectID) .Where(r => r.ID != SecurityContext.CurrentAccount.ID.ToString()).ToList(); if (recipients.Count != 0) { NotifyClient.Instance.SendAboutTaskDeleting(recipients, 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)); }
public Task SaveOrUpdate(Task task, IEnumerable <int> attachedFileIds, bool notifyResponsible, bool isImport) { if (task == null) { throw new ArgumentNullException("task"); } if (task.Project == null) { throw new Exception("task.Project"); } var milestone = task.Milestone != 0 ? _milestoneDao.GetById(task.Milestone) : null; var milestoneResponsible = milestone != null ? milestone.Responsible : Guid.Empty; task.LastModifiedBy = SecurityContext.CurrentAccount.ID; task.LastModifiedOn = TenantUtil.DateTimeNow(); var isNew = task.ID == default(int); //Task is new if (isNew) { if (task.CreateBy == default(Guid)) { task.CreateBy = SecurityContext.CurrentAccount.ID; } if (task.CreateOn == default(DateTime)) { task.CreateOn = TenantUtil.DateTimeNow(); } ProjectSecurity.DemandCreateTask(task.Project); task = _taskDao.Save(task); TimeLinePublisher.Task(task, milestone, isImport ? EngineResource.ActionText_Imported : EngineResource.ActionText_Create, UserActivityConstants.ContentActionType, UserActivityConstants.NormalContent, true); } else { //changed task ProjectSecurity.DemandEdit(GetByID(new[] { task.ID }).FirstOrDefault()); task = _taskDao.Save(task); TimeLinePublisher.Task(task, milestone, EngineResource.ActionText_Update, UserActivityConstants.ActivityActionType, UserActivityConstants.NormalActivity); } if (attachedFileIds != null && attachedFileIds.Count() > 0) { foreach (var attachedFileId in attachedFileIds) { _fileEngine.AttachFileToTask(task.ID, attachedFileId); } } //Object id for sender var objectID = task.UniqID + "_" + task.Project.ID; var senders = new HashSet <Guid>(task.Responsibles) { task.Project.Responsible, milestoneResponsible, task.CreateBy, task.Responsible }; senders.Remove(Guid.Empty); var subscriptionProvider = NotifySource.Instance.GetSubscriptionProvider(); var recipientsProvider = NotifySource.Instance.GetRecipientsProvider(); var recipients = senders .Select(r => recipientsProvider.GetRecipient(r.ToString())) .Where(r => r != null && !IsUnsubscribedToTask(task, r.ID)) .ToList(); foreach (var recipient in recipients) { subscriptionProvider.Subscribe(NotifyConstants.Event_NewCommentForTask, objectID, recipient); } recipients.RemoveAll(r => r.ID == SecurityContext.CurrentAccount.ID.ToString()); if (isNew) { NotifyTaskCreated(task, recipients, milestoneResponsible, notifyResponsible); } else { NotifyTaskEdited(task, notifyResponsible); } return(task); }