Пример #1
0
        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);
        }
Пример #2
0
 public async Task <IEnumerable <Drawing> > PageAllAsync(DrawingFilter filter)
 {
     return(await ApplyFilters(filter)
            .OrderByDescending(_ => _.Id)
            .ApplyPagination(filter)
            .ProjectTo <Drawing>()
            .ToListAsync());
 }
Пример #3
0
        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.");
            }
        }
Пример #4
0
 public async Task <int> GetCountAsync(DrawingFilter filter)
 {
     return(await ApplyFilters(filter)
            .CountAsync());
 }
Пример #5
0
        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));
        }