From 68a7cb8c2c12039f2c929d25882e0e696b2fa751 Mon Sep 17 00:00:00 2001 From: Zach Hodges <126244772+zhodges-nimble@users.noreply.github.com> Date: Thu, 7 Nov 2024 10:31:57 +0000 Subject: [PATCH] Bugs/185446 Fix project status filter (#950) * Filters section now stays open when filtering on proj status * Changed WithdrawnDuringOpening mapping value to "Withdrawn in pre-opening" to match UI * updated checks to be consistent --- .../Project/ProjectMapperTests.cs | 2 +- .../UseCases/Dashboard/GetDashboardService.cs | 41 ++++--------------- .../UseCases/Project/ProjectMapper.cs | 2 +- .../UpdateProjectStatusService.cs | 1 - .../Pages/Dashboard/DashboardBasePageModel.cs | 4 -- .../Pages/Dashboard/_Dashboard.cshtml | 3 +- 6 files changed, 13 insertions(+), 40 deletions(-) diff --git a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API.Tests/Project/ProjectMapperTests.cs b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API.Tests/Project/ProjectMapperTests.cs index f0edf66c6..4e221ded1 100644 --- a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API.Tests/Project/ProjectMapperTests.cs +++ b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API.Tests/Project/ProjectMapperTests.cs @@ -72,7 +72,7 @@ public void ToProjectStatusType_ReturnsExpectedEnum(string input, ProjectStatus //[InlineData("AnyNotRecognised", ProjectStatus.Preopening)] [InlineData(ProjectStatus.Cancelled, "Cancelled during pre-opening")] [InlineData(ProjectStatus.Closed, "Closed")] - [InlineData(ProjectStatus.WithdrawnDuringPreOpening, "Withdrawn during pre-opening")] + [InlineData(ProjectStatus.WithdrawnDuringPreOpening, "Withdrawn in pre-opening")] [InlineData(ProjectStatus.ApplicationCompetitionStage, "Application Competition stage")] [InlineData(ProjectStatus.ApplicationStage, "Application stage")] [InlineData(ProjectStatus.OpenNotIncludedInFigures, "Open free school - Not included in figures")] diff --git a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Dashboard/GetDashboardService.cs b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Dashboard/GetDashboardService.cs index 7e384239d..6f66ba0e5 100644 --- a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Dashboard/GetDashboardService.cs +++ b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Dashboard/GetDashboardService.cs @@ -24,22 +24,13 @@ public record GetDashboardParameters public string Wave { get; set; } public int Page { get; set; } public int Count { get; set; } - } - public class GetDashboardService : IGetDashboardService + public class GetDashboardService(MfspContext context) : IGetDashboardService { - private readonly MfspContext _context; - - public GetDashboardService(MfspContext context) - { - _context = context; - } - - public async Task<(List, int)> Execute(GetDashboardParameters parameters) { - var query = _context.Kpi.AsQueryable(); + var query = context.Kpi.AsQueryable(); query = ApplyFilters(query, parameters); @@ -71,14 +62,10 @@ public GetDashboardService(MfspContext context) private static IQueryable ApplyFilters(IQueryable query, GetDashboardParameters parameters) { if (!string.IsNullOrEmpty(parameters.UserId)) - { query = query.Where(kpi => kpi.User.Email == parameters.UserId); - } - if (parameters.Regions.Any()) - { + if (parameters.Regions.Count != 0) query = query.Where(kpi => parameters.Regions.Any(region => kpi.SchoolDetailsGeographicalRegion == region)); - } if (!string.IsNullOrEmpty(parameters.Project)) { @@ -87,38 +74,28 @@ private static IQueryable ApplyFilters(IQueryable query, GetDashboardP || kpi.ProjectStatusProjectId == parameters.Project); } - if (parameters.LocalAuthority.Any()) - { + if (parameters.LocalAuthority.Count != 0) query = query.Where(kpi => parameters.LocalAuthority.Any(localAuthority => kpi.LocalAuthority == localAuthority)); - } - if (parameters.ProjectManagedBy.Count > 0) - { + if (parameters.ProjectManagedBy.Count != 0) query = query.Where(kpi => parameters.ProjectManagedBy.Any(projectManagedBy => kpi.KeyContactsFsgLeadContact == projectManagedBy)); - } - - if (parameters.ProjectStatus.Count > 0) - { + + if (parameters.ProjectStatus.Count != 0) query = query.Where(kpi => parameters.ProjectStatus.Any(projectStatus => kpi.ProjectStatusProjectStatus == projectStatus)); - } if (!string.IsNullOrEmpty(parameters.Wave)) - { query = query.Where(kpi => kpi.ProjectStatusFreeSchoolApplicationWave == parameters.Wave); - } return query; } - public async Task> ExecuteProjectIds(GetDashboardParameters parameters) { - var query = _context.Kpi.AsQueryable(); + var query = context.Kpi.AsQueryable(); query = ApplyFilters(query, parameters); - await - query + await query .OrderByDescending(kpi => kpi.ProjectStatusProvisionalOpeningDateAgreedWithTrust) .ThenBy(kpi => kpi.ProjectStatusCurrentFreeSchoolName) .ToListAsync(); diff --git a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectMapper.cs b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectMapper.cs index ea37c475f..bf07e2820 100644 --- a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectMapper.cs +++ b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectMapper.cs @@ -111,7 +111,7 @@ public static string FromProjectStatusType(ProjectStatusType projectStatus) ProjectStatusType.Open => "Open", ProjectStatusType.Closed => "Closed", ProjectStatusType.Cancelled => "Cancelled during pre-opening", - ProjectStatusType.WithdrawnDuringPreOpening => "Withdrawn during pre-opening", + ProjectStatusType.WithdrawnDuringPreOpening => "Withdrawn in pre-opening", ProjectStatusType.Rejected => "Rejected at application stage", ProjectStatusType.ApplicationCompetitionStage => "Application Competition stage", ProjectStatusType.ApplicationStage => "Application stage", diff --git a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectStatus/UpdateProjectStatusService.cs b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectStatus/UpdateProjectStatusService.cs index 4ef8b9e54..158efaf9f 100644 --- a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectStatus/UpdateProjectStatusService.cs +++ b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects.API/UseCases/Project/ProjectStatus/UpdateProjectStatusService.cs @@ -42,7 +42,6 @@ public async Task Execute(string projectId, UpdateProjectStatusRequest request) dbProject.ProjectStatusDateCancelled = updateRequest.CancelledDate; dbProject.ProjectStatusDateWithdrawn = updateRequest.WithdrawnDate; - await _context.SaveChangesAsync(); } diff --git a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/DashboardBasePageModel.cs b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/DashboardBasePageModel.cs index 923409046..65aff5360 100644 --- a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/DashboardBasePageModel.cs +++ b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/DashboardBasePageModel.cs @@ -39,10 +39,6 @@ public class DashboardBasePageModel( [BindProperty(Name = "search-by-project-status", SupportsGet = true)] public List ProjectStatusSearchTerm { get; set; } = new(); - [BindProperty] public bool UserCanCreateProject { get; set; } - - [BindProperty] public List ProjectManagers { get; set; } - public DashboardModel Dashboard { get; set; } = new(); protected readonly ICreateUserService CreateUserService = createUserService; diff --git a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/_Dashboard.cshtml b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/_Dashboard.cshtml index 6d4012a57..50f270285 100644 --- a/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/_Dashboard.cshtml +++ b/Dfe.ManageFreeSchoolProjects/Dfe.ManageFreeSchoolProjects/Pages/Dashboard/_Dashboard.cshtml @@ -19,7 +19,8 @@ !string.IsNullOrWhiteSpace(Model.ProjectSearchTerm) || Model.RegionSearchTerm.Any() || Model.LocalAuthoritySearchTerm.Any() - || Model.ProjectManagedBySearchTerm.Any(); + || Model.ProjectManagedBySearchTerm.Any() + || Model.ProjectStatusSearchTerm.Any(); var openFilter = isFilterActive ? "open" : "";