@@ -17,7 +17,7 @@ public static IEnumerable<Competency> FilterCompetencies(IEnumerable<Competency>
1717 var searchText = search . SearchText ? . Trim ( ) ?? string . Empty ;
1818 var filters = search . AppliedFilters ? . Select ( f => int . Parse ( f . FilterValue ) ) ?? Enumerable . Empty < int > ( ) ;
1919 search . CompetencyFlags = competencyFlags . ToList ( ) ;
20- CompetencyFilterHelper . ApplyResponseStatusFilters ( ref filteredCompetencies , filters , searchText ) ;
20+ ApplyResponseStatusFilters ( ref filteredCompetencies , filters , searchText ) ;
2121 UpdateRequirementsFilterDropdownOptionsVisibility ( search , filteredCompetencies ) ;
2222 ApplyRequirementsFilters ( ref filteredCompetencies , filters ) ;
2323
@@ -28,6 +28,39 @@ public static IEnumerable<Competency> FilterCompetencies(IEnumerable<Competency>
2828 }
2929 return filteredCompetencies ;
3030 }
31+ private static void ApplyResponseStatusFilters ( ref IEnumerable < Competency > competencies , IEnumerable < int > filters , string searchText = "" )
32+ {
33+ var appliedFilters = filters . Where ( f => IsResponseStatusFilter ( f ) ) . ToList ( ) ;
34+ var wordsInSearchText = searchText . Split ( ' ' , StringSplitOptions . RemoveEmptyEntries ) ;
35+
36+ if ( ! appliedFilters . Any ( ) && string . IsNullOrWhiteSpace ( searchText ) )
37+ return ;
38+
39+ competencies = competencies . Where ( c =>
40+ {
41+ // Search text match
42+ bool searchTextMatches = ! wordsInSearchText . Any ( ) ||
43+ wordsInSearchText . All ( w =>
44+ ( c . CompetencyGroup ? . Contains ( w , StringComparison . CurrentCultureIgnoreCase ) ?? false ) ||
45+ ( c . Description ? . Contains ( w , StringComparison . CurrentCultureIgnoreCase ) ?? false ) ||
46+ ( c . Name ? . Contains ( w , StringComparison . CurrentCultureIgnoreCase ) ?? false )
47+ ) ;
48+
49+ // All filters must match (AND)
50+ bool allFiltersMatch = appliedFilters . All ( f =>
51+ ( f == ( int ) SelfAssessmentCompetencyFilter . Verified && c . AssessmentQuestions . Any ( q => q . Verified . HasValue && q . SignedOff == true ) ) ||
52+ ( f == ( int ) SelfAssessmentCompetencyFilter . Optional && c . Optional ) ||
53+ ( f == ( int ) SelfAssessmentCompetencyFilter . ConfirmationRejected && c . AssessmentQuestions . Any ( q => q . Verified . HasValue && q . SignedOff != true ) ) ||
54+ ( f == ( int ) SelfAssessmentCompetencyFilter . PendingConfirmation && c . AssessmentQuestions . Any ( q => q . ResultId != null && q . Verified == null && q . Requested != null && q . UserIsVerifier == false ) ) ||
55+ ( f == ( int ) SelfAssessmentCompetencyFilter . AwaitingConfirmation && c . AssessmentQuestions . Any ( q => q . Verified == null && q . Requested != null && q . UserIsVerifier == true ) ) ||
56+ ( f == ( int ) SelfAssessmentCompetencyFilter . RequiresSelfAssessment && c . AssessmentQuestions . Any ( q => q . ResultId == null ) ) ||
57+ ( f == ( int ) SelfAssessmentCompetencyFilter . SelfAssessed && c . AssessmentQuestions . Any ( q => q . ResultId != null && q . Requested == null && q . SignedOff == null ) )
58+ ) ;
59+
60+ return searchTextMatches && allFiltersMatch ;
61+ } ) . ToList ( ) ;
62+ }
63+
3164 private static void ApplyRequirementsFilters ( ref IEnumerable < Competency > competencies , IEnumerable < int > filters )
3265 {
3366 var filteredCompetencies = competencies ;
0 commit comments