2727 using System . Linq ;
2828 using System . Transactions ;
2929 using GDS . MultiPageFormData . Enums ;
30+ using DigitalLearningSolutions . Data . DataServices ;
3031
3132 [ FeatureGate ( FeatureFlags . RefactoredTrackingSystem ) ]
3233 [ Authorize ( Policy = CustomPolicies . UserCentreAdmin ) ]
@@ -41,29 +42,41 @@ public class CourseSetupController : Controller
4142 private readonly ICourseService courseService ;
4243 private readonly IMultiPageFormService multiPageFormService ;
4344 private readonly ISearchSortFilterPaginateService searchSortFilterPaginateService ;
45+ private readonly IPaginateService paginateService ;
4446 private readonly ISectionService sectionService ;
4547 private readonly ITutorialService tutorialService ;
4648 private readonly IActivityService activityService ;
49+ private readonly ICourseCategoriesDataService courseCategoriesDataService ;
50+ private readonly ICourseTopicsDataService courseTopicsDataService ;
4751
4852 public CourseSetupController (
4953 ICourseService courseService ,
5054 ITutorialService tutorialService ,
5155 ISectionService sectionService ,
5256 ISearchSortFilterPaginateService searchSortFilterPaginateService ,
57+ IPaginateService paginateService ,
5358 IConfiguration config ,
5459 IMultiPageFormService multiPageFormService ,
55- IActivityService activityService
60+ IActivityService activityService ,
61+ ICourseCategoriesDataService courseCategoriesDataService ,
62+ ICourseTopicsDataService courseTopicsDataService
63+
5664 )
5765 {
5866 this . courseService = courseService ;
5967 this . tutorialService = tutorialService ;
6068 this . sectionService = sectionService ;
6169 this . searchSortFilterPaginateService = searchSortFilterPaginateService ;
70+ this . paginateService = paginateService ;
6271 this . config = config ;
6372 this . multiPageFormService = multiPageFormService ;
6473 this . activityService = activityService ;
74+ this . courseCategoriesDataService = courseCategoriesDataService ;
75+ this . courseTopicsDataService = courseTopicsDataService ;
76+
6577 }
6678
79+ [ NoCaching ]
6780 [ Route ( "{page=1:int}" ) ]
6881 public IActionResult Index (
6982 string ? searchString = null ,
@@ -73,10 +86,12 @@ public IActionResult Index(
7386 string ? newFilterToAdd = null ,
7487 bool clearFilters = false ,
7588 int page = 1 ,
76- int ? itemsPerPage = null
89+ int ? itemsPerPage = 10
7790 )
7891 {
7992 sortBy ??= DefaultSortByOptions . Name . PropertyName ;
93+ sortDirection ??= GenericSortingHelper . Ascending ;
94+
8095 existingFilterString = FilteringHelper . GetFilterString (
8196 existingFilterString ,
8297 newFilterToAdd ,
@@ -89,28 +104,90 @@ public IActionResult Index(
89104 var centreId = User . GetCentreIdKnownNotNull ( ) ;
90105 var categoryId = User . GetAdminCategoryId ( ) ;
91106 var courseCategoryName = this . activityService . GetCourseCategoryNameForActivityFilter ( categoryId ) ;
92- var details = courseService . GetCentreCourseDetails ( centreId , categoryId ) ;
107+ var Categories = courseCategoriesDataService . GetCategoriesForCentreAndCentrallyManagedCourses ( centreId ) . Select ( c => c . CategoryName ) ;
108+ var Topics = courseTopicsDataService . GetCourseTopicsAvailableAtCentre ( centreId ) . Select ( c => c . CourseTopic ) ;
109+
110+ int offSet = ( ( page - 1 ) * itemsPerPage ) ?? 0 ;
111+ string isActive , categoryName , courseTopic , hasAdminFields ;
112+ isActive = categoryName = courseTopic = hasAdminFields = "Any" ;
113+ bool ? hideInLearnerPortal = null ;
114+
115+ if ( ! string . IsNullOrEmpty ( existingFilterString ) )
116+ {
117+ var selectedFilters = existingFilterString . Split ( FilteringHelper . FilterSeparator ) . ToList ( ) ;
118+
119+ if ( ! string . IsNullOrEmpty ( newFilterToAdd ) )
120+ {
121+ var filterHeader = newFilterToAdd . Split ( FilteringHelper . Separator ) [ 0 ] ;
122+ var dupfilters = selectedFilters . Where ( x => x . Contains ( filterHeader ) ) ;
123+ if ( dupfilters . Count ( ) > 1 )
124+ {
125+ foreach ( var filter in selectedFilters )
126+ {
127+ if ( filter . Contains ( filterHeader ) )
128+ {
129+ selectedFilters . Remove ( filter ) ;
130+ existingFilterString = string . Join ( FilteringHelper . FilterSeparator , selectedFilters ) ;
131+ break ;
132+ }
133+ }
134+ }
135+ }
136+
137+ if ( selectedFilters . Count > 0 )
138+ {
139+ foreach ( var filter in selectedFilters )
140+ {
141+ var filterArr = filter . Split ( FilteringHelper . Separator ) ;
142+ var filterValue = filterArr [ 2 ] ;
143+ if ( filterValue == FilteringHelper . EmptyValue ) filterValue = "No option selected" ;
144+
145+ if ( filter . Contains ( "CategoryName" ) )
146+ categoryName = filterValue ;
147+
148+ if ( filter . Contains ( "CourseTopic" ) )
149+ courseTopic = filterValue ;
150+
151+ if ( filter . Contains ( "Active" ) )
152+ isActive = filterValue ;
153+
154+ if ( filter . Contains ( "NotActive" ) )
155+ isActive = "false" ;
156+
157+ if ( filter . Contains ( "HasAdminFields" ) )
158+ hasAdminFields = filterValue ;
159+
160+ if ( filter . Contains ( "HideInLearnerPortal" ) )
161+ hideInLearnerPortal = filterValue == "true" ? true : false ;
162+ }
163+ }
164+ }
165+
166+ var ( courses , resultCount ) = courseService . GetCentreCourses ( searchString ?? string . Empty , offSet , ( int ) itemsPerPage , sortBy , sortDirection , centreId , categoryId , false , hideInLearnerPortal ,
167+ isActive , categoryName , courseTopic , hasAdminFields ) ;
168+ if ( courses . Count ( ) == 0 && resultCount > 0 )
169+ {
170+ page = 1 ;
171+ offSet = 0 ;
172+ ( courses , resultCount ) = courseService . GetCentreCourses ( searchString ?? string . Empty , offSet , ( int ) itemsPerPage , sortBy , sortDirection , centreId , categoryId , false , hideInLearnerPortal ,
173+ isActive , categoryName , courseTopic , hasAdminFields ) ;
174+ }
93175
94- var courses = UpdateCoursesNotActiveStatus ( details . Courses ) ;
95-
96176 var availableFilters = CourseStatisticsViewModelFilterOptions
97- . GetFilterOptions ( categoryId . HasValue ? new string [ ] { } : details . Categories , details . Topics ) . ToList ( ) ;
177+ . GetFilterOptions ( categoryId . HasValue ? new string [ ] { } : Categories , Topics ) . ToList ( ) ;
98178
99- var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions (
100- new SearchOptions ( searchString ) ,
101- new SortOptions ( sortBy , sortDirection ) ,
102- new FilterOptions (
103- existingFilterString ,
104- availableFilters ,
105- CourseStatusFilterOptions . IsActive . FilterValue
106- ) ,
107- new PaginationOptions ( page , itemsPerPage )
108- ) ;
179+ var result = paginateService . Paginate (
180+ courses ,
181+ resultCount ,
182+ new PaginationOptions ( page , itemsPerPage ) ,
183+ new FilterOptions ( existingFilterString , availableFilters ) ,
184+ searchString ,
185+ sortBy ,
186+ sortDirection
187+ ) ;
109188
110- var result = searchSortFilterPaginateService . SearchFilterSortAndPaginate (
111- courses ,
112- searchSortPaginationOptions
113- ) ;
189+ result . Page = page ;
190+ TempData [ "Page" ] = result . Page ;
114191
115192 var model = new CourseSetupViewModel (
116193 result ,
@@ -119,22 +196,13 @@ public IActionResult Index(
119196 courseCategoryName
120197 ) ;
121198
199+ model . TotalPages = ( int ) ( resultCount / itemsPerPage ) + ( ( resultCount % itemsPerPage ) > 0 ? 1 : 0 ) ;
200+ model . MatchingSearchResults = resultCount ;
122201 Response . UpdateFilterCookie ( CourseFilterCookieName , result . FilterString ) ;
123202
124203 return View ( model ) ;
125204 }
126205
127- [ Route ( "AllCourseStatistics" ) ]
128- public IActionResult AllCourseStatistics ( )
129- {
130- var centreId = User . GetCentreIdKnownNotNull ( ) ;
131- var categoryId = User . GetAdminCategoryId ( ) ;
132- var details = courseService . GetCentreCourseDetails ( centreId , categoryId ) ;
133-
134- var model = new AllCourseStatisticsViewModel ( details , config ) ;
135-
136- return View ( model ) ;
137- }
138206
139207 [ HttpGet ( "AddCourseNew" ) ]
140208 public IActionResult AddCourseNew ( )
0 commit comments