示例#1
0
        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));
        }
示例#2
0
        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));
        }