public async Task <int> Count(KnowledgeArticleFilter filter) { IQueryable <KnowledgeArticleDAO> KnowledgeArticles = DataContext.KnowledgeArticle.AsNoTracking(); KnowledgeArticles = DynamicFilter(KnowledgeArticles, filter); return(await KnowledgeArticles.CountAsync()); }
public async Task <ActionResult <bool> > BulkDelete([FromBody] List <long> Ids) { if (UnAuthorization) { return(Forbid()); } if (!ModelState.IsValid) { throw new BindException(ModelState); } KnowledgeArticleFilter KnowledgeArticleFilter = new KnowledgeArticleFilter(); KnowledgeArticleFilter = await KnowledgeArticleService.ToFilter(KnowledgeArticleFilter); KnowledgeArticleFilter.Id = new IdFilter { In = Ids }; KnowledgeArticleFilter.Selects = KnowledgeArticleSelect.Id; KnowledgeArticleFilter.Skip = 0; KnowledgeArticleFilter.Take = int.MaxValue; List <KnowledgeArticle> KnowledgeArticles = await KnowledgeArticleService.List(KnowledgeArticleFilter); KnowledgeArticles = await KnowledgeArticleService.BulkDelete(KnowledgeArticles); if (KnowledgeArticles.Any(x => !x.IsValidated)) { return(BadRequest(KnowledgeArticles.Where(x => !x.IsValidated))); } return(true); }
private KnowledgeArticleFilter ConvertFilterDTOToFilterEntity(KnowledgeArticle_KnowledgeArticleFilterDTO KnowledgeArticle_KnowledgeArticleFilterDTO) { KnowledgeArticleFilter KnowledgeArticleFilter = new KnowledgeArticleFilter(); KnowledgeArticleFilter.Selects = KnowledgeArticleSelect.ALL; KnowledgeArticleFilter.Skip = KnowledgeArticle_KnowledgeArticleFilterDTO.Skip; KnowledgeArticleFilter.Take = KnowledgeArticle_KnowledgeArticleFilterDTO.Take; KnowledgeArticleFilter.OrderBy = KnowledgeArticle_KnowledgeArticleFilterDTO.OrderBy; KnowledgeArticleFilter.OrderType = KnowledgeArticle_KnowledgeArticleFilterDTO.OrderType; KnowledgeArticleFilter.Id = KnowledgeArticle_KnowledgeArticleFilterDTO.Id; KnowledgeArticleFilter.Title = KnowledgeArticle_KnowledgeArticleFilterDTO.Title; KnowledgeArticleFilter.Detail = KnowledgeArticle_KnowledgeArticleFilterDTO.Detail; KnowledgeArticleFilter.StatusId = KnowledgeArticle_KnowledgeArticleFilterDTO.StatusId; KnowledgeArticleFilter.GroupId = KnowledgeArticle_KnowledgeArticleFilterDTO.GroupId; KnowledgeArticleFilter.CreatorId = KnowledgeArticle_KnowledgeArticleFilterDTO.CreatorId; KnowledgeArticleFilter.DisplayOrder = KnowledgeArticle_KnowledgeArticleFilterDTO.DisplayOrder; KnowledgeArticleFilter.CreatedAt = KnowledgeArticle_KnowledgeArticleFilterDTO.CreatedAt; KnowledgeArticleFilter.UpdatedAt = KnowledgeArticle_KnowledgeArticleFilterDTO.UpdatedAt; KnowledgeArticleFilter.FromDate = KnowledgeArticle_KnowledgeArticleFilterDTO.FromDate; KnowledgeArticleFilter.ToDate = KnowledgeArticle_KnowledgeArticleFilterDTO.ToDate; KnowledgeArticleFilter.ItemId = KnowledgeArticle_KnowledgeArticleFilterDTO.ItemId; KnowledgeArticleFilter.KMSStatusId = KnowledgeArticle_KnowledgeArticleFilterDTO.KMSStatusId; KnowledgeArticleFilter.OrganizationId = KnowledgeArticle_KnowledgeArticleFilterDTO.OrganizationId; return(KnowledgeArticleFilter); }
public async Task <List <KnowledgeArticle> > List(KnowledgeArticleFilter filter) { if (filter == null) { return(new List <KnowledgeArticle>()); } IQueryable <KnowledgeArticleDAO> KnowledgeArticleDAOs = DataContext.KnowledgeArticle.AsNoTracking(); KnowledgeArticleDAOs = DynamicFilter(KnowledgeArticleDAOs, filter); KnowledgeArticleDAOs = DynamicOrder(KnowledgeArticleDAOs, filter); List <KnowledgeArticle> KnowledgeArticles = await DynamicSelect(KnowledgeArticleDAOs, filter); return(KnowledgeArticles); }
public async Task <List <KnowledgeArticle> > List(KnowledgeArticleFilter KnowledgeArticleFilter) { try { List <KnowledgeArticle> KnowledgeArticles = await UOW.KnowledgeArticleRepository.List(KnowledgeArticleFilter); foreach (var KnowledgeArticle in KnowledgeArticles) { var Now = StaticParams.DateTimeNow; if (Now >= KnowledgeArticle.FromDate && (KnowledgeArticle.ToDate.HasValue == false || KnowledgeArticle.ToDate >= Now)) { KnowledgeArticle.KMSStatusId = KMSStatusEnum.DOING.Id; KnowledgeArticle.KMSStatus = new KMSStatus { Id = KMSStatusEnum.DOING.Id, Code = KMSStatusEnum.DOING.Code, Name = KMSStatusEnum.DOING.Name, }; } else if (KnowledgeArticle.ToDate < Now) { KnowledgeArticle.KMSStatusId = KMSStatusEnum.EXPIRED.Id; KnowledgeArticle.KMSStatus = new KMSStatus { Id = KMSStatusEnum.EXPIRED.Id, Code = KMSStatusEnum.EXPIRED.Code, Name = KMSStatusEnum.EXPIRED.Name, }; } } return(KnowledgeArticles); } catch (Exception ex) { if (ex.InnerException == null) { await Logging.CreateSystemLog(ex, nameof(KnowledgeArticleService)); throw new MessageException(ex); } else { await Logging.CreateSystemLog(ex.InnerException, nameof(KnowledgeArticleService)); throw new MessageException(ex.InnerException); } } }
public async Task <ActionResult <int> > Count([FromBody] KnowledgeArticle_KnowledgeArticleFilterDTO KnowledgeArticle_KnowledgeArticleFilterDTO) { if (UnAuthorization) { return(Forbid()); } if (!ModelState.IsValid) { throw new BindException(ModelState); } KnowledgeArticleFilter KnowledgeArticleFilter = ConvertFilterDTOToFilterEntity(KnowledgeArticle_KnowledgeArticleFilterDTO); KnowledgeArticleFilter = await KnowledgeArticleService.ToFilter(KnowledgeArticleFilter); int count = await KnowledgeArticleService.Count(KnowledgeArticleFilter); return(count); }
public async Task <bool> ValidateId(KnowledgeArticle KnowledgeArticle) { KnowledgeArticleFilter KnowledgeArticleFilter = new KnowledgeArticleFilter { Skip = 0, Take = 10, Id = new IdFilter { Equal = KnowledgeArticle.Id }, Selects = KnowledgeArticleSelect.Id }; int count = await UOW.KnowledgeArticleRepository.Count(KnowledgeArticleFilter); if (count == 0) { KnowledgeArticle.AddError(nameof(KnowledgeArticleValidator), nameof(KnowledgeArticle.Id), ErrorCode.IdNotExisted); } return(count == 1); }
public async Task <ActionResult <List <KnowledgeArticle_KnowledgeArticleDTO> > > List([FromBody] KnowledgeArticle_KnowledgeArticleFilterDTO KnowledgeArticle_KnowledgeArticleFilterDTO) { if (UnAuthorization) { return(Forbid()); } if (!ModelState.IsValid) { throw new BindException(ModelState); } KnowledgeArticleFilter KnowledgeArticleFilter = ConvertFilterDTOToFilterEntity(KnowledgeArticle_KnowledgeArticleFilterDTO); KnowledgeArticleFilter = await KnowledgeArticleService.ToFilter(KnowledgeArticleFilter); List <KnowledgeArticle> KnowledgeArticles = await KnowledgeArticleService.List(KnowledgeArticleFilter); List <KnowledgeArticle_KnowledgeArticleDTO> KnowledgeArticle_KnowledgeArticleDTOs = KnowledgeArticles .Select(c => new KnowledgeArticle_KnowledgeArticleDTO(c)).ToList(); return(KnowledgeArticle_KnowledgeArticleDTOs); }
private async Task <bool> HasPermission(long Id) { KnowledgeArticleFilter KnowledgeArticleFilter = new KnowledgeArticleFilter(); KnowledgeArticleFilter = await KnowledgeArticleService.ToFilter(KnowledgeArticleFilter); if (Id == 0) { } else { KnowledgeArticleFilter.Id = new IdFilter { Equal = Id }; int count = await KnowledgeArticleService.Count(KnowledgeArticleFilter); if (count == 0) { return(false); } } return(true); }
public async Task <int> Count(KnowledgeArticleFilter KnowledgeArticleFilter) { try { int result = await UOW.KnowledgeArticleRepository.Count(KnowledgeArticleFilter); return(result); } catch (Exception ex) { if (ex.InnerException == null) { await Logging.CreateSystemLog(ex, nameof(KnowledgeArticleService)); throw new MessageException(ex); } else { await Logging.CreateSystemLog(ex.InnerException, nameof(KnowledgeArticleService)); throw new MessageException(ex.InnerException); } } }
private async Task <List <KnowledgeArticle> > DynamicSelect(IQueryable <KnowledgeArticleDAO> query, KnowledgeArticleFilter filter) { List <KnowledgeArticle> KnowledgeArticles = await query.Select(q => new KnowledgeArticle() { Id = filter.Selects.Contains(KnowledgeArticleSelect.Id) ? q.Id : default(long), Title = filter.Selects.Contains(KnowledgeArticleSelect.Title) ? q.Title : default(string), Detail = filter.Selects.Contains(KnowledgeArticleSelect.Detail) ? q.Detail : default(string), StatusId = filter.Selects.Contains(KnowledgeArticleSelect.Status) ? q.StatusId : default(long), GroupId = filter.Selects.Contains(KnowledgeArticleSelect.Group) ? q.GroupId : default(long), CreatorId = filter.Selects.Contains(KnowledgeArticleSelect.Creator) ? q.CreatorId : default(long), DisplayOrder = filter.Selects.Contains(KnowledgeArticleSelect.DisplayOrder) ? q.DisplayOrder : default(long), FromDate = filter.Selects.Contains(KnowledgeArticleSelect.FromDate) ? q.FromDate : default(DateTime?), ToDate = filter.Selects.Contains(KnowledgeArticleSelect.ToDate) ? q.ToDate : default(DateTime?), ItemId = filter.Selects.Contains(KnowledgeArticleSelect.Item) ? q.ItemId : default(long?), KMSStatusId = filter.Selects.Contains(KnowledgeArticleSelect.KMSStatus) ? q.KMSStatusId : default(long?), //OrganizationId = filter.Selects.Contains(KnowledgeArticleSelect.Organization) ? q.OrganizationId : default(long), Creator = filter.Selects.Contains(KnowledgeArticleSelect.Creator) && q.Creator != null ? new AppUser { Id = q.Creator.Id, Username = q.Creator.Username, DisplayName = q.Creator.DisplayName, Address = q.Creator.Address, Email = q.Creator.Email, Phone = q.Creator.Phone, SexId = q.Creator.SexId, Birthday = q.Creator.Birthday, Avatar = q.Creator.Avatar, Department = q.Creator.Department, OrganizationId = q.Creator.OrganizationId, Longitude = q.Creator.Longitude, Latitude = q.Creator.Latitude, StatusId = q.Creator.StatusId, } : null, Group = filter.Selects.Contains(KnowledgeArticleSelect.Group) && q.Group != null ? new KnowledgeGroup { Id = q.Group.Id, Name = q.Group.Name, Code = q.Group.Code, StatusId = q.Group.StatusId, DisplayOrder = q.Group.DisplayOrder, Description = q.Group.Description, } : null, //Organization = filter.Selects.Contains(KnowledgeArticleSelect.Organization) && q.Organization != null ? new Organization //{ // Id = q.Organization.Id, // Code = q.Organization.Code, // Name = q.Organization.Name, // Address = q.Organization.Address, // Phone = q.Organization.Phone, // Path = q.Organization.Path, // ParentId = q.Organization.ParentId, // Email = q.Organization.Email, // StatusId = q.Organization.StatusId, // Level = q.Organization.Level //} : null, Status = filter.Selects.Contains(KnowledgeArticleSelect.Status) && q.Status != null ? new Status { Id = q.Status.Id, Code = q.Status.Code, Name = q.Status.Name, } : null, KMSStatus = filter.Selects.Contains(KnowledgeArticleSelect.KMSStatus) && q.KMSStatus != null ? new KMSStatus { Id = q.KMSStatus.Id, Code = q.KMSStatus.Code, Name = q.KMSStatus.Name, } : null, Item = filter.Selects.Contains(KnowledgeArticleSelect.Item) && q.Status != null ? new Item { Id = q.Item.Id, Code = q.Item.Code, Name = q.Item.Name, } : null, CreatedAt = q.CreatedAt, UpdatedAt = q.UpdatedAt, KnowledgeArticleOrganizationMappings = q.KnowledgeArticleOrganizationMappings != null ? q.KnowledgeArticleOrganizationMappings.Select(p => new KnowledgeArticleOrganizationMapping { KnowledgeArticleId = p.KnowledgeArticleId, OrganizationId = p.OrganizationId, Organization = p.Organization != null ? new Organization { Id = p.Organization.Id, Code = p.Organization.Code, Name = p.Organization.Name, ParentId = p.Organization.ParentId, Path = p.Organization.Path, Level = p.Organization.Level, StatusId = p.Organization.StatusId, Phone = p.Organization.Phone, Email = p.Organization.Email, Address = p.Organization.Address, } : null, }).ToList() : null, KnowledgeArticleKeywords = q.KnowledgeArticleKeywords != null ? q.KnowledgeArticleKeywords.Select(p => new KnowledgeArticleKeyword { Id = p.Id, KnowledgeArticleId = p.KnowledgeArticleId, Name = p.Name, }).ToList() : null, }).ToListAsync(); var Ids = KnowledgeArticles.Select(x => x.Id).ToList(); var KnowledgeArticleOrganizationMappings = await DataContext.KnowledgeArticleOrganizationMapping .Where(x => Ids.Contains(x.KnowledgeArticleId)) .Select(x => new KnowledgeArticleOrganizationMapping { KnowledgeArticleId = x.KnowledgeArticleId, OrganizationId = x.OrganizationId, Organization = x.Organization != null ? new Organization { Id = x.Organization.Id, Code = x.Organization.Code, Name = x.Organization.Name, ParentId = x.Organization.ParentId, Path = x.Organization.Path, Level = x.Organization.Level, StatusId = x.Organization.StatusId, Phone = x.Organization.Phone, Email = x.Organization.Email, Address = x.Organization.Address, } : null, }).ToListAsync(); var KnowledgeArticleKeywords = await DataContext.KnowledgeArticleKeyword .Where(x => Ids.Contains(x.KnowledgeArticleId)) .Select(x => new KnowledgeArticleKeyword { Id = x.Id, KnowledgeArticleId = x.KnowledgeArticleId, Name = x.Name, }).ToListAsync(); foreach (var KnowledgeArticle in KnowledgeArticles) { KnowledgeArticle.KnowledgeArticleOrganizationMappings = KnowledgeArticleOrganizationMappings.Where(x => x.KnowledgeArticleId == KnowledgeArticle.Id).ToList(); KnowledgeArticle.KnowledgeArticleKeywords = KnowledgeArticleKeywords.Where(x => x.KnowledgeArticleId == KnowledgeArticle.Id).ToList(); } return(KnowledgeArticles); }
private IQueryable <KnowledgeArticleDAO> DynamicFilter(IQueryable <KnowledgeArticleDAO> query, KnowledgeArticleFilter filter) { if (filter == null) { return(query.Where(q => false)); } query = query.Where(q => !q.DeletedAt.HasValue); if (filter.CreatedAt != null) { query = query.Where(q => q.CreatedAt, filter.CreatedAt); } if (filter.UpdatedAt != null) { query = query.Where(q => q.UpdatedAt, filter.UpdatedAt); } if (filter.Id != null) { query = query.Where(q => q.Id, filter.Id); } if (filter.Title != null) { query = query.Where(q => q.Title, filter.Title); } if (filter.Detail != null) { query = query.Where(q => q.Detail, filter.Detail); } if (filter.StatusId != null) { query = query.Where(q => q.StatusId, filter.StatusId); } if (filter.GroupId != null) { query = query.Where(q => q.GroupId, filter.GroupId); } if (filter.CreatorId != null) { query = query.Where(q => q.CreatorId, filter.CreatorId); } if (filter.DisplayOrder != null) { query = query.Where(q => q.DisplayOrder, filter.DisplayOrder); } if (filter.ItemId != null) { query = query.Where(q => q.ItemId, filter.ItemId); } if (filter.FromDate != null) { query = query.Where(q => q.FromDate, filter.FromDate); } if (filter.ToDate != null) { query = query.Where(q => q.ToDate, filter.ToDate); } if (filter.KMSStatusId != null) { query = query.Where(q => q.KMSStatusId, filter.KMSStatusId); } //Tìm kiếm theo Organization if (filter.OrganizationId != null) { if (filter.OrganizationId.Equal.HasValue) { query = from q in query join ar in DataContext.KnowledgeArticleOrganizationMapping on q.Id equals ar.KnowledgeArticleId where ar.OrganizationId == filter.OrganizationId.Equal.Value select q; } } query = OrFilter(query, filter); return(query); }
private IQueryable <KnowledgeArticleDAO> DynamicOrder(IQueryable <KnowledgeArticleDAO> query, KnowledgeArticleFilter filter) { switch (filter.OrderType) { case OrderType.ASC: switch (filter.OrderBy) { case KnowledgeArticleOrder.Id: query = query.OrderBy(q => q.Id); break; case KnowledgeArticleOrder.Title: query = query.OrderBy(q => q.Title); break; case KnowledgeArticleOrder.Detail: query = query.OrderBy(q => q.Detail); break; case KnowledgeArticleOrder.Status: query = query.OrderBy(q => q.StatusId); break; case KnowledgeArticleOrder.Group: query = query.OrderBy(q => q.GroupId); break; case KnowledgeArticleOrder.Creator: query = query.OrderBy(q => q.CreatorId); break; case KnowledgeArticleOrder.DisplayOrder: query = query.OrderBy(q => q.DisplayOrder); break; case KnowledgeArticleOrder.Item: query = query.OrderBy(q => q.ItemId); break; } break; case OrderType.DESC: switch (filter.OrderBy) { case KnowledgeArticleOrder.Id: query = query.OrderByDescending(q => q.Id); break; case KnowledgeArticleOrder.Title: query = query.OrderByDescending(q => q.Title); break; case KnowledgeArticleOrder.Detail: query = query.OrderByDescending(q => q.Detail); break; case KnowledgeArticleOrder.Status: query = query.OrderByDescending(q => q.StatusId); break; case KnowledgeArticleOrder.Group: query = query.OrderByDescending(q => q.GroupId); break; case KnowledgeArticleOrder.Creator: query = query.OrderByDescending(q => q.CreatorId); break; case KnowledgeArticleOrder.DisplayOrder: query = query.OrderByDescending(q => q.DisplayOrder); break; case KnowledgeArticleOrder.Item: query = query.OrderByDescending(q => q.ItemId); break; } break; } query = query.Skip(filter.Skip).Take(filter.Take); return(query); }
private IQueryable <KnowledgeArticleDAO> OrFilter(IQueryable <KnowledgeArticleDAO> query, KnowledgeArticleFilter filter) { if (filter.OrFilter == null || filter.OrFilter.Count == 0) { return(query); } IQueryable <KnowledgeArticleDAO> initQuery = query.Where(q => false); foreach (KnowledgeArticleFilter KnowledgeArticleFilter in filter.OrFilter) { IQueryable <KnowledgeArticleDAO> queryable = query; if (KnowledgeArticleFilter.AppUserId != null) { queryable = queryable.Where(q => q.CreatorId, KnowledgeArticleFilter.AppUserId); } //if (KnowledgeArticleFilter.OrganizationId != null) //{ // if (KnowledgeArticleFilter.OrganizationId.Equal != null) // { // OrganizationDAO OrganizationDAO = DataContext.Organization // .Where(o => o.Id == KnowledgeArticleFilter.OrganizationId.Equal.Value).FirstOrDefault(); // queryable = queryable.Where(q => q.KnowledgeArticleOrganizationMappings.Any(p => p.Organization.Path.StartsWith(OrganizationDAO.Path))); // } // if (KnowledgeArticleFilter.OrganizationId.NotEqual != null) // { // OrganizationDAO OrganizationDAO = DataContext.Organization // .Where(o => o.Id == KnowledgeArticleFilter.OrganizationId.NotEqual.Value).FirstOrDefault(); // queryable = queryable.Where(q => !q.KnowledgeArticleOrganizationMappings.Any(p => p.Organization.Path.StartsWith(OrganizationDAO.Path))); // } // if (KnowledgeArticleFilter.OrganizationId.In != null) // { // List<OrganizationDAO> OrganizationDAOs = DataContext.Organization // .Where(o => o.DeletedAt == null && o.StatusId == 1).ToList(); // List<OrganizationDAO> Parents = OrganizationDAOs.Where(o => KnowledgeArticleFilter.OrganizationId.In.Contains(o.Id)).ToList(); // List<OrganizationDAO> Branches = OrganizationDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList(); // List<long> Ids = Branches.Select(o => o.Id).ToList(); // foreach (var id in Ids) // { // queryable = queryable.Where(q => q.KnowledgeArticleOrganizationMappings.Any(p => Ids.Contains(p.OrganizationId))); // } // } // if (KnowledgeArticleFilter.OrganizationId.NotIn != null) // { // List<OrganizationDAO> OrganizationDAOs = DataContext.Organization // .Where(o => o.DeletedAt == null && o.StatusId == 1).ToList(); // List<OrganizationDAO> Parents = OrganizationDAOs.Where(o => KnowledgeArticleFilter.OrganizationId.NotIn.Contains(o.Id)).ToList(); // List<OrganizationDAO> Branches = OrganizationDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList(); // List<long> Ids = Branches.Select(o => o.Id).ToList(); // foreach (var id in Ids) // { // queryable = queryable.Where(q => q.KnowledgeArticleOrganizationMappings.Any(p => !Ids.Contains(p.OrganizationId))); // } // } //} if (KnowledgeArticleFilter.OrganizationId != null) { if (KnowledgeArticleFilter.OrganizationId.Equal != null) { OrganizationDAO OrganizationDAO = DataContext.Organization .Where(o => o.Id == KnowledgeArticleFilter.OrganizationId.Equal.Value).FirstOrDefault(); queryable = queryable.Where(q => q.Creator.Organization.Path.StartsWith(OrganizationDAO.Path)); } if (KnowledgeArticleFilter.OrganizationId.NotEqual != null) { OrganizationDAO OrganizationDAO = DataContext.Organization .Where(o => o.Id == KnowledgeArticleFilter.OrganizationId.NotEqual.Value).FirstOrDefault(); queryable = queryable.Where(q => !q.Creator.Organization.Path.StartsWith(OrganizationDAO.Path)); } if (KnowledgeArticleFilter.OrganizationId.In != null) { List <OrganizationDAO> OrganizationDAOs = DataContext.Organization .Where(o => o.DeletedAt == null && o.StatusId == 1).ToList(); List <OrganizationDAO> Parents = OrganizationDAOs.Where(o => KnowledgeArticleFilter.OrganizationId.In.Contains(o.Id)).ToList(); List <OrganizationDAO> Branches = OrganizationDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList(); List <long> Ids = Branches.Select(o => o.Id).ToList(); queryable = queryable.Where(q => Ids.Contains(q.Creator.OrganizationId)); } if (KnowledgeArticleFilter.OrganizationId.NotIn != null) { List <OrganizationDAO> OrganizationDAOs = DataContext.Organization .Where(o => o.DeletedAt == null && o.StatusId == 1).ToList(); List <OrganizationDAO> Parents = OrganizationDAOs.Where(o => KnowledgeArticleFilter.OrganizationId.NotIn.Contains(o.Id)).ToList(); List <OrganizationDAO> Branches = OrganizationDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList(); List <long> Ids = Branches.Select(o => o.Id).ToList(); queryable = queryable.Where(q => !Ids.Contains(q.Creator.OrganizationId)); } } if (KnowledgeArticleFilter.UserId != null) { if (KnowledgeArticleFilter.UserId.Equal != null) { AppUserDAO AppUserDAO = DataContext.AppUser.Where(p => p.Id == KnowledgeArticleFilter.UserId.Equal).FirstOrDefault(); OrganizationDAO OrganizationDAO = DataContext.Organization .Where(o => o.Id == AppUserDAO.OrganizationId).FirstOrDefault(); queryable = queryable.Where(q => q.Creator.Organization.Path.StartsWith(OrganizationDAO.Path)); } if (KnowledgeArticleFilter.UserId.NotEqual != null) { AppUserDAO AppUserDAO = DataContext.AppUser.Where(p => p.Id == KnowledgeArticleFilter.UserId.NotEqual).FirstOrDefault(); OrganizationDAO OrganizationDAO = DataContext.Organization .Where(o => o.Id != AppUserDAO.OrganizationId).FirstOrDefault(); queryable = queryable.Where(q => !q.Creator.Organization.Path.StartsWith(OrganizationDAO.Path)); } } if (KnowledgeArticleFilter.KnowledgeGroupId != null) { queryable = queryable.Where(q => q.GroupId, KnowledgeArticleFilter.KnowledgeGroupId); } // Hiển thị ra phòng ban của người dùng hiện tại if (KnowledgeArticleFilter.AppliedDepartmentId != null) { if (KnowledgeArticleFilter.AppliedDepartmentId.Equal != null) { AppUserDAO AppUserDAO = DataContext.AppUser.Where(p => p.Id == KnowledgeArticleFilter.CurrentUserId.Equal).FirstOrDefault(); OrganizationDAO OrganizationDAO = DataContext.Organization .Where(o => o.Id == AppUserDAO.OrganizationId).FirstOrDefault(); queryable = queryable.Where(q => q.KnowledgeArticleOrganizationMappings.Select(p => p.OrganizationId).Contains(OrganizationDAO.Id)); } if (KnowledgeArticleFilter.AppliedDepartmentId.NotEqual != null) { AppUserDAO AppUserDAO = DataContext.AppUser.Where(p => p.Id == KnowledgeArticleFilter.CurrentUserId.Equal).FirstOrDefault(); OrganizationDAO OrganizationDAO = DataContext.Organization .Where(o => o.Id != AppUserDAO.OrganizationId).FirstOrDefault(); queryable = queryable.Where(q => q.KnowledgeArticleOrganizationMappings.Select(p => p.OrganizationId).Contains(OrganizationDAO.Id)); } } initQuery = initQuery.Union(queryable); } return(initQuery); }
public async Task <KnowledgeArticleFilter> ToFilter(KnowledgeArticleFilter filter) { if (filter.OrFilter == null) { filter.OrFilter = new List <KnowledgeArticleFilter>(); } if (CurrentContext.Filters == null || CurrentContext.Filters.Count == 0) { return(filter); } List <Organization> Organizations = await OrganizationService.List(new OrganizationFilter { Skip = 0, Take = int.MaxValue, Selects = OrganizationSelect.ALL, OrderBy = OrganizationOrder.Id, OrderType = OrderType.ASC }); foreach (var currentFilter in CurrentContext.Filters) { KnowledgeArticleFilter subFilter = new KnowledgeArticleFilter(); filter.OrFilter.Add(subFilter); List <FilterPermissionDefinition> FilterPermissionDefinitions = currentFilter.Value; foreach (FilterPermissionDefinition FilterPermissionDefinition in FilterPermissionDefinitions) { if (FilterPermissionDefinition.Name == nameof(subFilter.AppUserId)) { subFilter.AppUserId = FilterBuilder.Merge(subFilter.AppUserId, FilterPermissionDefinition.IdFilter); } if (FilterPermissionDefinition.Name == nameof(subFilter.OrganizationId)) { var organizationIds = FilterOrganization(Organizations, FilterPermissionDefinition.IdFilter); IdFilter IdFilter = new IdFilter { In = organizationIds }; subFilter.OrganizationId = FilterBuilder.Merge(subFilter.OrganizationId, IdFilter); } if (FilterPermissionDefinition.Name == nameof(CurrentContext.UserId) && FilterPermissionDefinition.IdFilter != null) { if (FilterPermissionDefinition.IdFilter.Equal.HasValue && FilterPermissionDefinition.IdFilter.Equal.Value == CurrentUserEnum.IS.Id) { if (subFilter.CreatorId == null) { subFilter.CreatorId = new IdFilter { } } ; subFilter.CreatorId.Equal = CurrentContext.UserId; } if (FilterPermissionDefinition.IdFilter.Equal.HasValue && FilterPermissionDefinition.IdFilter.Equal.Value == CurrentUserEnum.ISNT.Id) { if (subFilter.CreatorId == null) { subFilter.CreatorId = new IdFilter { } } ; subFilter.CreatorId.NotEqual = CurrentContext.UserId; } } if (FilterPermissionDefinition.Name == nameof(subFilter.KnowledgeGroupId)) { subFilter.GroupId = FilterBuilder.Merge(subFilter.KnowledgeGroupId, FilterPermissionDefinition.IdFilter); } if (FilterPermissionDefinition.Name == nameof(subFilter.AppliedDepartmentId)) { if (subFilter.CurrentUserId == null) { subFilter.CurrentUserId = new IdFilter { } } ; subFilter.CurrentUserId.Equal = CurrentContext.UserId; subFilter.AppliedDepartmentId = FilterBuilder.Merge(subFilter.AppliedDepartmentId, FilterPermissionDefinition.IdFilter); } } } return(filter); } } }