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)); }
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); }