Пример #1
0
        public Milestone ChangeStatus(Milestone milestone, MilestoneStatus newStatus)
        {
            ProjectSecurity.DemandEdit(milestone);

            if (milestone == null)
            {
                throw new ArgumentNullException("milestone");
            }
            if (milestone.Project == null)
            {
                throw new Exception("Project can be null.");
            }
            if (milestone.Status == newStatus)
            {
                return(milestone);
            }

            switch (newStatus)
            {
            case MilestoneStatus.Closed:
                TimeLinePublisher.Milestone(milestone, EngineResource.ActionText_Closed, UserActivityConstants.ActivityActionType, UserActivityConstants.ImportantActivity);
                break;


            case MilestoneStatus.Open:
                TimeLinePublisher.Milestone(milestone, EngineResource.ActionText_Reopen, UserActivityConstants.ActivityActionType, UserActivityConstants.NormalActivity);
                break;
            }


            milestone.Status          = newStatus;
            milestone.LastModifiedBy  = SecurityContext.CurrentAccount.ID;
            milestone.LastModifiedOn  = TenantUtil.DateTimeNow();
            milestone.StatusChangedOn = TenantUtil.DateTimeNow();

            var senders = new HashSet <Guid> {
                milestone.Project.Responsible, milestone.CreateBy, milestone.Responsible
            };

            senders.Remove(SecurityContext.CurrentAccount.ID);

            var recipientsProvider = NotifySource.Instance.GetRecipientsProvider();
            var recipients         = senders.Select(r => recipientsProvider.GetRecipient(r.ToString())).Where(r => r != null).ToList();

            if (newStatus == MilestoneStatus.Closed && !_engineFactory.DisableNotifications && recipients.Count != 0)
            {
                NotifyClient.Instance.SendAboutMilestoneClosing(recipients, milestone);
            }

            return(milestoneDao.Save(milestone));
        }
Пример #2
0
        public Milestone SaveOrUpdate(Milestone milestone, bool notifyResponsible, bool import)
        {
            if (milestone == null)
            {
                throw new ArgumentNullException("milestone");
            }
            if (milestone.Project == null)
            {
                throw new Exception("milestone.project is null");
            }

            milestone.LastModifiedBy = SecurityContext.CurrentAccount.ID;
            milestone.LastModifiedOn = TenantUtil.DateTimeNow();

            var isNew = milestone.ID == default(int);//Task is new

            if (isNew)
            {
                if (milestone.CreateBy == default(Guid))
                {
                    milestone.CreateBy = SecurityContext.CurrentAccount.ID;
                }
                if (milestone.CreateOn == default(DateTime))
                {
                    milestone.CreateOn = TenantUtil.DateTimeNow();
                }

                ProjectSecurity.DemandCreateMilestone(milestone.Project);
                milestone = milestoneDao.Save(milestone);
                TimeLinePublisher.Milestone(milestone, import ? EngineResource.ActionText_Imported : EngineResource.ActionText_Create, UserActivityConstants.ContentActionType, UserActivityConstants.ImportantContent);
            }
            else
            {
                ProjectSecurity.DemandEdit(milestone);
                milestone = milestoneDao.Save(milestone);
                TimeLinePublisher.Milestone(milestone, EngineResource.ActionText_Update, UserActivityConstants.ActivityActionType, UserActivityConstants.ImportantActivity);
            }


            if (!milestone.Responsible.Equals(Guid.Empty))
            {
                NotifyMilestone(milestone, notifyResponsible, isNew);
            }


            var objectId = String.Format("{0}_{1}", milestone.UniqID, milestone.Project.ID);

            NotifySource.Instance.GetSubscriptionProvider().Subscribe(NotifyConstants.Event_NewCommentForMilestone, objectId, NotifySource.Instance.GetRecipientsProvider().GetRecipient(SecurityContext.CurrentAccount.ID.ToString()));
            return(milestone);
        }