public Subtask ChangeStatus(Task task, Subtask subtask, TaskStatus newStatus) { if (subtask == null) { throw new Exception("subtask.Task"); } if (task == null) { throw new ArgumentNullException("task"); } if (task.Status == TaskStatus.Closed) { throw new Exception("task can't be closed"); } if (subtask.Status == newStatus) { return(subtask); } ProjectSecurity.DemandEdit(task, subtask); switch (newStatus) { case TaskStatus.Closed: TimeLinePublisher.Subtask(subtask, task, EngineResource.ActionText_Closed, UserActivityConstants.ActivityActionType, UserActivityConstants.ImportantActivity); break; case TaskStatus.Open: TimeLinePublisher.Subtask(subtask, task, subtask.Status == TaskStatus.Closed ? EngineResource.ActionText_Reopen : EngineResource.ActionText_Accept, UserActivityConstants.ActivityActionType, UserActivityConstants.SmallActivity); break; } subtask.Status = newStatus; subtask.LastModifiedBy = SecurityContext.CurrentAccount.ID; subtask.LastModifiedOn = TenantUtil.DateTimeNow(); subtask.StatusChangedOn = TenantUtil.DateTimeNow(); if (subtask.Responsible.Equals(Guid.Empty)) { subtask.Responsible = SecurityContext.CurrentAccount.ID; } var objectID = task.UniqID + "_" + task.Project.ID; var senders = NotifySource.Instance.GetSubscriptionProvider().GetRecipients(NotifyConstants.Event_NewCommentForTask, objectID).ToList(); senders.RemoveAll(r => r.ID == SecurityContext.CurrentAccount.ID.ToString()); if (task.Status != TaskStatus.Closed && newStatus == TaskStatus.Closed && !_factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutSubTaskClosing(senders, task, subtask); } if (task.Status != TaskStatus.Closed && newStatus == TaskStatus.Open && !_factory.DisableNotifications && senders.Count != 0) { NotifyClient.Instance.SendAboutSubTaskResumed(senders, task, subtask); } return(_subtaskDao.Save(subtask)); }
public virtual void SetTeamSecurity(Project project, Participant participant, ProjectTeamSecurity teamSecurity, bool visible) { if (project == null) { throw new ArgumentNullException("project"); } if (participant == null) { throw new ArgumentNullException("participant"); } ProjectSecurity.DemandEditTeam(project); var security = projectDao.GetTeamSecurity(project.ID, participant.ID); if (visible) { if (security != ProjectTeamSecurity.None) { security ^= teamSecurity; } } else { security |= teamSecurity; } projectDao.SetTeamSecurity(project.ID, participant.ID, security); TimeLinePublisher.TeamSecurity(project, participant); }
public Comment SaveMilestoneComment(Milestone milestone, Comment comment) { _engineFactory.GetCommentEngine().SaveOrUpdate(comment); NotifyNewComment(comment, milestone); TimeLinePublisher.Comment(milestone, EngineResource.ActionText_Add); return(comment); }
public void Delete(Subtask subtask, Task task) { if (subtask == null) { throw new ArgumentNullException("subtask"); } if (task == null) { throw new ArgumentNullException("task"); } ProjectSecurity.DemandEdit(task, subtask); _subtaskDao.Delete(subtask.ID); TimeLinePublisher.Subtask(subtask, task, 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.Any()) { NotifyClient.Instance.SendAboutSubTaskDeleting(recipients, task, subtask); } }
public Comment SaveMessageComment(Message message, Comment comment) { ProjectSecurity.DemandRead(message); _engineFactory.GetCommentEngine().SaveOrUpdate(comment); NotifyComment(comment, message); TimeLinePublisher.Comment(message, EngineResource.ActionText_Add); return(comment); }
public TimeSpend SaveOrUpdate(TimeSpend timeSpend, bool isImport) { TimeLinePublisher.TimeSpend(timeSpend, timeSpend.Task.Project, timeSpend.Task, isImport ? EngineResource.ActionText_Imported : EngineResource.ActionText_Add, UserActivityConstants.ActivityActionType, UserActivityConstants.SmallActivity); return(timeSpendDao.Save(timeSpend)); }
public virtual void Delete(int projectId) { var project = GetByID(projectId); if (project == null) { return; } ProjectSecurity.DemandEdit(project); projectDao.Delete(projectId); TimeLinePublisher.Project(project, EngineResource.ActionText_Delete, UserActivityConstants.ActivityActionType, UserActivityConstants.Max); }
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 Comment SaveOrUpdateTaskComment(Task task, Comment comment) { ProjectSecurity.DemandRead(task); _factory.GetCommentEngine().SaveOrUpdate(comment); NotifyNewComment(comment, task); SubscribeToTask(task, SecurityContext.CurrentAccount.ID); TimeLinePublisher.Comment(task, EngineResource.ActionText_Add); return(comment); }
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); }
public Message SaveOrUpdate(Message message, bool notify, IEnumerable <Guid> participant, IEnumerable <int> fileIds, bool isImport) { if (message == null) { throw new ArgumentNullException("message"); } var isNew = message.ID == default(int); message.LastModifiedBy = SecurityContext.CurrentAccount.ID; message.LastModifiedOn = TenantUtil.DateTimeNow(); if (isNew) { if (message.CreateBy == default(Guid)) { message.CreateBy = SecurityContext.CurrentAccount.ID; } if (message.CreateOn == default(DateTime)) { message.CreateOn = TenantUtil.DateTimeNow(); } ProjectSecurity.DemandCreateMessage(message.Project); _messageDao.Save(message); TimeLinePublisher.Message(message, isImport ? EngineResource.ActionText_Imported : EngineResource.ActionText_Create, UserActivityConstants.ContentActionType, UserActivityConstants.NormalContent); } else { ProjectSecurity.DemandEdit(message); _messageDao.Save(message); TimeLinePublisher.Message(message, EngineResource.ActionText_Update, UserActivityConstants.ActivityActionType, UserActivityConstants.NormalActivity, true); } var fileEngine = _engineFactory.GetFileEngine(); if (fileIds != null) { foreach (var fileId in fileIds) { fileEngine.AttachFileToMessage(message.ID, fileId); } } NotifyParticipiant(message, isNew, participant, fileEngine.GetMessageFiles(message), notify); return(message); }
public virtual Project SaveOrUpdate(Project project, bool notifyManager, bool isImport) { if (project == null) { throw new ArgumentNullException("project"); } project.LastModifiedBy = SecurityContext.CurrentAccount.ID; project.LastModifiedOn = TenantUtil.DateTimeNow(); if (project.ID == 0) { if (project.CreateBy == default(Guid)) { project.CreateBy = SecurityContext.CurrentAccount.ID; } if (project.CreateOn == default(DateTime)) { project.CreateOn = TenantUtil.DateTimeNow(); } ProjectSecurity.DemandCreateProject(); projectDao.Save(project); TimeLinePublisher.Project(project, isImport ? EngineResource.ActionText_Imported: EngineResource.ActionText_Create, UserActivityConstants.ContentActionType, UserActivityConstants.Max); } else { ProjectSecurity.DemandEdit(project); projectDao.Save(project); if (!project.Private) { ResetTeamSecurity(project); } TimeLinePublisher.Project(project, EngineResource.ActionText_Update, UserActivityConstants.ActivityActionType, UserActivityConstants.Max); } if (notifyManager && !_factory.DisableNotifications && !project.Responsible.Equals(SecurityContext.CurrentAccount.ID)) { NotifyClient.Instance.SendAboutResponsibleByProject(project.Responsible, project); } return(project); }
public virtual void RemoveFromTeam(Project project, Participant participant, bool sendNotification) { if (project == null) { throw new ArgumentNullException("project"); } if (participant == null) { throw new ArgumentNullException("participant"); } ProjectSecurity.DemandEditTeam(project); projectDao.RemoveFromTeam(project.ID, participant.ID); TimeLinePublisher.Team(project, participant.UserInfo, EngineResource.ActionText_DeletedFromTeam); if (!_factory.DisableNotifications && sendNotification) { NotifyClient.Instance.SendRemovingFromProjectTeam(participant.ID, project); } }
public virtual void AddToTeam(Project project, Participant participant, bool sendNotification) { if (project == null) { throw new ArgumentNullException("project"); } if (participant == null) { throw new ArgumentNullException("participant"); } ProjectSecurity.DemandEditTeam(project); projectDao.AddToTeam(project.ID, participant.ID); TimeLinePublisher.Team(project, participant.UserInfo, EngineResource.ActionText_AddToTeam); if (!_factory.DisableNotifications && sendNotification && !project.Responsible.Equals(participant.ID)) { NotifyClient.Instance.SendInvaiteToProjectTeam(participant.ID, project); } }
public void Delete(Message message) { if (message == null) { throw new ArgumentNullException("message"); } if (message.Project == null) { throw new Exception("Project"); } ProjectSecurity.DemandEdit(message); TimeLinePublisher.Message(message, EngineResource.ActionText_Delete, UserActivityConstants.ActivityActionType, UserActivityConstants.SmallActivity); _messageDao.Delete(message.ID); String objectID = String.Format("{0}_{1}", message.UniqID, message.Project.ID); NotifySource.Instance.GetSubscriptionProvider().UnSubscribe(NotifyConstants.Event_NewCommentForMessage, objectID); }
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 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); }
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 Subtask SaveOrUpdate(Subtask subtask, Task task) { if (subtask == null) { throw new Exception("subtask.Task"); } if (task == null) { throw new ArgumentNullException("task"); } if (task.Status == TaskStatus.Closed) { throw new Exception("task can't be closed"); } var isNew = subtask.ID == default(int); //Task is new subtask.LastModifiedBy = SecurityContext.CurrentAccount.ID; subtask.LastModifiedOn = TenantUtil.DateTimeNow(); if (isNew) { if (subtask.CreateBy == default(Guid)) { subtask.CreateBy = SecurityContext.CurrentAccount.ID; } if (subtask.CreateOn == default(DateTime)) { subtask.CreateOn = TenantUtil.DateTimeNow(); } ProjectSecurity.DemandEdit(task); subtask = _subtaskDao.Save(subtask); TimeLinePublisher.Subtask(subtask, task, EngineResource.ActionText_Create, UserActivityConstants.ContentActionType, UserActivityConstants.NormalContent); } else { //changed task ProjectSecurity.DemandEdit(task, GetById(subtask.ID)); subtask = _subtaskDao.Save(subtask); TimeLinePublisher.Subtask(subtask, task, EngineResource.ActionText_Update, 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() && r.ID != subtask.Responsible.ToString() && r.ID != subtask.CreateBy.ToString()) .ToList(); NotifySubtask(task, subtask, recipients, isNew); var senders = new HashSet <Guid> { subtask.Responsible, subtask.CreateBy }; senders.Remove(Guid.Empty); foreach (var sender in senders) { _factory.GetTaskEngine().SubscribeToTask(task, sender); } return(subtask); }