diff --git a/DigitalLearningSolutions.Web/Extensions/EnumExtensions.cs b/DigitalLearningSolutions.Web/Extensions/EnumExtensions.cs index 34c7fdc5c8..b0d6366737 100644 --- a/DigitalLearningSolutions.Web/Extensions/EnumExtensions.cs +++ b/DigitalLearningSolutions.Web/Extensions/EnumExtensions.cs @@ -19,6 +19,8 @@ public static string GetDescription(this SelfAssessmentCompetencyFilter status, { switch (status) { + case SelfAssessmentCompetencyFilter.Optional: + return "Optional"; case SelfAssessmentCompetencyFilter.RequiresSelfAssessment: return "Requires self assessment"; case SelfAssessmentCompetencyFilter.SelfAssessed: diff --git a/DigitalLearningSolutions.Web/Helpers/CompetencyFilterHelper.cs b/DigitalLearningSolutions.Web/Helpers/CompetencyFilterHelper.cs index 7ae5111afe..26b0e181ab 100644 --- a/DigitalLearningSolutions.Web/Helpers/CompetencyFilterHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/CompetencyFilterHelper.cs @@ -34,22 +34,23 @@ private static void ApplyResponseStatusFilters(ref IEnumerable compe { var filteredCompetencies = competencies; var appliedResponseStatusFilters = filters.Where(f => IsResponseStatusFilter(f)); + if (appliedResponseStatusFilters.Any() || searchText.Length > 0) { var wordsInSearchText = searchText.Split().Where(w => w != string.Empty); - filters = appliedResponseStatusFilters; filteredCompetencies = from c in competencies let searchTextMatchesGroup = wordsInSearchText.All(w => c.CompetencyGroup?.Contains(w, StringComparison.CurrentCultureIgnoreCase) ?? false) let searchTextMatchesCompetencyDescription = wordsInSearchText.All(w => c.Description?.Contains(w, StringComparison.CurrentCultureIgnoreCase) ?? false) let searchTextMatchesCompetencyName = wordsInSearchText.All(w => c.Name?.Contains(w, StringComparison.CurrentCultureIgnoreCase) ?? false) - let responseStatusFilterMatchesAnyQuestion = - (filters.Contains((int)SelfAssessmentCompetencyFilter.RequiresSelfAssessment) && c.AssessmentQuestions.Any(q => q.ResultId == null)) - || (filters.Contains((int)SelfAssessmentCompetencyFilter.SelfAssessed) && c.AssessmentQuestions.Any(q => q.ResultId != null && q.Requested == null && q.SignedOff == null)) - || (filters.Contains((int)SelfAssessmentCompetencyFilter.ConfirmationRequested) && c.AssessmentQuestions.Any(q => q.Verified == null && q.Requested != null)) - || (filters.Contains((int)SelfAssessmentCompetencyFilter.ConfirmationRejected) && c.AssessmentQuestions.Any(q => q.Verified.HasValue && q.SignedOff != true)) - || (filters.Contains((int)SelfAssessmentCompetencyFilter.Verified) && c.AssessmentQuestions.Any(q => q.Verified.HasValue && q.SignedOff == true)) + let responseStatusFilterMatchesAll = + (!filters.Contains((int)SelfAssessmentCompetencyFilter.RequiresSelfAssessment) || c.AssessmentQuestions.Any(q => q.ResultId == null)) + && (!filters.Contains((int)SelfAssessmentCompetencyFilter.SelfAssessed) || c.AssessmentQuestions.Any(q => q.ResultId != null && q.Requested == null && q.SignedOff == null)) + && (!filters.Contains((int)SelfAssessmentCompetencyFilter.ConfirmationRequested) || c.AssessmentQuestions.Any(q => q.Verified == null && q.Requested != null)) + && (!filters.Contains((int)SelfAssessmentCompetencyFilter.ConfirmationRejected) || c.AssessmentQuestions.Any(q => q.Verified.HasValue && q.SignedOff != true)) + && (!filters.Contains((int)SelfAssessmentCompetencyFilter.Verified) || c.AssessmentQuestions.Any(q => q.Verified.HasValue && q.SignedOff == true)) + && (!filters.Contains((int)SelfAssessmentCompetencyFilter.Optional) || c.Optional) where (wordsInSearchText.Count() == 0 || searchTextMatchesGroup || searchTextMatchesCompetencyDescription || searchTextMatchesCompetencyName) - && (!appliedResponseStatusFilters.Any() || responseStatusFilterMatchesAnyQuestion) + && (!appliedResponseStatusFilters.Any() || responseStatusFilterMatchesAll) select c; } competencies = filteredCompetencies; @@ -111,6 +112,7 @@ public static bool IsResponseStatusFilter(int filter) { var responseStatusFilters = new int[] { + (int)SelfAssessmentCompetencyFilter.Optional, (int)SelfAssessmentCompetencyFilter.RequiresSelfAssessment, (int)SelfAssessmentCompetencyFilter.SelfAssessed, (int)SelfAssessmentCompetencyFilter.Verified,