private IQueryable <Model.Drawing> ApplyFilters(DrawingFilter filter) { var drawingList = DbSet .AsNoTracking() .Where(_ => _.DrawingCriterion.SiteId == filter.SiteId && _.IsArchived == filter.Archived); if (filter.SystemIds?.Any() == true) { drawingList = drawingList .Where(_ => filter.SystemIds.Contains(_.RelatedSystemId)); } if (filter.BranchIds?.Any() == true) { drawingList = drawingList .Where(_ => filter.BranchIds.Contains(_.RelatedBranchId)); } if (filter.UserIds?.Any() == true) { drawingList = drawingList.Where(_ => filter.UserIds.Contains(_.CreatedBy)); } if (filter.ProgramIds?.Any() == true) { IQueryable <Model.Drawing> nullList = null; IQueryable <Model.Drawing> valueList = null; if (filter.ProgramIds.Any(_ => _.HasValue == false)) { nullList = drawingList.Where(_ => _.DrawingCriterion.ProgramId == null); } if (filter.ProgramIds.Any(_ => _.HasValue)) { var programValues = filter.ProgramIds.Where(_ => _.HasValue); valueList = drawingList .Where(_ => programValues.Contains(_.DrawingCriterion.ProgramId)); } if (nullList != null && valueList != null) { drawingList = nullList.Union(valueList); } else if (nullList != null) { drawingList = nullList; } else if (valueList != null) { drawingList = valueList; } } if (!string.IsNullOrWhiteSpace(filter.Search)) { drawingList = drawingList.Where(_ => _.Name.Contains(filter.Search) || _.DrawingCriterion.Name.Contains(filter.Search)); } return(drawingList); }
public async Task <IEnumerable <Drawing> > PageAllAsync(DrawingFilter filter) { return(await ApplyFilters(filter) .OrderByDescending(_ => _.Id) .ApplyPagination(filter) .ProjectTo <Drawing>() .ToListAsync()); }
GetPaginatedDrawingListAsync(DrawingFilter filter) { int authUserId = GetClaimId(ClaimType.UserId); if (HasPermission(Permission.PerformDrawing)) { filter.SiteId = GetCurrentSiteId(); return(new DataWithCount <IEnumerable <Drawing> > { Data = await _drawingRepository.PageAllAsync(filter), Count = await _drawingRepository.GetCountAsync(filter) }); } else { _logger.LogError($"User {authUserId} doesn't have permission to view all drawings."); throw new GraException("Permission denied."); } }
public async Task <int> GetCountAsync(DrawingFilter filter) { return(await ApplyFilters(filter) .CountAsync()); }
public async Task <IActionResult> Index(string search, int?systemId, int?branchId, bool?mine, int?programId, bool?archived, int page = 1) { var filter = new DrawingFilter(page); if (!string.IsNullOrWhiteSpace(search)) { filter.Search = search; } if (archived == true) { filter.Archived = true; PageTitle = "Archived Drawings"; } if (mine == true) { filter.UserIds = new List <int> { GetId(ClaimType.UserId) }; } else if (branchId.HasValue) { filter.BranchIds = new List <int> { branchId.Value }; } else if (systemId.HasValue) { filter.SystemIds = new List <int> { systemId.Value }; } if (programId.HasValue) { if (programId.Value > 0) { filter.ProgramIds = new List <int?> { programId.Value }; } else { filter.ProgramIds = new List <int?> { null }; } } var drawingList = await _drawingService.GetPaginatedDrawingListAsync(filter); PaginateViewModel paginateModel = new PaginateViewModel() { ItemCount = drawingList.Count, CurrentPage = page, ItemsPerPage = filter.Take.Value }; if (paginateModel.MaxPage > 0 && paginateModel.CurrentPage > paginateModel.MaxPage) { return(RedirectToRoute( new { page = paginateModel.LastPage ?? 1 })); } var systemList = (await _siteService.GetSystemList()) .OrderByDescending(_ => _.Id == GetId(ClaimType.SystemId)).ThenBy(_ => _.Name); DrawingListViewModel viewModel = new DrawingListViewModel() { Drawings = drawingList.Data, PaginateModel = paginateModel, Archived = archived, Search = search, SystemId = systemId, BranchId = branchId, ProgramId = programId, Mine = mine, SystemList = systemList, ProgramList = await _siteService.GetProgramList() }; if (mine == true) { viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId))) .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId)) .ThenBy(_ => _.Name); viewModel.ActiveNav = "Mine"; } else if (branchId.HasValue) { var branch = await _siteService.GetBranchByIdAsync(branchId.Value); viewModel.BranchName = branch.Name; viewModel.SystemName = systemList .Where(_ => _.Id == branch.SystemId).SingleOrDefault().Name; viewModel.BranchList = (await _siteService.GetBranches(branch.SystemId)) .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId)) .ThenBy(_ => _.Name); viewModel.ActiveNav = "Branch"; } else if (systemId.HasValue) { viewModel.SystemName = systemList .Where(_ => _.Id == systemId.Value).SingleOrDefault().Name; viewModel.BranchList = (await _siteService.GetBranches(systemId.Value)) .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId)) .ThenBy(_ => _.Name); viewModel.ActiveNav = "System"; } else { viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId))) .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId)) .ThenBy(_ => _.Name); viewModel.ActiveNav = "All"; } if (programId.HasValue) { if (programId.Value > 0) { viewModel.ProgramName = (await _siteService.GetProgramByIdAsync(programId.Value)).Name; } else { viewModel.ProgramName = "Not Limited"; } } return(View(viewModel)); }