public async Task <PagedResultDto <LivestockListDto> > GetLivestock(GetLivestockInput input) { var query = GetFilteredQuery(input); var user = await UserManager.GetUserByIdAsync(AbpSession.GetUserId()); var isAdmin = await UserManager.IsInRoleAsync(user, StaticRoleNames.Host.Admin); var isSysAdmin = await UserManager.IsInRoleAsync(user, StaticRoleNames.Host.SysAdmin); var isStateAdmin = await UserManager.IsInRoleAsync(user, StaticRoleNames.Host.StateAdmin); var isCityAdmin = await UserManager.IsInRoleAsync(user, StaticRoleNames.Host.CityAdmin); var isOfficer = await UserManager.IsInRoleAsync(user, StaticRoleNames.Host.Officer); if (isAdmin || isSysAdmin) { query = query; } else if (isStateAdmin) { var union = _unionInfoRepository.FirstOrDefault(x => x.UserId == AbpSession.UserId); query = query.Where(x => x.Herd.UnionInfo.StateInfoId == union.StateInfoId); } else if (isCityAdmin) { var contractor = _contractorRepository.FirstOrDefault(x => x.UserId == AbpSession.UserId); query = query.Where(x => x.Herd.ContractorId == contractor.Id); } else if (isOfficer) { var officer = _officerRepository.FirstOrDefault(x => x.UserId == AbpSession.UserId); query = query.Where(x => x.OfficerId == officer.Id); } else { query = query.Where(x => false); } var userCount = await query.CountAsync(); var livestocks = await query .OrderBy(input.Sorting) .PageBy(input) .ToListAsync(); var livestocksListDto = ObjectMapper.Map <List <LivestockListDto> >(livestocks); return(new PagedResultDto <LivestockListDto>( userCount, livestocksListDto )); }
private IQueryable <Livestock> GetFilteredQuery(GetLivestockInput input) { var query = QueryableExtensions.WhereIf( _livestockRepository.GetAll() .Include(x => x.SpeciesInfo) .Include(x => x.SexInfo) .Include(x => x.Herd) .Include(x => x.ActivityInfo) .Include(x => x.Officer), !input.Filter.IsNullOrWhiteSpace(), u => u.NationalCode.Contains(input.Filter) || u.SpeciesInfo.Name.Contains(input.Filter) || u.Herd.HerdName.Contains(input.Filter) || u.Herd.Name.Contains(input.Filter) || u.Herd.Family.Contains(input.Filter) || u.ActivityInfo.Name.Contains(input.Filter) || u.Officer.Name.Contains(input.Filter) || u.Officer.Family.Contains(input.Filter)); return(query); }