Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 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));
        }
Ejemplo n.º 3
0
        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);
        }