示例#1
0
        public CourseSetupViewModel(
            IEnumerable <CourseStatistics> courses,
            IEnumerable <string> categories,
            IEnumerable <string> topics,
            string?searchString,
            string sortBy,
            string sortDirection,
            string?filterBy,
            int page
            ) : base(searchString, page, true, sortBy, sortDirection, filterBy, searchLabel: "Search courses")
        {
            var sortedItems = GenericSortingHelper.SortAllItems(
                courses.AsQueryable(),
                sortBy,
                sortDirection
                );

            var filteredItems = FilteringHelper.FilterItems(sortedItems.AsQueryable(), filterBy).ToList();
            var searchedItems = GenericSearchHelper.SearchItems(filteredItems, SearchString).ToList();

            MatchingSearchResults = searchedItems.Count;
            SetTotalPages();
            var paginatedItems = GetItemsOnCurrentPage(searchedItems);

            Courses = paginatedItems.Select(c => new SearchableCourseStatisticsViewModel(c));

            Filters = CourseStatisticsViewModelFilterOptions.GetFilterOptions(categories, topics);
        }
示例#2
0
        public void FilterItems_with_some_filters_in_same_group_returns_expected_items()
        {
            // Given
            var          expectedItems = new[] { ItemA3 }.AsQueryable();
            const string filterString = "Group|Name|a╡Group|Name|b╡Number|Number|3";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterString);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
示例#3
0
        public void FilterItems_returns_expected_items_with_multiple_filters()
        {
            // Given
            var          expectedItems = new[] { ItemA1 }.AsQueryable();
            const string filterString = "Name|Name|a╡Number|Number|1";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterString);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
示例#4
0
        public void FilterItems_returns_expected_items_with_filter_with_bracket_in_it()
        {
            // Given
            var          expectedItems = new[] { ItemA1, ItemA3 }.AsQueryable();
            const string filterString = "Name(Field name)|Name|a";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterString);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
示例#5
0
        public void FilterItems_with_filters_in_same_group_returns_no_duplicates()
        {
            // Given
            var expectedItems = new[] { ItemA1, ItemA3 }.AsQueryable();
            var filterBy = "Group|Name|a╡Group|Name|a";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterBy);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
示例#6
0
        public void FilterItems_returns_expected_items_with_single_filter()
        {
            // Given
            var expectedItems = new[] { ItemA1, ItemA3 }.AsQueryable();
            var filterBy = "Name|Name|a";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterBy);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
        private void PopulateCourseDelegatesSheetForCourse(
            IXLWorkbook workbook,
            int customisationId,
            int centreId,
            string?sortBy,
            string?filterString,
            string sortDirection
            )
        {
            var adminFields = courseAdminFieldsService.GetCourseAdminFieldsForCourse(customisationId);

            var customRegistrationPrompts = registrationPromptsService.GetCentreRegistrationPromptsByCentreId(centreId);

            var courseDelegates = courseDataService.GetDelegatesOnCourseForExport(customisationId, centreId)
                                  .ToList();

            var filteredCourseDelegates =
                FilteringHelper.FilterItems(courseDelegates.AsQueryable(), filterString).ToList();
            var sortedCourseDelegates =
                GenericSortingHelper.SortAllItems(
                    filteredCourseDelegates.AsQueryable(),
                    sortBy ?? nameof(CourseDelegateForExport.FullNameForSearchingSorting),
                    sortDirection
                    );

            var dataTable = new DataTable();

            SetUpDataTableColumns(customRegistrationPrompts, adminFields, dataTable);

            foreach (var courseDelegate in sortedCourseDelegates)
            {
                AddDelegateToDataTable(dataTable, courseDelegate, customRegistrationPrompts, adminFields);
            }

            if (dataTable.Rows.Count == 0)
            {
                var row = dataTable.NewRow();
                dataTable.Rows.Add(row);
            }

            ClosedXmlHelper.AddSheetToWorkbook(
                workbook,
                $"Course {customisationId}",
                dataTable.AsEnumerable(),
                XLTableTheme.None
                );

            FormatWorksheetColumns(workbook, dataTable);
        }
