Exemple #1
0
        public IQueryable <Model.ChallengeGroup> ApplyFilters(ChallengeGroupFilter filter)
        {
            var challengeGroupList = DbSet
                                     .AsNoTracking()
                                     .Where(_ => _.SiteId == filter.SiteId);

            if (filter.ChallengeGroupIds?.Count > 0)
            {
                challengeGroupList = challengeGroupList
                                     .Where(_ => !filter.ChallengeGroupIds.Contains(_.Id));
            }

            if (filter.ActiveGroups.HasValue)
            {
                var inactiveChallengeIds = _context.Challenges
                                           .AsNoTracking()
                                           .Where(_ => !_.IsActive || _.IsDeleted)
                                           .Select(_ => _.Id);

                challengeGroupList = challengeGroupList
                                     .Where(_ =>
                                            _.ChallengeGroupChallenges
                                            .Where(c => !inactiveChallengeIds.Contains(c.ChallengeId))
                                            .Select(c => c.ChallengeGroupId)
                                            .Contains(_.Id) == filter.ActiveGroups.Value);
            }

            if (!string.IsNullOrWhiteSpace(filter.Search))
            {
                challengeGroupList = challengeGroupList.Where(_ => _.Name.Contains(filter.Search));
            }

            return(challengeGroupList);
        }
Exemple #2
0
        public async Task <IActionResult> GetChallengeGroupList(string challengeGroupIds,
                                                                string search,
                                                                int page = 1)
        {
            var filter = new ChallengeGroupFilter(page, 10)
            {
                ActiveGroups = true,
                Search       = search
            };

            if (!string.IsNullOrWhiteSpace(challengeGroupIds))
            {
                filter.ChallengeGroupIds = challengeGroupIds.Split(',')
                                           .Where(_ => !string.IsNullOrWhiteSpace(_))
                                           .Select(int.Parse)
                                           .ToList();
            }

            var challengeGroupList = await _challengeService.GetPaginatedGroupListAsync(filter);

            var paginateModel = new PaginateViewModel
            {
                ItemCount    = challengeGroupList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };
            var viewModel = new ChallengeGroupsListViewModel
            {
                ChallengeGroups = challengeGroupList.Data,
                PaginateModel   = paginateModel,
                CanEditGroups   = UserHasPermission(Permission.EditChallengeGroups),
            };

            return(PartialView("_ChallengeGroupListPartial", viewModel));
        }
Exemple #3
0
 public async Task <IEnumerable <ChallengeGroup> > PageAsync(ChallengeGroupFilter filter)
 {
     return(await ApplyFilters(filter)
            .OrderBy(_ => _.Name)
            .ApplyPagination(filter)
            .ProjectTo <ChallengeGroup>(_mapper.ConfigurationProvider)
            .ToListAsync());
 }
Exemple #4
0
 GetPaginatedGroupListAsync(ChallengeGroupFilter filter)
 {
     VerifyPermission(Permission.ViewAllChallenges);
     filter.SiteId = GetCurrentSiteId();
     return(new DataWithCount <IEnumerable <ChallengeGroup> >
     {
         Data = await _challengeGroupRepository.PageAsync(filter),
         Count = await _challengeGroupRepository.CountAsync(filter)
     });
 }
Exemple #5
0
        public async Task <IActionResult> Groups(string search, int page = 1)
        {
            PageTitle = "Challenge Groups";
            var filter = new ChallengeGroupFilter(page)
            {
                Search = search
            };

            var groupList = await _challengeService.GetPaginatedGroupListAsync(filter);

            var paginateModel = new PaginateViewModel
            {
                ItemCount    = groupList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };

            if (paginateModel.PastMaxPage)
            {
                return(RedirectToRoute(
                           new
                {
                    page = paginateModel.LastPage ?? 1
                }));
            }

            var viewModel = new ChallengeGroupListViewModel()
            {
                ChallengeGroups = groupList.Data,
                PaginateModel   = paginateModel,
                Search          = search,
                CanAddGroups    = UserHasPermission(Permission.AddChallengeGroups),
                CanEditGroups   = UserHasPermission(Permission.EditChallengeGroups)
            };

            return(View(viewModel));
        }
Exemple #6
0
 public async Task <int> CountAsync(ChallengeGroupFilter filter)
 {
     return(await ApplyFilters(filter)
            .CountAsync());
 }