@@ -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-                 ApplyResponseStatusFilters ( ref  filteredCompetencies ,  filters ,  searchText ) ; 
20+                 CompetencyFilterHelper . ApplyResponseStatusFilters ( ref  filteredCompetencies ,  filters ,  searchText ) ; 
2121                UpdateRequirementsFilterDropdownOptionsVisibility ( search ,  filteredCompetencies ) ; 
2222                ApplyRequirementsFilters ( ref  filteredCompetencies ,  filters ) ; 
2323
@@ -28,109 +28,6 @@ public static IEnumerable<Competency> FilterCompetencies(IEnumerable<Competency>
2828            } 
2929            return  filteredCompetencies ; 
3030        } 
31- 
32-         private  static void  ApplyResponseStatusFilters ( ref  IEnumerable < Competency >  competencies ,  IEnumerable < int >  filters ,  string  searchText  =  "" ) 
33-         { 
34-             var  filteredCompetencies  =  competencies ; 
35-             var  appliedResponseStatusFilters  =  filters . Where ( f =>  IsResponseStatusFilter ( f ) ) ; 
36-             if  ( appliedResponseStatusFilters . Any ( )  ||  searchText . Length  >  0 ) 
37-             { 
38-                 var  wordsInSearchText  =  searchText . Split ( ) . Where ( w =>  w  !=  string . Empty ) ; 
39-                 filters  =  appliedResponseStatusFilters ; 
40-                 if  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Verified )  &&  filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional ) ) 
41-                 { 
42-                     filteredCompetencies  =  from  c  in  competencies 
43-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
44-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
45-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
46-                                            let  responseStatusFilterMatchesAnyQuestion  = 
47-                                             ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Verified )  &&  c . AssessmentQuestions . Any ( q =>  q . Verified . HasValue  &&  q . SignedOff  ==  true )  &&  c . Optional ) 
48-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
49-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
50-                                            select  c ; 
51-                 } 
52-                 else  if  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . ConfirmationRejected )  &&  filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional ) ) 
53-                 { 
54-                     filteredCompetencies  =  from  c  in  competencies 
55-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
56-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
57-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
58-                                            let  responseStatusFilterMatchesAnyQuestion  = 
59-                                             ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . ConfirmationRejected )  &&  c . AssessmentQuestions . Any ( q =>  q . Verified . HasValue  &&  q . SignedOff  !=  true )  &&  c . Optional ) 
60-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
61-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
62-                                            select  c ; 
63-                 } 
64-                 else  if  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . PendingConfirmation )  &&  filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional ) ) 
65-                 { 
66-                     filteredCompetencies  =  from  c  in  competencies 
67-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
68-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
69-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
70-                                            let  responseStatusFilterMatchesAnyQuestion  = 
71-                                             ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . PendingConfirmation )  &&  c . AssessmentQuestions . Any ( q =>  q . ResultId  !=  null  &&  q . Verified  ==  null  &&  q . Requested  !=  null  &&  q . UserIsVerifier  ==  false )  &&  c . Optional ) 
72-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
73-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
74-                                            select  c ; 
75-                 } 
76-                 else  if  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . AwaitingConfirmation )  &&  filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional ) ) 
77-                 { 
78-                     filteredCompetencies  =  from  c  in  competencies 
79-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
80-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
81-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
82-                                            let  responseStatusFilterMatchesAnyQuestion  = 
83-                                             ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . AwaitingConfirmation )  &&  c . AssessmentQuestions . Any ( q =>  q . Verified  ==  null  &&  q . Requested  !=  null  &&  q . UserIsVerifier  ==  true )  &&  c . Optional ) 
84-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
85-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
86-                                            select  c ; 
87-                 } 
88-                 else  if  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . RequiresSelfAssessment )  &&  filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional ) ) 
89-                 { 
90-                     filteredCompetencies  =  from  c  in  competencies 
91-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
92-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
93-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
94-                                            let  responseStatusFilterMatchesAnyQuestion  = 
95-                                             ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . RequiresSelfAssessment )  &&  c . AssessmentQuestions . Any ( q =>  q . ResultId  ==  null )  &&  c . Optional ) 
96-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
97-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
98-                                            select  c ; 
99-                 } 
100-                 else  if  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . SelfAssessed )  &&  filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional ) ) 
101-                 { 
102-                     filteredCompetencies  =  from  c  in  competencies 
103-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
104-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
105-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
106-                                            let  responseStatusFilterMatchesAnyQuestion  = 
107-                                             ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . SelfAssessed )  &&  c . AssessmentQuestions . Any ( q =>  q . ResultId  !=  null  &&  q . Requested  ==  null  &&  q . SignedOff  ==  null )  &&  c . Optional ) 
108-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
109-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
110-                                            select  c ; 
111-                 } 
112-                 else 
113-                 { 
114-                     filteredCompetencies  =  from  c  in  competencies 
115-                                            let  searchTextMatchesGroup  =  wordsInSearchText . All ( w =>  c . CompetencyGroup ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
116-                                            let  searchTextMatchesCompetencyDescription  =  wordsInSearchText . All ( w =>  c . Description ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
117-                                            let  searchTextMatchesCompetencyName  =  wordsInSearchText . All ( w =>  c . Name ? . Contains ( w ,  StringComparison . CurrentCultureIgnoreCase )  ??  false ) 
118-                                            let  responseStatusFilterMatchesAnyQuestion  = 
119-                                               ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . RequiresSelfAssessment )  &&  c . AssessmentQuestions . Any ( q =>  q . ResultId  ==  null ) ) 
120-                                            ||  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . SelfAssessed )  &&  c . AssessmentQuestions . Any ( q =>  q . ResultId  !=  null  &&  q . Requested  ==  null  &&  q . SignedOff  ==  null ) ) 
121-                                            ||  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . PendingConfirmation )  &&  c . AssessmentQuestions . Any ( q =>  q . ResultId  !=  null  &&  q . Verified  ==  null  &&  q . Requested  !=  null  &&  q . UserIsVerifier  ==  false ) ) 
122-                                            ||  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . ConfirmationRejected )  &&  c . AssessmentQuestions . Any ( q =>  q . Verified . HasValue  &&  q . SignedOff  !=  true ) ) 
123-                                            ||  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . AwaitingConfirmation )  &&  c . AssessmentQuestions . Any ( q =>  q . Verified  ==  null  &&  q . Requested  !=  null  &&  q . UserIsVerifier  ==  true ) ) 
124-                                            ||  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Verified )  &&  c . AssessmentQuestions . Any ( q =>  q . Verified . HasValue  &&  q . SignedOff  ==  true ) ) 
125-                                            ||  ( filters . Contains ( ( int ) SelfAssessmentCompetencyFilter . Optional )  &&  c . Optional ) 
126-                                            where  ( wordsInSearchText . Count ( )  ==  0  ||  searchTextMatchesGroup  ||  searchTextMatchesCompetencyDescription  ||  searchTextMatchesCompetencyName ) 
127-                                                &&  ( ! appliedResponseStatusFilters . Any ( )  ||  responseStatusFilterMatchesAnyQuestion ) 
128-                                            select  c ; 
129-                 } 
130-             } 
131-             competencies  =  filteredCompetencies ; 
132-         } 
133- 
13431        private  static void  ApplyRequirementsFilters ( ref  IEnumerable < Competency >  competencies ,  IEnumerable < int >  filters ) 
13532        { 
13633            var  filteredCompetencies  =  competencies ; 
0 commit comments