コード例 #1
0
        public async Task <int> Count(KnowledgeArticleFilter filter)
        {
            IQueryable <KnowledgeArticleDAO> KnowledgeArticles = DataContext.KnowledgeArticle.AsNoTracking();

            KnowledgeArticles = DynamicFilter(KnowledgeArticles, filter);
            return(await KnowledgeArticles.CountAsync());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
                }
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
                }
            }
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
    }
}