示例#8
0
        private IEnumerable <DelegateUserCard> GetDelegatesToExport(
            int centreId,
            string?searchString,
            string?sortBy,
            string sortDirection,
            string?filterString
            )
        {
            var delegateUsers = userDataService.GetDelegateUserCardsByCentreId(centreId);
            var searchedUsers = GenericSearchHelper.SearchItems(delegateUsers, searchString).AsQueryable();
            var filteredItems = FilteringHelper.FilterItems(searchedUsers, filterString).AsQueryable();
            var sortedItems   = GenericSortingHelper.SortAllItems(
                filteredItems,
                sortBy ?? nameof(DelegateUserCard.SearchableName),
                sortDirection
                );

            return(sortedItems);
        }
        private IEnumerable <CourseStatisticsWithAdminFieldResponseCounts> GetCoursesToExport(
            int centreId,
            int?adminCategoryId,
            string?searchString,
            string?sortBy,
            string?filterString,
            string sortDirection
            )
        {
            var details         = courseService.GetCentreCourseDetailsWithAllCentreCourses(centreId, adminCategoryId);
            var searchedCourses = GenericSearchHelper.SearchItems(details.Courses, searchString);
            var filteredCourses = FilteringHelper.FilterItems(searchedCourses.AsQueryable(), filterString);
            var sortedCourses   = GenericSortingHelper.SortAllItems(
                filteredCourses.AsQueryable(),
                sortBy ?? nameof(CourseStatisticsWithAdminFieldResponseCounts.CourseName),
                sortDirection
                );

            return(sortedCourses);
        }
示例#10
0
        public DelegateGroupsViewModel(
            List <Group> groups,
            IEnumerable <CustomPrompt> registrationPrompts,
            string searchString,
            string sortBy,
            string sortDirection,
            string?filterBy,
            int page
            ) : base(searchString, page, true, sortBy, sortDirection, filterBy)
        {
            var sortedItems = GenericSortingHelper.SortAllItems(
                groups.AsQueryable(),
                sortBy,
                sortDirection
                );
            var searchedItems = GenericSearchHelper.SearchItems(sortedItems, SearchString);
            var filteredItems = FilteringHelper.FilterItems(searchedItems.AsQueryable(), filterBy).ToList();

            MatchingSearchResults = filteredItems.Count;
            SetTotalPages();
            var paginatedItems = GetItemsOnCurrentPage(filteredItems);

            DelegateGroups = paginatedItems.Select(g => new SearchableDelegateGroupViewModel(g));

            var admins = groups.Select(g => (g.AddedByAdminId, g.AddedByName)).Distinct();

            Filters = new[]
            {
                new FilterViewModel(
                    nameof(Group.AddedByAdminId),
                    "Added by",
                    DelegateGroupsViewModelFilterOptions.GetAddedByOptions(admins)
                    ),
                new FilterViewModel(
                    nameof(Group.LinkedToField),
                    "Linked field",
                    DelegateGroupsViewModelFilterOptions.GetLinkedFieldOptions(registrationPrompts)
                    )
            };
        }
示例#11
0
        public CentreAdministratorsViewModel(
            int centreId,
            IEnumerable <AdminUser> adminUsers,
            IEnumerable <string> categories,
            string?searchString,
            string?filterBy,
            int page
            ) : base(searchString, page, true, filterBy: filterBy, searchLabel: "Search administrators")
        {
            CentreId = centreId;
            var sortedItems = GenericSortingHelper.SortAllItems(
                adminUsers.AsQueryable(),
                DefaultSortOption,
                Ascending
                );
            var searchedItems = GenericSearchHelper.SearchItems(sortedItems, SearchString);
            var filteredItems = FilteringHelper.FilterItems(searchedItems.AsQueryable(), filterBy).ToList();

            MatchingSearchResults = filteredItems.Count;
            SetTotalPages();
            var paginatedItems = GetItemsOnCurrentPage(filteredItems);

            Admins = paginatedItems.Select(adminUser => new SearchableAdminViewModel(adminUser));

            Filters = new[]
            {
                new FilterViewModel("Role", "Role", AdministratorsViewModelFilterOptions.RoleOptions),
                new FilterViewModel(
                    "CategoryName",
                    "Category",
                    AdministratorsViewModelFilterOptions.GetCategoryOptions(categories)
                    ),
                new FilterViewModel(
                    "AccountStatus",
                    "Account Status",
                    AdministratorsViewModelFilterOptions.AccountStatusOptions
                    )
            };
        }