예제 #1
0
        public async Task <ObjectResult> Search(DivisionBaseSearchParams baseSearchParams)
        {
            var divisions = await _divisionService.Search(baseSearchParams);

            var result = _mapper.Map <PageView <DivisionViewModelList> >(divisions);

            return(Ok(result));
        }
예제 #2
0
        public async Task <PageView <DivisionShort> > Search(DivisionBaseSearchParams baseSearchParams)
        {
            var query = _context.Divisions.AsQueryable();

            if (!string.IsNullOrEmpty(baseSearchParams.Word))
            {
                var word = baseSearchParams.Word.ToLower();
                query = query.Where(d => d.Address.City.ToLower().Contains(word) ||
                                    d.Address.RegionWithType.ToLower().Contains(word) ||
                                    d.Address.Settlement.ToLower().Contains(word) ||
                                    d.Name.ToLower().Contains(word));
            }

            if (baseSearchParams.DivisionType.HasValue)
            {
                query = query.Where(d => d.DivisionType == baseSearchParams.DivisionType);
            }

            if (!string.IsNullOrEmpty(baseSearchParams.FiasId))
            {
                query = query.Where(d => d.Address.CityFiasId == baseSearchParams.FiasId ||
                                    d.Address.FiasId == baseSearchParams.FiasId ||
                                    d.Address.RegionFiasId == baseSearchParams.FiasId ||
                                    d.Address.SettlementFiasId == baseSearchParams.FiasId);
            }

            if (baseSearchParams.AdminUserId.HasValue)
            {
                query = query.Where(d => d.Admins.Any(u => u.Id == baseSearchParams.AdminUserId));
            }

            if (baseSearchParams.DirectorUserId.HasValue)
            {
                query = query.Where(d => d.Admins.Any(u => u.Id == baseSearchParams.DirectorUserId));
            }

            if (baseSearchParams.ParentDivisionId.HasValue)
            {
                query = query.Where(d => d.ParentDivisionId == baseSearchParams.ParentDivisionId.Value);
            }

            int skipCount = (baseSearchParams.Page - 1) * HARDCODED_SETTINGS.ITEMS_PER_PAGE;

            query = query.OrderBy(d => d.Name)
                    .Skip(skipCount)
                    .Take(baseSearchParams.Take);

            var pageView = new PageView <DivisionShort>
            {
                Items = await query.Select(d => new DivisionShort()
                {
                    Id               = d.Id,
                    Address          = d.Address.ToString(),
                    Name             = d.Name,
                    DirectorUserId   = d.DirectorUserId,
                    DirectorName     = d.Director.Name,
                    DivisionType     = d.DivisionType,
                    ParentDivisionId = d.ParentDivisionId
                }).ToListAsync(),
                CurrentPage = baseSearchParams.Page
            };

            return(pageView);
        }