protected override string GetCacheHash() { return(SecurityContext.CurrentAccount.ID.ToString() + CoreContext.UserManager.GetMaxUsersLastModified().Ticks.ToString(CultureInfo.InvariantCulture) + CoreContext.UserManager.GetMaxGroupsLastModified().Ticks.ToString(CultureInfo.InvariantCulture) + ProjectSecurity.CanCreateProject() + ProjectsCommonSettings.LoadForCurrentUser().StartModuleType); }
protected override string GetCacheHash() { using (var scope = DIHelper.Resolve()) { var engineFactory = scope.Resolve <EngineFactory>(); var currentUserId = SecurityContext.CurrentAccount.ID.ToString(); var userLastModified = CoreContext.UserManager.GetMaxUsersLastModified().Ticks.ToString(CultureInfo.InvariantCulture); var projectMaxLastModified = engineFactory.ProjectEngine.GetMaxLastModified().ToString(CultureInfo.InvariantCulture); var milestoneMaxLastModified = engineFactory.MilestoneEngine.GetLastModified(); var paused = ProjectsCommonSettings.LoadForCurrentUser().HideEntitiesInPausedProjects; return(string.Format("{0}|{1}|{2}|{3}|{4}", currentUserId, userLastModified, projectMaxLastModified, milestoneMaxLastModified, paused)); } }
protected override IEnumerable <KeyValuePair <string, object> > GetClientVariables(HttpContext context) { return(new List <KeyValuePair <string, object> >(1) { RegisterObject( new { CanCreateProject = ProjectSecurity.CanCreateProject(), IsModuleAdmin = ProjectSecurity.CurrentUserAdministrator, StartModule.GetInstance(ProjectsCommonSettings.LoadForCurrentUser().StartModuleType).StartModuleType }) }); }
protected override string GetCacheHash() { using (var scope = DIHelper.Resolve()) { var projectSecurity = scope.Resolve <ProjectSecurity>(); return(SecurityContext.CurrentAccount.ID.ToString() + CoreContext.UserManager.GetMaxUsersLastModified().Ticks.ToString(CultureInfo.InvariantCulture) + CoreContext.UserManager.GetMaxGroupsLastModified().Ticks.ToString(CultureInfo.InvariantCulture) + projectSecurity.CanCreate <Project>(null) + ProjectsCommonSettings.LoadForCurrentUser().StartModuleType); } }
public ProjectsCommonSettings GetSettings() { var commonSettings = ProjectsCommonSettings.Load(); var userSettings = ProjectsCommonSettings.LoadForCurrentUser(); return(new ProjectsCommonSettings { EverebodyCanCreate = commonSettings.EverebodyCanCreate, HideEntitiesInPausedProjects = commonSettings.HideEntitiesInPausedProjects, StartModuleType = userSettings.StartModuleType, FolderId = userSettings.FolderId, }); }
public ProjectsCommonSettings UpdateSettings(bool?everebodyCanCreate, bool?hideEntitiesInPausedProjects, StartModuleType?startModule, object folderId) { if (everebodyCanCreate.HasValue || hideEntitiesInPausedProjects.HasValue) { if (!ProjectSecurity.CurrentUserAdministrator) { ProjectSecurity.CreateSecurityException(); } var settings = ProjectsCommonSettings.Load(); if (everebodyCanCreate.HasValue) { settings.EverebodyCanCreate = everebodyCanCreate.Value; } if (hideEntitiesInPausedProjects.HasValue) { settings.HideEntitiesInPausedProjects = hideEntitiesInPausedProjects.Value; } settings.Save(); return(settings); } if (startModule.HasValue || folderId != null) { if (!ProjectSecurity.IsProjectsEnabled(CurrentUserId)) { ProjectSecurity.CreateSecurityException(); } var settings = ProjectsCommonSettings.LoadForCurrentUser(); if (startModule.HasValue) { settings.StartModuleType = startModule.Value; } if (folderId != null) { settings.FolderId = folderId; } settings.SaveForCurrentUser(); return(settings); } return(null); }
protected override IEnumerable <KeyValuePair <string, object> > GetClientVariables(HttpContext context) { using (var scope = DIHelper.Resolve()) { var projectSecurity = scope.Resolve <ProjectSecurity>(); return(new List <KeyValuePair <string, object> >(1) { RegisterObject( new { CanCreateProject = projectSecurity.CanCreate <Project>(null), IsModuleAdmin = projectSecurity.CurrentUserAdministrator, ProjectsCommonSettings.LoadForCurrentUser().StartModuleType }) }); } }
internal void SaveDocbuilderReport(ReportState state, string url) { var data = new System.Net.WebClient().DownloadData(url); using (var memStream = new MemoryStream(data)) { Action <Stream> action = stream => { var file = FileUploader.Exec(ProjectsCommonSettings.LoadForCurrentUser().FolderId.ToString(), state.FileName, stream.Length, stream, true); state.FileId = (int)file.ID; }; try { action(memStream); } catch (DirectoryNotFoundException) { var settings = ProjectsCommonSettings.LoadForCurrentUser(); settings.FolderId = Web.Files.Classes.Global.FolderMy; settings.SaveForCurrentUser(); action(memStream); } } using (var scope = DIHelper.Resolve()) { scope.Resolve <EngineFactory>().ReportEngine.Save(new ReportFile { FileId = state.FileId, Name = Name, ReportType = ReportType }); } }
private SqlQuery CreateQueryFilter(SqlQuery query, TaskFilter filter, bool isAdmin, bool checkAccess) { if (filter.MilestoneStatuses.Count != 0) { query.Where(Exp.In("t.status", filter.MilestoneStatuses)); } if (filter.ProjectIds.Count != 0) { query.Where(Exp.In("t.project_id", filter.ProjectIds)); } else { if (ProjectsCommonSettings.Load().HideEntitiesInPausedProjects) { query.Where(!Exp.Eq("p.status", ProjectStatus.Paused)); } if (filter.MyProjects) { query.InnerJoin(ParticipantTable + " ppp", Exp.EqColumns("p.id", "ppp.project_id") & Exp.Eq("ppp.removed", false) & Exp.EqColumns("ppp.tenant", "t.tenant_id")); query.Where("ppp.participant_id", CurrentUserID); } } if (filter.UserId != Guid.Empty) { query.Where(Exp.Eq("t.responsible_id", filter.UserId)); } if (filter.TagId != 0) { if (filter.TagId == -1) { query.LeftOuterJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", null); } else { query.InnerJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", filter.TagId); } } if (filter.ParticipantId.HasValue) { var existSubtask = new SqlQuery(SubtasksTable + " pst").Select("pst.task_id").Where(Exp.EqColumns("t.tenant_id", "pst.tenant_id") & Exp.EqColumns("pt.id", "pst.task_id") & Exp.Eq("pst.status", TaskStatus.Open)); var existResponsible = new SqlQuery(TasksResponsibleTable + " ptr1").Select("ptr1.task_id").Where(Exp.EqColumns("t.tenant_id", "ptr1.tenant_id") & Exp.EqColumns("pt.id", "ptr1.task_id")); existSubtask.Where(Exp.Eq("pst.responsible_id", filter.ParticipantId.ToString())); existResponsible.Where(Exp.Eq("ptr1.responsible_id", filter.ParticipantId.ToString())); query.LeftOuterJoin(TasksTable + " as pt", Exp.EqColumns("pt.milestone_id", "t.id") & Exp.EqColumns("pt.tenant_id", "t.tenant_id")); query.Where(Exp.Exists(existSubtask) | Exp.Exists(existResponsible)); } if (!filter.FromDate.Equals(DateTime.MinValue) && !filter.FromDate.Equals(DateTime.MaxValue)) { query.Where(Exp.Ge("t.deadline", TenantUtil.DateTimeFromUtc(filter.FromDate))); } if (!filter.ToDate.Equals(DateTime.MinValue) && !filter.ToDate.Equals(DateTime.MaxValue)) { query.Where(Exp.Le("t.deadline", TenantUtil.DateTimeFromUtc(filter.ToDate))); } if (!string.IsNullOrEmpty(filter.SearchText)) { List <int> mIds; if (FactoryIndexer <MilestonesWrapper> .TrySelectIds(s => s.MatchAll(filter.SearchText), out mIds)) { query.Where(Exp.In("t.id", mIds)); } else { query.Where(Exp.Like("t.title", filter.SearchText, SqlLike.AnyWhere)); } } CheckSecurity(query, filter, isAdmin, checkAccess); return(query); }
public override bool CanCreateEntities(Project project) { return(Common.Can() && (Common.CurrentUserAdministrator || ProjectsCommonSettings.Load().EverebodyCanCreate)); }
protected override IEnumerable <KeyValuePair <string, object> > GetClientVariables(HttpContext context) { var filter = new TaskFilter { SortBy = "title", SortOrder = true, ProjectStatuses = new List <ProjectStatus> { ProjectStatus.Open } }; if (!ProjectsCommonSettings.Load().HideEntitiesInPausedProjects) { filter.ProjectStatuses.Add(ProjectStatus.Paused); } using (var scope = DIHelper.Resolve()) { var engineFactory = scope.Resolve <EngineFactory>(); var projectSecurity = scope.Resolve <ProjectSecurity>(); var projects = engineFactory.ProjectEngine.GetByFilter(filter) .Select(pr => new { id = pr.ID, title = pr.Title, responsible = pr.Responsible, //created = (ApiDateTime) pr.CreateOn, security = new { canCreateMilestone = projectSecurity.CanCreate <Milestone>(pr), canCreateMessage = projectSecurity.CanCreate <Message>(pr), canCreateTask = projectSecurity.CanCreate <Task>(pr), canCreateTimeSpend = projectSecurity.CanCreate <TimeSpend>(pr), canEditTeam = projectSecurity.CanEditTeam(pr), canReadFiles = projectSecurity.CanReadFiles(pr), canReadMilestones = projectSecurity.CanRead <Milestone>(pr), canReadMessages = projectSecurity.CanRead <Message>(pr), canReadTasks = projectSecurity.CanRead <Task>(pr), isInTeam = projectSecurity.IsInTeam(pr, SecurityContext.CurrentAccount.ID, false), canLinkContact = projectSecurity.CanLinkContact(pr) }, isPrivate = pr.Private, status = pr.Status, taskCountTotal = pr.TaskCountTotal }).ToList(); var tags = engineFactory.TagEngine.GetTags() .Select(r => new { value = r.Key, title = r.Value.HtmlEncode() }) .ToList(); var result = new List <KeyValuePair <string, object> >(1) { RegisterObject( new { Global.EntryCountOnPage, Global.VisiblePageCount, Projects = new { response = projects }, Tags = new { response = tags }, ProjectsCount = engineFactory.ProjectEngine.GetByFilterCount(new TaskFilter()) }) }; filter = new TaskFilter { SortBy = "deadline", SortOrder = false, MilestoneStatuses = new List <MilestoneStatus> { MilestoneStatus.Open } }; var milestones = engineFactory.MilestoneEngine.GetByFilter(filter) .Select(m => new { id = m.ID, title = m.Title, deadline = SetDate(m.DeadLine, TimeZoneInfo.Local), projectOwner = new { id = m.Project.ID }, status = (int)m.Status }).ToList(); result.Add(RegisterObject(new { Milestones = new { response = milestones } })); return(result); } }
public ProjectsCommonSettings GetSettings() { return(ProjectsCommonSettings.Load()); }
private SqlQuery CreateQueryFilter(SqlQuery query, TaskFilter filter, bool isAdmin, bool checkAccess) { if (filter.MyProjects || filter.MyMilestones) { query.InnerJoin(ParticipantTable + " ppp", Exp.EqColumns("t.project_id", "ppp.project_id") & Exp.Eq("ppp.removed", false) & Exp.EqColumns("t.tenant_id", "ppp.tenant")); query.Where("ppp.participant_id", CurrentUserID); } if (filter.ProjectIds.Count != 0) { query.Where(Exp.In("t.project_id", filter.ProjectIds)); } else { if (ProjectsCommonSettings.Load().HideEntitiesInPausedProjects) { if (!checkAccess && isAdmin) { query.InnerJoin(ProjectsTable + " p", Exp.EqColumns("t.tenant_id", "p.tenant_id") & Exp.EqColumns("t.project_id", "p.id")); } query.Where(!Exp.Eq("p.status", ProjectStatus.Paused)); } } if (filter.Milestone.HasValue || filter.MyMilestones) { query.InnerJoin(MilestonesTable + " pm", Exp.EqColumns("pm.tenant_id", "t.tenant_id") & Exp.EqColumns("pm.project_id", "t.project_id")); query.Where(Exp.EqColumns("pt.milestone_id", "pm.id")); if (filter.Milestone.HasValue) { query.Where("pm.id", filter.Milestone); } else if (filter.MyMilestones) { query.Where(Exp.Gt("pm.id", 0)); } } if (filter.TagId != 0) { if (filter.TagId == -1) { query.LeftOuterJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", null); } else { query.InnerJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", filter.TagId); } } if (filter.UserId != Guid.Empty) { query.Where("t.person_id", filter.UserId); } if (filter.DepartmentId != Guid.Empty) { query.InnerJoin("core_usergroup cug", Exp.Eq("cug.removed", false) & Exp.EqColumns("cug.userid", "t.person_id") & Exp.EqColumns("cug.tenant", "t.tenant_id")); query.Where("cug.groupid", filter.DepartmentId); } var minDate = DateTime.MinValue; var maxDate = DateTime.MaxValue; if (!filter.FromDate.Equals(minDate) && !filter.FromDate.Equals(maxDate) && !filter.ToDate.Equals(minDate) && !filter.ToDate.Equals(maxDate)) { query.Where(Exp.Between("t.date", filter.FromDate, filter.ToDate)); } if (filter.PaymentStatuses.Any()) { query.Where(Exp.In("payment_status", filter.PaymentStatuses)); } if (!string.IsNullOrEmpty(filter.SearchText)) { query.Where(Exp.Like("t.note", filter.SearchText, SqlLike.AnyWhere)); } if (checkAccess) { query.InnerJoin(ProjectsTable + " p", Exp.EqColumns("p.tenant_id", "t.tenant_id") & Exp.EqColumns("p.id", "t.project_id")); query.Where(Exp.Eq("p.private", false)); } else if (!isAdmin) { query.InnerJoin(ProjectsTable + " p", Exp.EqColumns("p.tenant_id", "t.tenant_id") & Exp.EqColumns("p.id", "t.project_id")); if (!(filter.MyProjects || filter.MyMilestones)) { query.LeftOuterJoin(ParticipantTable + " ppp", Exp.Eq("ppp.participant_id", CurrentUserID) & Exp.EqColumns("ppp.project_id", "t.project_id") & Exp.EqColumns("ppp.tenant", "t.tenant_id")); } var isInTeam = !Exp.Eq("ppp.security", null) & Exp.Eq("ppp.removed", false); var canReadTasks = !Exp.Eq("security & " + (int)ProjectTeamSecurity.Tasks, (int)ProjectTeamSecurity.Tasks); var canReadMilestones = Exp.Eq("pt.milestone_id", 0) | !Exp.Eq("security & " + (int)ProjectTeamSecurity.Milestone, (int)ProjectTeamSecurity.Milestone); var responsible = Exp.Exists(new SqlQuery("projects_tasks_responsible ptr") .Select("ptr.responsible_id") .Where(Exp.EqColumns("pt.id", "ptr.task_id") & Exp.EqColumns("ptr.tenant_id", "pt.tenant_id") & Exp.Eq("ptr.responsible_id", CurrentUserID))); query.Where(Exp.Eq("p.private", false) | isInTeam & (responsible | canReadTasks & canReadMilestones)); } query.GroupBy("t.id"); return(query); }
private SqlQuery CreateQueryFilter(SqlQuery query, TaskFilter filter, bool isAdmin, bool checkAccess) { if (filter.Follow) { IEnumerable <string> objects = NotifySource.Instance.GetSubscriptionProvider().GetSubscriptions(NotifyConstants.Event_NewCommentForMessage, NotifySource.Instance.GetRecipientsProvider().GetRecipient(CurrentUserID.ToString())); if (filter.ProjectIds.Count != 0) { objects = objects.Where(r => r.Split('_')[2] == filter.ProjectIds[0].ToString(CultureInfo.InvariantCulture)); } var ids = objects.Select(r => r.Split('_')[1]).ToArray(); query.Where(Exp.In("t.id", ids)); } if (filter.ProjectIds.Count != 0) { query.Where(Exp.In("t.project_id", filter.ProjectIds)); } else { if (ProjectsCommonSettings.Load().HideEntitiesInPausedProjects) { query.Where(!Exp.Eq("p.status", ProjectStatus.Paused)); } if (filter.MyProjects) { query.InnerJoin(ParticipantTable + " ppp", Exp.EqColumns("ppp.tenant", "t.tenant_id") & Exp.EqColumns("p.id", "ppp.project_id") & Exp.Eq("ppp.removed", false)); query.Where("ppp.participant_id", CurrentUserID); } } if (filter.TagId != 0) { if (filter.TagId == -1) { query.LeftOuterJoin(ProjectTagTable + " pt", Exp.EqColumns("pt.project_id", "t.project_id")); query.Where("pt.tag_id", null); } else { query.InnerJoin(ProjectTagTable + " pt", Exp.EqColumns("pt.project_id", "t.project_id")); query.Where("pt.tag_id", filter.TagId); } } if (filter.UserId != Guid.Empty) { query.Where("t.create_by", filter.UserId); } if (filter.DepartmentId != Guid.Empty) { query.InnerJoin("core_usergroup cug", Exp.EqColumns("cug.tenant", "t.tenant_id") & Exp.Eq("cug.removed", false) & Exp.EqColumns("cug.userid", "t.create_by")); query.Where("cug.groupid", filter.DepartmentId); } if (!filter.FromDate.Equals(DateTime.MinValue) && !filter.ToDate.Equals(DateTime.MinValue) && !filter.ToDate.Equals(DateTime.MaxValue)) { query.Where(Exp.Between("t.create_on", filter.FromDate, filter.ToDate.AddDays(1))); } if (filter.MessageStatus.HasValue) { query.Where("t.status", filter.MessageStatus.Value); } if (!string.IsNullOrEmpty(filter.SearchText)) { if (FullTextSearch.SupportModule(FullTextSearch.ProjectsMessagesModule)) { var mIds = FullTextSearch.Search(FullTextSearch.ProjectsMessagesModule.Match(filter.SearchText)); query.Where(Exp.In("t.id", mIds)); } else { query.Where(Exp.Like("t.title", filter.SearchText, SqlLike.AnyWhere)); } } if (checkAccess) { query.Where(Exp.Eq("p.private", false)); } else if (!isAdmin) { var isInTeam = new SqlQuery(ParticipantTable).Select("security").Where(Exp.EqColumns("p.id", "project_id") & Exp.Eq("removed", false) & Exp.Eq("participant_id", CurrentUserID) & !Exp.Eq("security & " + (int)ProjectTeamSecurity.Messages, (int)ProjectTeamSecurity.Messages)); query.Where(Exp.Eq("p.private", false) | Exp.Eq("p.responsible_id", CurrentUserID) | (Exp.Eq("p.private", true) & Exp.Exists(isInTeam))); } return(query); }
private SqlQuery CreateQueryFilterBase(SqlQuery query, TaskFilter filter) { if (filter.ProjectIds.Count != 0) { query.Where(Exp.In("t.project_id", filter.ProjectIds)); } else { if (ProjectsCommonSettings.Load().HideEntitiesInPausedProjects) { query.Where(!Exp.Eq("p.status", ProjectStatus.Paused)); } if (filter.MyProjects) { query.InnerJoin(ParticipantTable + " ppp", Exp.EqColumns("p.id", "ppp.project_id") & Exp.Eq("ppp.removed", false) & Exp.EqColumns("t.tenant_id", "ppp.tenant")); query.Where("ppp.participant_id", CurrentUserID); } } if (filter.TagId != 0) { if (filter.TagId == -1) { query.LeftOuterJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", null); } else { query.InnerJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", filter.TagId); } } if (filter.Substatus.HasValue) { var substatus = filter.Substatus.Value; if (substatus > -1) { query.InnerJoin(StatusTable + " pstat", Exp.EqColumns("pstat.tenant_id", "t.tenant_id") & Exp.Eq("pstat.id", filter.Substatus.Value)); query.Where(Exp.Eq("t.status_id", filter.Substatus.Value) | (Exp.Eq("t.status_id", null) & Exp.EqColumns("t.status", "pstat.statusType") & Exp.Eq("pstat.isDefault", true))); } else { query.Where("t.status", -substatus).Where("t.status_id", null); } } else if (filter.TaskStatuses.Count != 0) { var status = filter.TaskStatuses.First(); query.Where("t.status", status); } if (!filter.UserId.Equals(Guid.Empty)) { query.Where("t.create_by", filter.UserId); } if (!filter.DepartmentId.Equals(Guid.Empty) || (filter.ParticipantId.HasValue && !filter.ParticipantId.Value.Equals(Guid.Empty))) { var existSubtask = new SqlQuery(SubtasksTable + " pst").Select("pst.task_id").Where(Exp.EqColumns("t.tenant_id", "pst.tenant_id") & Exp.EqColumns("t.id", "pst.task_id") & Exp.Eq("pst.status", TaskStatus.Open)); var existResponsible = new SqlQuery(TasksResponsibleTable + " ptr1").Select("ptr1.task_id").Where(Exp.EqColumns("t.tenant_id", "ptr1.tenant_id") & Exp.EqColumns("t.id", "ptr1.task_id")); if (!filter.DepartmentId.Equals(Guid.Empty)) { existSubtask.InnerJoin("core_usergroup cug", Exp.Eq("cug.removed", false) & Exp.EqColumns("cug.userid", "pst.responsible_id") & Exp.Eq("cug.tenant", Tenant)); existResponsible.InnerJoin("core_usergroup cug", Exp.Eq("cug.removed", false) & Exp.EqColumns("cug.userid", "ptr1.responsible_id") & Exp.Eq("cug.tenant", Tenant)); existSubtask.Where("cug.groupid", filter.DepartmentId); existResponsible.Where("cug.groupid", filter.DepartmentId); } if (filter.ParticipantId.HasValue && !filter.ParticipantId.Value.Equals(Guid.Empty)) { existSubtask.Where(Exp.Eq("pst.responsible_id", filter.ParticipantId.Value.ToString())); existResponsible.Where(Exp.Eq("ptr1.responsible_id", filter.ParticipantId.Value.ToString())); } query.Where(Exp.Exists(existSubtask) | Exp.Exists(existResponsible)); } if (!string.IsNullOrEmpty(filter.SearchText)) { List <int> taskIds; if (FactoryIndexer <TasksWrapper> .TrySelectIds(s => s.MatchAll(filter.SearchText), out taskIds)) { IReadOnlyCollection <SubtasksWrapper> subtaskIds; if (FactoryIndexer <SubtasksWrapper> .TrySelect(s => s.MatchAll(filter.SearchText), out subtaskIds)) { taskIds.AddRange(subtaskIds.Select(r => r.Task).ToList()); } query.Where(Exp.In("t.id", taskIds)); } else { query.Where(Exp.Like("t.title", filter.SearchText, SqlLike.AnyWhere)); } } return(query); }
public static bool CanCreateProject() { return(Can() && (CurrentUserAdministrator || ProjectsCommonSettings.Load().EverebodyCanCreate)); }
private SqlQuery CreateQueryFilterBase(SqlQuery query, TaskFilter filter) { if (filter.ProjectIds.Count != 0) { query.Where(Exp.In("t.project_id", filter.ProjectIds)); } else { if (ProjectsCommonSettings.Load().HideEntitiesInPausedProjects) { query.Where(!Exp.Eq("p.status", ProjectStatus.Paused)); } if (filter.MyProjects) { query.InnerJoin(ParticipantTable + " ppp", Exp.EqColumns("p.id", "ppp.project_id") & Exp.Eq("ppp.removed", false) & Exp.EqColumns("t.tenant_id", "ppp.tenant")); query.Where("ppp.participant_id", CurrentUserID); } } if (filter.TagId != 0) { if (filter.TagId == -1) { query.LeftOuterJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", null); } else { query.InnerJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id")); query.Where("ptag.tag_id", filter.TagId); } } if (filter.TaskStatuses.Count != 0) { var status = filter.TaskStatuses.First(); if (status == TaskStatus.Open) { query.Where(!Exp.Eq("t.status", TaskStatus.Closed)); } else { query.Where("t.status", TaskStatus.Closed); } } if (!filter.UserId.Equals(Guid.Empty)) { query.Where("t.create_by", filter.UserId); } if (!filter.DepartmentId.Equals(Guid.Empty) || (filter.ParticipantId.HasValue && !filter.ParticipantId.Value.Equals(Guid.Empty))) { var existSubtask = new SqlQuery(SubtasksTable + " pst").Select("pst.task_id").Where(Exp.EqColumns("t.tenant_id", "pst.tenant_id") & Exp.EqColumns("t.id", "pst.task_id") & Exp.Eq("pst.status", TaskStatus.Open)); var existResponsible = new SqlQuery(TasksResponsibleTable + " ptr1").Select("ptr1.task_id").Where(Exp.EqColumns("t.tenant_id", "ptr1.tenant_id") & Exp.EqColumns("t.id", "ptr1.task_id")); if (!filter.DepartmentId.Equals(Guid.Empty)) { existSubtask.InnerJoin("core_usergroup cug", Exp.Eq("cug.removed", false) & Exp.EqColumns("cug.userid", "pst.responsible_id") & Exp.Eq("cug.tenant", Tenant)); existResponsible.InnerJoin("core_usergroup cug", Exp.Eq("cug.removed", false) & Exp.EqColumns("cug.userid", "ptr1.responsible_id") & Exp.Eq("cug.tenant", Tenant)); existSubtask.Where("cug.groupid", filter.DepartmentId); existResponsible.Where("cug.groupid", filter.DepartmentId); } if (filter.ParticipantId.HasValue && !filter.ParticipantId.Value.Equals(Guid.Empty)) { existSubtask.Where(Exp.Eq("pst.responsible_id", filter.ParticipantId.Value.ToString())); existResponsible.Where(Exp.Eq("ptr1.responsible_id", filter.ParticipantId.Value.ToString())); } query.Where(Exp.Exists(existSubtask) | Exp.Exists(existResponsible)); } if (!string.IsNullOrEmpty(filter.SearchText)) { if (FullTextSearch.SupportModule(FullTextSearch.ProjectsTasksModule)) { var taskIds = FullTextSearch.Search(FullTextSearch.ProjectsTasksModule.Match(filter.SearchText)); if (FullTextSearch.SupportModule(FullTextSearch.ProjectsSubtasksModule)) { taskIds.AddRange(FullTextSearch.Search(FullTextSearch.ProjectsSubtasksModule.Select("task_id").Match(filter.SearchText))); } query.Where(Exp.In("t.id", taskIds)); } else { query.Where(Exp.Like("t.title", filter.SearchText, SqlLike.AnyWhere)); } } return(query); }