From bb328a5c6514c9b0eb251c4fd25a84e27f50e1a6 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 30 Nov 2022 11:19:37 +0000 Subject: [PATCH 01/11] wip --- .../DataServices/CourseDataService.cs | 9 ++++++++- .../Models/Courses/Course.cs | 2 +- ...CourseStatisticsWithAdminFieldResponseCounts.cs | 1 + .../Services/CourseService.cs | 2 +- .../Helpers/FilterOptions/CourseFilterOptions.cs | 11 +++++++++++ .../Helpers/FilterableTagHelper.cs | 8 +++++++- .../Styles/trackingSystem/courseSetup.scss | 11 ++++++++++- .../SearchableCourseStatisticsViewModel.cs | 6 ++++++ .../CourseSetup/_CentreCourseCard.cshtml | 14 ++++++++++---- 9 files changed, 55 insertions(+), 9 deletions(-) diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index adb7681fc0..704541ada1 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -168,6 +168,12 @@ FROM CustomisationTutorials AS ct WHERE ct.DiagStatus = 1 AND a.DiagAssess = 1 AND ct.CustomisationID = c.CustomisationID AND a.ArchivedDate IS NULL AND a.DefaultContentTypeID <> 4"; + private const string CourseStatus = + @"CASE WHEN ap.ArchivedDate IS NOT NULL THEN 'archived' + WHEN cu.Active = 1 THEN 'active' + WHEN cu.Active = 0 THEN 'inactive' + END AS Status"; + private readonly IDbConnection connection; private readonly ILogger logger; private readonly ISelfAssessmentDataService selfAssessmentDataService; @@ -188,7 +194,8 @@ FROM CustomisationTutorials AS ct cc.CategoryName, ct.CourseTopic, cu.LearningTimeMins AS LearningMinutes, - cu.IsAssessed + cu.IsAssessed, + {CourseStatus} FROM dbo.Customisations AS cu INNER JOIN dbo.CentreApplications AS ca ON ca.ApplicationID = cu.ApplicationID INNER JOIN dbo.Applications AS ap ON ap.ApplicationID = ca.ApplicationID diff --git a/DigitalLearningSolutions.Data/Models/Courses/Course.cs b/DigitalLearningSolutions.Data/Models/Courses/Course.cs index 3383d00d52..49af3dd76c 100644 --- a/DigitalLearningSolutions.Data/Models/Courses/Course.cs +++ b/DigitalLearningSolutions.Data/Models/Courses/Course.cs @@ -6,7 +6,7 @@ public class Course : CourseNameInfo public int CentreId { get; set; } public int ApplicationId { get; set; } public bool Active { get; set; } - + public string? Status { get; set; } public string CourseNameWithInactiveFlag => !Active ? "Inactive - " + CourseName : CourseName; public override bool Equals(object? obj) diff --git a/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs b/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs index 177e143c85..5688bef231 100644 --- a/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs +++ b/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs @@ -30,6 +30,7 @@ IEnumerable adminFieldsWithResponses Active = courseStatistics.Active; CustomisationName = courseStatistics.CustomisationName; ApplicationName = courseStatistics.ApplicationName; + Status = courseStatistics.Status; } public IEnumerable AdminFieldsWithResponses { get; set; } diff --git a/DigitalLearningSolutions.Data/Services/CourseService.cs b/DigitalLearningSolutions.Data/Services/CourseService.cs index 8f8fbd3a52..6977584f69 100644 --- a/DigitalLearningSolutions.Data/Services/CourseService.cs +++ b/DigitalLearningSolutions.Data/Services/CourseService.cs @@ -351,7 +351,7 @@ public IEnumerable GetTopicsForCentreAndCentrallyManagedCourses(int cent public CentreCourseDetails GetCentreCourseDetails(int centreId, int? categoryId) { var (courses, categories, topics) = ( - GetNonArchivedCentreSpecificCourseStatisticsWithAdminFieldResponseCounts(centreId, categoryId), + GetCentreSpecificCourseStatisticsWithAdminFieldResponseCounts(centreId, categoryId), courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId) .Select(c => c.CategoryName), courseTopicsDataService.GetCourseTopicsAvailableAtCentre(centreId).Select(c => c.CourseTopic)); diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index b19fdf3f57..4474ab0845 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -22,6 +22,17 @@ public static class CourseStatusFilterOptions FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "true"), FilterStatus.Success ); + + + + public static readonly FilterOptionModel IsArchived = new FilterOptionModel( + "Archived", + FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Status), "Archived"), + FilterStatus.Success + ); + + + } public static class CourseVisibilityFilterOptions diff --git a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs index 3de4aca091..b7a16ec500 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs @@ -71,7 +71,13 @@ CourseStatistics courseStatistics { var tags = new List(); - if (courseStatistics.Active) + + + if (courseStatistics.Status == "archived") + { + tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsArchived)); + } + else if (courseStatistics.Active) { tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsActive)); } diff --git a/DigitalLearningSolutions.Web/Styles/trackingSystem/courseSetup.scss b/DigitalLearningSolutions.Web/Styles/trackingSystem/courseSetup.scss index 5c85db3b5e..c7da489d3e 100644 --- a/DigitalLearningSolutions.Web/Styles/trackingSystem/courseSetup.scss +++ b/DigitalLearningSolutions.Web/Styles/trackingSystem/courseSetup.scss @@ -1,7 +1,16 @@ -@use "../shared/cardWithButtons"; +@use "nhsuk-frontend/packages/core/all" as *; +@use "../shared/cardWithButtons"; @use "../shared/searchableElements/searchableElements"; @use "../shared/headingButtons.scss"; .admin-field-count { width: 10%; } + +.status-inactive { + border-left: 6px solid tint($color_nhsuk-red, 80); +} + +.status-archived { + border-left: 6px solid $color_nhsuk-grey-2; +} diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs index a836001b06..96e73aa1d3 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs @@ -22,10 +22,15 @@ public SearchableCourseStatisticsViewModel(CourseStatisticsWithAdminFieldRespons CategoryName = courseStatistics.CategoryName; CourseTopic = courseStatistics.CourseTopic; LearningMinutes = courseStatistics.LearningMinutes; + + Tags = FilterableTagHelper.GetCurrentTagsForCourseStatistics(courseStatistics); + + Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; LaunchCourseLink = $"{config.GetAppRootPath()}/LearningMenu/{CustomisationId}"; + Status = courseStatistics.Status; } private string LaunchCourseLink { get; set; } @@ -38,6 +43,7 @@ public SearchableCourseStatisticsViewModel(CourseStatisticsWithAdminFieldRespons public string CourseTopic { get; set; } public string LearningMinutes { get; set; } public bool Assessed { get; set; } + public string? Status { get; set; } public IEnumerable AdminFieldWithResponseCounts { get; set; } public bool HasAdminFields => AdminFieldWithResponseCounts.Any(); diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml index cade51f5d8..0f3f335a28 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml @@ -1,22 +1,28 @@ @using DigitalLearningSolutions.Web.ViewModels.TrackingSystem.CourseSetup @model SearchableCourseStatisticsViewModel -
+
@Model.CourseName - +
+ + + + + + + - @if (Model.HasAdminFields) - { + @if (Model.HasAdminFields) { } From 62b58eb05caa9aaea9d88b1b909b0761e4dfc928 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 30 Nov 2022 12:30:58 +0000 Subject: [PATCH 02/11] Changed ui mechanism to Archived flag from Status. --- .../DataServices/CourseDataService.cs | 8 +------- .../Models/Courses/Course.cs | 2 +- ...eStatisticsWithAdminFieldResponseCounts.cs | 2 +- .../FilterOptions/CourseFilterOptions.cs | 11 ++-------- .../Helpers/FilterableTagHelper.cs | 4 +--- .../SearchablePage/SearchableTagViewModel.cs | 1 - .../SearchableCourseStatisticsViewModel.cs | 20 ++++++++++++++++++- 7 files changed, 25 insertions(+), 23 deletions(-) diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index 704541ada1..2a277d90e8 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -168,12 +168,6 @@ FROM CustomisationTutorials AS ct WHERE ct.DiagStatus = 1 AND a.DiagAssess = 1 AND ct.CustomisationID = c.CustomisationID AND a.ArchivedDate IS NULL AND a.DefaultContentTypeID <> 4"; - private const string CourseStatus = - @"CASE WHEN ap.ArchivedDate IS NOT NULL THEN 'archived' - WHEN cu.Active = 1 THEN 'active' - WHEN cu.Active = 0 THEN 'inactive' - END AS Status"; - private readonly IDbConnection connection; private readonly ILogger logger; private readonly ISelfAssessmentDataService selfAssessmentDataService; @@ -195,7 +189,7 @@ FROM CustomisationTutorials AS ct ct.CourseTopic, cu.LearningTimeMins AS LearningMinutes, cu.IsAssessed, - {CourseStatus} + CASE WHEN ap.ArchivedDate IS NOT NULL THEN 1 ELSE 0 END AS Archived FROM dbo.Customisations AS cu INNER JOIN dbo.CentreApplications AS ca ON ca.ApplicationID = cu.ApplicationID INNER JOIN dbo.Applications AS ap ON ap.ApplicationID = ca.ApplicationID diff --git a/DigitalLearningSolutions.Data/Models/Courses/Course.cs b/DigitalLearningSolutions.Data/Models/Courses/Course.cs index 49af3dd76c..2e151a3410 100644 --- a/DigitalLearningSolutions.Data/Models/Courses/Course.cs +++ b/DigitalLearningSolutions.Data/Models/Courses/Course.cs @@ -6,7 +6,7 @@ public class Course : CourseNameInfo public int CentreId { get; set; } public int ApplicationId { get; set; } public bool Active { get; set; } - public string? Status { get; set; } + public bool Archived { get; set; } public string CourseNameWithInactiveFlag => !Active ? "Inactive - " + CourseName : CourseName; public override bool Equals(object? obj) diff --git a/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs b/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs index 5688bef231..d59f91aec2 100644 --- a/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs +++ b/DigitalLearningSolutions.Data/Models/Courses/CourseStatisticsWithAdminFieldResponseCounts.cs @@ -30,7 +30,7 @@ IEnumerable adminFieldsWithResponses Active = courseStatistics.Active; CustomisationName = courseStatistics.CustomisationName; ApplicationName = courseStatistics.ApplicationName; - Status = courseStatistics.Status; + Archived = courseStatistics.Archived; } public IEnumerable AdminFieldsWithResponses { get; set; } diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index 4474ab0845..6ece1f5ce3 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -4,8 +4,6 @@ using DigitalLearningSolutions.Data.Helpers; using DigitalLearningSolutions.Data.Models.Courses; using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate; - using DigitalLearningSolutions.Web.Models.Enums; - using DigitalLearningSolutions.Web.ViewModels.Common.SearchablePage; public static class CourseStatusFilterOptions { @@ -23,16 +21,11 @@ public static class CourseStatusFilterOptions FilterStatus.Success ); - - public static readonly FilterOptionModel IsArchived = new FilterOptionModel( "Archived", - FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Status), "Archived"), - FilterStatus.Success + FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), + FilterStatus.Default ); - - - } public static class CourseVisibilityFilterOptions diff --git a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs index b7a16ec500..089da04bdf 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs @@ -71,9 +71,7 @@ CourseStatistics courseStatistics { var tags = new List(); - - - if (courseStatistics.Status == "archived") + if (courseStatistics.Archived) { tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsArchived)); } diff --git a/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs index 4f09ed4bc2..2c220c74a0 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs @@ -2,7 +2,6 @@ { using DigitalLearningSolutions.Data.Enums; using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate; - using DigitalLearningSolutions.Web.Models.Enums; public class SearchableTagViewModel : FilterOptionModel { diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs index 96e73aa1d3..bb478c083e 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs @@ -30,7 +30,7 @@ public SearchableCourseStatisticsViewModel(CourseStatisticsWithAdminFieldRespons Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; LaunchCourseLink = $"{config.GetAppRootPath()}/LearningMenu/{CustomisationId}"; - Status = courseStatistics.Status; + Status = DeriveCourseStatus(courseStatistics); } private string LaunchCourseLink { get; set; } @@ -69,5 +69,23 @@ private string GenerateEmailHref() return $"mailto:?subject={subject}&body={content}"; } + + private static string DeriveCourseStatus(Course courseStatistics) + { + string status; + if (courseStatistics.Archived) + { + status = "archived"; + } + else if (courseStatistics.Active) + { + status = "active"; + } + else + { + status = "inactive"; + } + return status; + } } } From acc73fc8089ab86645f55bbe6aae2ca3bcb11ae9 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 30 Nov 2022 12:36:52 +0000 Subject: [PATCH 03/11] Tidy up. --- .../CourseSetup/SearchableCourseStatisticsViewModel.cs | 4 ---- .../TrackingSystem/CourseSetup/_CentreCourseCard.cshtml | 8 -------- 2 files changed, 12 deletions(-) diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs index bb478c083e..006fdc7e7f 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs @@ -22,11 +22,7 @@ public SearchableCourseStatisticsViewModel(CourseStatisticsWithAdminFieldRespons CategoryName = courseStatistics.CategoryName; CourseTopic = courseStatistics.CourseTopic; LearningMinutes = courseStatistics.LearningMinutes; - - Tags = FilterableTagHelper.GetCurrentTagsForCourseStatistics(courseStatistics); - - Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; LaunchCourseLink = $"{config.GetAppRootPath()}/LearningMenu/{CustomisationId}"; diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml index 0f3f335a28..492a0379f9 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml @@ -10,15 +10,7 @@
- - - - - - - - From 9a22574246f2af5bef9c997763441c0440c167b2 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 30 Nov 2022 14:41:34 +0000 Subject: [PATCH 04/11] Updated unit tests with Archived flag. --- .../DataServices/CourseDataServiceTests.cs | 1 + .../TrackingSystem/CourseSetup/CourseSetupControllerTests.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs b/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs index df47de9053..07af4366f4 100644 --- a/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs +++ b/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs @@ -346,6 +346,7 @@ public void GetCourseStatisticsAtCentreFilteredByCategory_should_return_course_s CategoryName = "Office 2007", CourseTopic = "Microsoft Office", LearningMinutes = "N/A", + Archived = false, }; result.Should().HaveCount(259); diff --git a/DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/CourseSetup/CourseSetupControllerTests.cs b/DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/CourseSetup/CourseSetupControllerTests.cs index 2fa91396f2..03826bf9da 100644 --- a/DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/CourseSetup/CourseSetupControllerTests.cs +++ b/DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/CourseSetup/CourseSetupControllerTests.cs @@ -81,6 +81,7 @@ public class CourseSetupControllerTests HideInLearnerPortal = true, DelegateCount = 1, CompletedCount = 1, + Archived = false, }, } ) From cc36c64d715f95048ed69aa3492d25096de069f5 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 30 Nov 2022 16:29:55 +0000 Subject: [PATCH 05/11] Updated Delegate Courses code for Archived ui elements. --- .../Helpers/FilterableTagHelper.cs | 26 ++++++++------ .../Styles/trackingSystem/viewDelegate.scss | 9 +++++ .../SearchableCourseStatisticsViewModel.cs | 36 +++++++++---------- ...chableDelegateCourseStatisticsViewModel.cs | 19 ++++++++++ .../CourseSetup/_CentreCourseCard.cshtml | 2 +- .../DelegateCourses/_CentreCourseCard.cshtml | 3 +- 6 files changed, 65 insertions(+), 30 deletions(-) diff --git a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs index 089da04bdf..40ff8ca3e0 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs @@ -71,11 +71,7 @@ CourseStatistics courseStatistics { var tags = new List(); - if (courseStatistics.Archived) - { - tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsArchived)); - } - else if (courseStatistics.Active) + if (courseStatistics.Active) { tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsActive)); } @@ -100,12 +96,22 @@ public static IEnumerable GetCurrentTagsForDelegateCours CourseStatistics courseStatistics ) { - return new List + var tags = new List(); + + if (courseStatistics.Archived) { - courseStatistics.Active - ? new SearchableTagViewModel(CourseStatusFilterOptions.IsActive) - : new SearchableTagViewModel(CourseStatusFilterOptions.IsInactive), - }; + tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsArchived)); + } + else if (courseStatistics.Active) + { + tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsActive)); + } + else + { + tags.Add(new SearchableTagViewModel(CourseStatusFilterOptions.IsInactive)); + } + + return tags; } public static IEnumerable GetCurrentTagsForCourseDelegate(CourseDelegate courseDelegate) diff --git a/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss b/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss index 6b018d664a..a3602b1f88 100644 --- a/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss +++ b/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss @@ -61,3 +61,12 @@ border-left: 6px solid $color_nhsuk-grey-2; } } + +.status-inactive { + border-left: 6px solid tint($color_nhsuk-red, 80); +} + +.status-archived { + border-left: 6px solid $color_nhsuk-grey-2; +} + diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs index 006fdc7e7f..13df65f0ba 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs @@ -26,7 +26,7 @@ public SearchableCourseStatisticsViewModel(CourseStatisticsWithAdminFieldRespons Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; LaunchCourseLink = $"{config.GetAppRootPath()}/LearningMenu/{CustomisationId}"; - Status = DeriveCourseStatus(courseStatistics); + //Status = DeriveCourseStatus(courseStatistics); } private string LaunchCourseLink { get; set; } @@ -66,22 +66,22 @@ private string GenerateEmailHref() return $"mailto:?subject={subject}&body={content}"; } - private static string DeriveCourseStatus(Course courseStatistics) - { - string status; - if (courseStatistics.Archived) - { - status = "archived"; - } - else if (courseStatistics.Active) - { - status = "active"; - } - else - { - status = "inactive"; - } - return status; - } + //private static string DeriveCourseStatus(Course courseStatistics) + //{ + // string status; + // if (courseStatistics.Archived) + // { + // status = "archived"; + // } + // else if (courseStatistics.Active) + // { + // status = "active"; + // } + // else + // { + // status = "inactive"; + // } + // return status; + //} } } diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs index 9089aba228..1ef3d68cba 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs @@ -22,6 +22,7 @@ public SearchableDelegateCourseStatisticsViewModel(CourseStatisticsWithAdminFiel Tags = FilterableTagHelper.GetCurrentTagsForDelegateCourses(courseStatistics); Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; + Status = DeriveCourseStatus(courseStatistics); } public int CustomisationId { get; set; } @@ -32,6 +33,7 @@ public SearchableDelegateCourseStatisticsViewModel(CourseStatisticsWithAdminFiel public string CourseTopic { get; set; } public string LearningMinutes { get; set; } public bool Assessed { get; set; } + public string? Status { get; set; } public IEnumerable AdminFieldWithResponseCounts { get; set; } @@ -49,5 +51,22 @@ public SearchableDelegateCourseStatisticsViewModel(CourseStatisticsWithAdminFiel FilteringHelper.Separator + nameof(CourseStatisticsWithAdminFieldResponseCounts.HasAdminFields) + FilteringHelper.Separator + HasAdminFields.ToString().ToLowerInvariant(); + private static string DeriveCourseStatus(Course courseStatistics) + { + string status; + if (courseStatistics.Archived) + { + status = "archived"; + } + else if (courseStatistics.Active) + { + status = "active"; + } + else + { + status = "inactive"; + } + return status; + } } } diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml index 492a0379f9..75bc819b76 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml @@ -1,7 +1,7 @@ @using DigitalLearningSolutions.Web.ViewModels.TrackingSystem.CourseSetup @model SearchableCourseStatisticsViewModel -
+
diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml index d27862da63..6d81c3e097 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml @@ -1,7 +1,7 @@ @using DigitalLearningSolutions.Web.ViewModels.TrackingSystem.Delegates.DelegateCourses @model SearchableDelegateCourseStatisticsViewModel -
+
@@ -10,6 +10,7 @@
+ From 6aaf407f487bbedcceff7f5006addd865bc79773 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 30 Nov 2022 16:34:31 +0000 Subject: [PATCH 06/11] Tidy up. --- .../SearchableCourseStatisticsViewModel.cs | 19 ------------------- .../CourseSetup/_CentreCourseCard.cshtml | 5 +++-- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs index 13df65f0ba..e5e4ffd0b2 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/CourseSetup/SearchableCourseStatisticsViewModel.cs @@ -26,7 +26,6 @@ public SearchableCourseStatisticsViewModel(CourseStatisticsWithAdminFieldRespons Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; LaunchCourseLink = $"{config.GetAppRootPath()}/LearningMenu/{CustomisationId}"; - //Status = DeriveCourseStatus(courseStatistics); } private string LaunchCourseLink { get; set; } @@ -65,23 +64,5 @@ private string GenerateEmailHref() return $"mailto:?subject={subject}&body={content}"; } - - //private static string DeriveCourseStatus(Course courseStatistics) - //{ - // string status; - // if (courseStatistics.Archived) - // { - // status = "archived"; - // } - // else if (courseStatistics.Active) - // { - // status = "active"; - // } - // else - // { - // status = "inactive"; - // } - // return status; - //} } } diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml index 75bc819b76..506817ce22 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/CourseSetup/_CentreCourseCard.cshtml @@ -6,7 +6,7 @@ @Model.CourseName - +
@@ -14,7 +14,8 @@ - @if (Model.HasAdminFields) { + @if (Model.HasAdminFields) + { } From 1e6f781ea75a6c91c11933a9d20e4cbcf38f84ec Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Tue, 13 Dec 2022 14:57:25 +0000 Subject: [PATCH 07/11] wip --- .../FilterOptions/CourseFilterOptions.cs | 75 ++++++++++++++++--- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index 6ece1f5ce3..c20f4f0553 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -10,22 +10,75 @@ public static class CourseStatusFilterOptions private const string Group = "Status"; public static readonly FilterOptionModel IsInactive = new FilterOptionModel( - "Inactive", + "Inactive/archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), FilterStatus.Warning ); - public static readonly FilterOptionModel IsActive = new FilterOptionModel( - "Active", - FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "true"), - FilterStatus.Success - ); + //public static readonly FilterOptionModel IsActive = new FilterOptionModel( + // "Active", + // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "true"), + // FilterStatus.Success + //); - public static readonly FilterOptionModel IsArchived = new FilterOptionModel( - "Archived", - FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), - FilterStatus.Default - ); + public const char FilterSeparator = '╡'; + + public static FilterOptionModel IsActive + { + get + { + var activeFilterValue = FilteringHelper.BuildFilterValueString( + "Active", + nameof(CourseStatistics.Active), + "true" + ); + + var notArchivedFilterValue = FilteringHelper.BuildFilterValueString( + "Archived", + nameof(CourseStatistics.Archived), + "false" + ); + + var filterValue = activeFilterValue + FilterSeparator + notArchivedFilterValue; + + return new FilterOptionModel( + "Active", + filterValue, + FilterStatus.Success + ); + } + } + + //public static readonly FilterOptionModel IsArchived = new FilterOptionModel( + // "Archived", + // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), + // FilterStatus.Default + //); + + public static FilterOptionModel IsArchived + { + get + { + var filterValue = FilteringHelper.BuildFilterValueString( + "Archived", + nameof(CourseStatistics.Archived), + "true" + ); + + //TODO: Also need to OR with .Active=false + //var filterValue = FilteringHelper.BuildFilterValueString( + // "Archived", + // nameof(CourseStatistics.Archived), + // "true" + //); + + return new FilterOptionModel( + Group, + filterValue, + FilterStatus.Success + ); + } + } } public static class CourseVisibilityFilterOptions From 8a6e3c8fd7cf7b15b6360258f2f402802ce5330c Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Wed, 14 Dec 2022 11:24:48 +0000 Subject: [PATCH 08/11] wip --- .../FilterOptions/CourseFilterOptions.cs | 131 +++++++++--------- .../Styles/trackingSystem/viewDelegate.scss | 5 + .../DelegateCoursesViewModel.cs | 27 ++++ ...chableDelegateCourseStatisticsViewModel.cs | 16 +-- 4 files changed, 105 insertions(+), 74 deletions(-) diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index c20f4f0553..9c472bad48 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -10,75 +10,76 @@ public static class CourseStatusFilterOptions private const string Group = "Status"; public static readonly FilterOptionModel IsInactive = new FilterOptionModel( - "Inactive/archived", + "Inactive/Archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), FilterStatus.Warning ); - //public static readonly FilterOptionModel IsActive = new FilterOptionModel( - // "Active", - // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "true"), - // FilterStatus.Success - //); - - public const char FilterSeparator = '╡'; - - public static FilterOptionModel IsActive - { - get - { - var activeFilterValue = FilteringHelper.BuildFilterValueString( - "Active", - nameof(CourseStatistics.Active), - "true" - ); - - var notArchivedFilterValue = FilteringHelper.BuildFilterValueString( - "Archived", - nameof(CourseStatistics.Archived), - "false" - ); - - var filterValue = activeFilterValue + FilterSeparator + notArchivedFilterValue; - - return new FilterOptionModel( - "Active", - filterValue, - FilterStatus.Success - ); - } - } - - //public static readonly FilterOptionModel IsArchived = new FilterOptionModel( - // "Archived", - // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), - // FilterStatus.Default - //); - - public static FilterOptionModel IsArchived - { - get - { - var filterValue = FilteringHelper.BuildFilterValueString( - "Archived", - nameof(CourseStatistics.Archived), - "true" - ); - - //TODO: Also need to OR with .Active=false - //var filterValue = FilteringHelper.BuildFilterValueString( - // "Archived", - // nameof(CourseStatistics.Archived), - // "true" - //); - - return new FilterOptionModel( - Group, - filterValue, - FilterStatus.Success - ); - } - } + public static readonly FilterOptionModel IsActive = new FilterOptionModel( + "Active", + FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "true"), + FilterStatus.Success + ); + + //public const char FilterSeparator = '╡'; + + //public static FilterOptionModel IsActive + //{ + // get + // { + // var activeFilterValue = FilteringHelper.BuildFilterValueString( + // "Active", + // nameof(CourseStatistics.Active), + // "true" + // ); + + // //var notArchivedFilterValue = FilteringHelper.BuildFilterValueString( + // // "Archived", + // // nameof(CourseStatistics.Archived), + // // "false" + // //); + + // //var filterValue = activeFilterValue + FilterSeparator + notArchivedFilterValue; + // var filterValue = activeFilterValue; + + // return new FilterOptionModel( + // "Active", + // filterValue, + // FilterStatus.Success + // ); + // } + //} + + public static readonly FilterOptionModel IsArchived = new FilterOptionModel( + "Inactive_Archived", + FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), + FilterStatus.Default + ); + + //public static FilterOptionModel IsArchived + //{ + // get + // { + // var filterValue = FilteringHelper.BuildFilterValueString( + // "Archived", + // nameof(CourseStatistics.Archived), + // "true" + // ); + + // //TODO: Also need to OR with .Active=false + // //var filterValue = FilteringHelper.BuildFilterValueString( + // // "Archived", + // // nameof(CourseStatistics.Archived), + // // "true" + // //); + + // return new FilterOptionModel( + // Group, + // filterValue, + // FilterStatus.Success + // ); + // } + //} } public static class CourseVisibilityFilterOptions diff --git a/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss b/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss index a3602b1f88..510c281606 100644 --- a/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss +++ b/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss @@ -70,3 +70,8 @@ border-left: 6px solid $color_nhsuk-grey-2; } + +.status-inactive_archived { + border-left: 6px solid $color_nhsuk-grey-2; +} + diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesViewModel.cs index 543420698d..a3f548ab81 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesViewModel.cs @@ -19,9 +19,36 @@ IEnumerable availableFilters "Search courses" ) { + UpdateCourseActiveFlags(result); + Courses = result.ItemsToDisplay.Select(c => new SearchableDelegateCourseStatisticsViewModel(c)); } + private static void UpdateCourseActiveFlags(SearchSortFilterPaginationResult result) + { + foreach (var course in result.ItemsToDisplay) + { + if (course.Active && !course.Archived) + { + course.Active = true; + } + else + { + course.Active = false; + } + + + if (course.Archived) + { + course.Archived = true; + } + else + { + course.Archived = false; + } + } + } + public IEnumerable Courses { get; set; } public override IEnumerable<(string, string)> SortOptions { get; } = new[] diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs index 1ef3d68cba..a134bc947b 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs @@ -53,20 +53,18 @@ public SearchableDelegateCourseStatisticsViewModel(CourseStatisticsWithAdminFiel FilteringHelper.Separator + HasAdminFields.ToString().ToLowerInvariant(); private static string DeriveCourseStatus(Course courseStatistics) { - string status; if (courseStatistics.Archived) { - status = "archived"; + return "inactive/archived"; } - else if (courseStatistics.Active) + else switch (courseStatistics.Active) { - status = "active"; + case true: + return "active"; + case false: + return "inactive"; + default: } - else - { - status = "inactive"; - } - return status; } } } From 457360a49d52656fc0bbdcb009f7600240446cf1 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Thu, 15 Dec 2022 11:35:21 +0000 Subject: [PATCH 09/11] Updated status tag rendering and active status meaning. --- .../DataServices/CourseDataService.cs | 2 +- .../FilterOptions/CourseFilterOptions.cs | 66 ++++--------------- .../Helpers/FilterableTagHelper.cs | 22 +++++++ .../SearchablePage/SearchableTagViewModel.cs | 10 +++ ...chableDelegateCourseStatisticsViewModel.cs | 7 +- .../Shared/SearchablePage/_StatusTags.cshtml | 10 +++ .../DelegateCourses/_CentreCourseCard.cshtml | 5 +- 7 files changed, 62 insertions(+), 60 deletions(-) create mode 100644 DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_StatusTags.cshtml diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index 2a277d90e8..40b4413071 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -175,7 +175,7 @@ FROM CustomisationTutorials AS ct private readonly string CourseStatisticsQuery = @$"SELECT cu.CustomisationID, cu.CentreID, - cu.Active, + CASE WHEN ap.ArchivedDate IS NOT NULL THEN 0 ELSE cu.Active END AS Active, cu.AllCentres, ap.ApplicationId, ap.ApplicationName, diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index 9c472bad48..b638d83d8b 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -9,6 +9,11 @@ public static class CourseStatusFilterOptions { private const string Group = "Status"; + //public static readonly FilterOptionModel IsInactive = new FilterOptionModel( + // "Inactive#Archived", + // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), + // FilterStatus.Warning + //); public static readonly FilterOptionModel IsInactive = new FilterOptionModel( "Inactive/Archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), @@ -21,65 +26,16 @@ public static class CourseStatusFilterOptions FilterStatus.Success ); - //public const char FilterSeparator = '╡'; - - //public static FilterOptionModel IsActive - //{ - // get - // { - // var activeFilterValue = FilteringHelper.BuildFilterValueString( - // "Active", - // nameof(CourseStatistics.Active), - // "true" - // ); - - // //var notArchivedFilterValue = FilteringHelper.BuildFilterValueString( - // // "Archived", - // // nameof(CourseStatistics.Archived), - // // "false" - // //); - - // //var filterValue = activeFilterValue + FilterSeparator + notArchivedFilterValue; - // var filterValue = activeFilterValue; - - // return new FilterOptionModel( - // "Active", - // filterValue, - // FilterStatus.Success - // ); - // } - //} - + //public static readonly FilterOptionModel IsArchived = new FilterOptionModel( + // "Inactive_Archived", + // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), + // FilterStatus.Default + //); public static readonly FilterOptionModel IsArchived = new FilterOptionModel( - "Inactive_Archived", + "Archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), FilterStatus.Default ); - - //public static FilterOptionModel IsArchived - //{ - // get - // { - // var filterValue = FilteringHelper.BuildFilterValueString( - // "Archived", - // nameof(CourseStatistics.Archived), - // "true" - // ); - - // //TODO: Also need to OR with .Active=false - // //var filterValue = FilteringHelper.BuildFilterValueString( - // // "Archived", - // // nameof(CourseStatistics.Archived), - // // "true" - // //); - - // return new FilterOptionModel( - // Group, - // filterValue, - // FilterStatus.Success - // ); - // } - //} } public static class CourseVisibilityFilterOptions diff --git a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs index 40ff8ca3e0..be1bf08fba 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs @@ -114,6 +114,28 @@ CourseStatistics courseStatistics return tags; } + public static IEnumerable GetCurrentStatusTagsForDelegateCourses( + CourseStatistics courseStatistics + ) + { + var tags = new List(); + + if (courseStatistics.Archived) + { + tags.Add(new SearchableTagViewModel("Archived", string.Empty, CourseStatusFilterOptions.IsArchived.TagStatus)); + } + else if (courseStatistics.Active) + { + tags.Add(new SearchableTagViewModel("Active", string.Empty, CourseStatusFilterOptions.IsActive.TagStatus)); + } + else + { + tags.Add(new SearchableTagViewModel("Inactive", string.Empty, CourseStatusFilterOptions.IsInactive.TagStatus)); + } + + return tags; + } + public static IEnumerable GetCurrentTagsForCourseDelegate(CourseDelegate courseDelegate) { var tags = new List(); diff --git a/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs index 2c220c74a0..ec085182d4 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs @@ -14,6 +14,16 @@ public SearchableTagViewModel(FilterOptionModel filterOption, bool hidden = fals { Hidden = hidden; } + + public SearchableTagViewModel(string displayText, string filterValue, FilterStatus tagStatus, bool hidden = false) + : base( + displayText, + filterValue, + tagStatus + ) + { + Hidden = hidden; + } public bool Hidden { get; set; } diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs index a134bc947b..2d2bef7e28 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs @@ -19,7 +19,10 @@ public SearchableDelegateCourseStatisticsViewModel(CourseStatisticsWithAdminFiel CategoryName = courseStatistics.CategoryName; CourseTopic = courseStatistics.CourseTopic; LearningMinutes = courseStatistics.LearningMinutes; - Tags = FilterableTagHelper.GetCurrentTagsForDelegateCourses(courseStatistics); + + //Tags = FilterableTagHelper.GetCurrentTagsForDelegateCourses(courseStatistics); + Tags = FilterableTagHelper.GetCurrentStatusTagsForDelegateCourses(courseStatistics); + Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; Status = DeriveCourseStatus(courseStatistics); @@ -55,7 +58,7 @@ private static string DeriveCourseStatus(Course courseStatistics) { if (courseStatistics.Archived) { - return "inactive/archived"; + return "archived"; } else switch (courseStatistics.Active) { diff --git a/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_StatusTags.cshtml b/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_StatusTags.cshtml new file mode 100644 index 0000000000..fdc27a2438 --- /dev/null +++ b/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_StatusTags.cshtml @@ -0,0 +1,10 @@ +@using DigitalLearningSolutions.Web.ViewModels.Common.SearchablePage +@model IEnumerable + +
+ @foreach (var tag in Model) { +
+ @tag.DisplayText +
+ } +
diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml index 6d81c3e097..9ba94ab689 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml @@ -11,8 +11,9 @@
- - + @**@ + + From c9ea78021478ee6676c07dbbeea4ce7c67d8c7b4 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Thu, 15 Dec 2022 11:48:57 +0000 Subject: [PATCH 10/11] Updated unit tests. --- .../CourseSetup/CourseStatisticsViewModelFilterOptionsTests.cs | 2 +- .../DelegateCoursesStatisticsViewModelFilterOptionsTests.cs | 2 +- .../Helpers/FilterOptions/CourseFilterOptions.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/CourseSetup/CourseStatisticsViewModelFilterOptionsTests.cs b/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/CourseSetup/CourseStatisticsViewModelFilterOptionsTests.cs index d4564b834a..77d3b497e0 100644 --- a/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/CourseSetup/CourseStatisticsViewModelFilterOptionsTests.cs +++ b/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/CourseSetup/CourseStatisticsViewModelFilterOptionsTests.cs @@ -38,7 +38,7 @@ public class CourseStatisticsViewModelFilterOptionsTests new[] { new FilterOptionModel( - "Inactive", + "Inactive/archived", "Status" + FilteringHelper.Separator + "Active" + FilteringHelper.Separator + "false", FilterStatus.Warning diff --git a/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesStatisticsViewModelFilterOptionsTests.cs b/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesStatisticsViewModelFilterOptionsTests.cs index c81c652e75..9a3a330b6b 100644 --- a/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesStatisticsViewModelFilterOptionsTests.cs +++ b/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Delegates/DelegateCourses/DelegateCoursesStatisticsViewModelFilterOptionsTests.cs @@ -38,7 +38,7 @@ public class DelegateCoursesStatisticsViewModelFilterOptionsTests new[] { new FilterOptionModel( - "Inactive", + "Inactive/archived", "Status" + FilteringHelper.Separator + "Active" + FilteringHelper.Separator + "false", FilterStatus.Warning diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index b638d83d8b..edd7e4fabe 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -15,7 +15,7 @@ public static class CourseStatusFilterOptions // FilterStatus.Warning //); public static readonly FilterOptionModel IsInactive = new FilterOptionModel( - "Inactive/Archived", + "Inactive/archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), FilterStatus.Warning ); From 0d78b5e5a2f9a607b64bee352ba3ff1eb90489c7 Mon Sep 17 00:00:00 2001 From: martinfoster-hee Date: Thu, 15 Dec 2022 11:59:20 +0000 Subject: [PATCH 11/11] Tidy up. --- .../Helpers/FilterOptions/CourseFilterOptions.cs | 10 ---------- .../Styles/trackingSystem/viewDelegate.scss | 6 ------ .../Common/SearchablePage/SearchableTagViewModel.cs | 2 +- .../SearchableDelegateCourseStatisticsViewModel.cs | 4 ---- .../Views/Shared/SearchablePage/_FilterableTags.cshtml | 3 ++- .../Delegates/DelegateCourses/_CentreCourseCard.cshtml | 6 +++--- 6 files changed, 6 insertions(+), 25 deletions(-) diff --git a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs index edd7e4fabe..5161abf43a 100644 --- a/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs +++ b/DigitalLearningSolutions.Web/Helpers/FilterOptions/CourseFilterOptions.cs @@ -9,11 +9,6 @@ public static class CourseStatusFilterOptions { private const string Group = "Status"; - //public static readonly FilterOptionModel IsInactive = new FilterOptionModel( - // "Inactive#Archived", - // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), - // FilterStatus.Warning - //); public static readonly FilterOptionModel IsInactive = new FilterOptionModel( "Inactive/archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Active), "false"), @@ -26,11 +21,6 @@ public static class CourseStatusFilterOptions FilterStatus.Success ); - //public static readonly FilterOptionModel IsArchived = new FilterOptionModel( - // "Inactive_Archived", - // FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), - // FilterStatus.Default - //); public static readonly FilterOptionModel IsArchived = new FilterOptionModel( "Archived", FilteringHelper.BuildFilterValueString(Group, nameof(CourseStatistics.Archived), "true"), diff --git a/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss b/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss index 510c281606..f66b4c3cdb 100644 --- a/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss +++ b/DigitalLearningSolutions.Web/Styles/trackingSystem/viewDelegate.scss @@ -69,9 +69,3 @@ .status-archived { border-left: 6px solid $color_nhsuk-grey-2; } - - -.status-inactive_archived { - border-left: 6px solid $color_nhsuk-grey-2; -} - diff --git a/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs index ec085182d4..911b5e2afa 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Common/SearchablePage/SearchableTagViewModel.cs @@ -14,7 +14,7 @@ public SearchableTagViewModel(FilterOptionModel filterOption, bool hidden = fals { Hidden = hidden; } - + public SearchableTagViewModel(string displayText, string filterValue, FilterStatus tagStatus, bool hidden = false) : base( displayText, diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs index 2d2bef7e28..44126ea121 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/DelegateCourses/SearchableDelegateCourseStatisticsViewModel.cs @@ -19,10 +19,7 @@ public SearchableDelegateCourseStatisticsViewModel(CourseStatisticsWithAdminFiel CategoryName = courseStatistics.CategoryName; CourseTopic = courseStatistics.CourseTopic; LearningMinutes = courseStatistics.LearningMinutes; - - //Tags = FilterableTagHelper.GetCurrentTagsForDelegateCourses(courseStatistics); Tags = FilterableTagHelper.GetCurrentStatusTagsForDelegateCourses(courseStatistics); - Assessed = courseStatistics.IsAssessed; AdminFieldWithResponseCounts = courseStatistics.AdminFieldsWithResponses; Status = DeriveCourseStatus(courseStatistics); @@ -66,7 +63,6 @@ private static string DeriveCourseStatus(Course courseStatistics) return "active"; case false: return "inactive"; - default: } } } diff --git a/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_FilterableTags.cshtml b/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_FilterableTags.cshtml index 7aaed03192..514a1e076e 100644 --- a/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_FilterableTags.cshtml +++ b/DigitalLearningSolutions.Web/Views/Shared/SearchablePage/_FilterableTags.cshtml @@ -2,7 +2,8 @@ @model IEnumerable
- @foreach (var tag in Model) { + @foreach (var tag in Model) + {
@tag.DisplayText
diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml index 9ba94ab689..d3f21674b3 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/Delegates/DelegateCourses/_CentreCourseCard.cshtml @@ -11,13 +11,13 @@
- @**@ - + - @if (Model.HasAdminFields) { + @if (Model.HasAdminFields) + { }