diff --git a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs index 6117fd8b65..d9256a472a 100644 --- a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs @@ -19,7 +19,7 @@ public interface ISupervisorDataService SupervisorDelegate GetSupervisorDelegate(int adminId, int delegateUserId); int? ValidateDelegate(int centreId, string delegateEmail); IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int? adminIdCategoryId); - DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId); + DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId); @@ -570,7 +570,7 @@ FROM SelfAssessmentResults AS sar2 ); } - public DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId) + public DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId) { return connection.Query( @$"SELECT ca.ID, sa.ID AS SelfAssessmentID, sa.Name AS RoleName, sa.SupervisorSelfAssessmentReview, sa.SupervisorResultsReview, sa.ReviewerCommentsLabel, COALESCE (sasr.RoleName, 'Supervisor') AS SupervisorRoleTitle, ca.StartedDate, ca.LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.RoleProfile, sg.SubGroup, pg.ProfessionalGroup, sa.SupervisorResultsReview AS IsSupervisorResultsReviewed, @@ -590,8 +590,8 @@ FROM CandidateAssessmentSupervisors AS cas INNER JOIN NRPSubGroups AS sg ON sa.NRPSubGroupID = sg.ID LEFT OUTER JOIN NRPRoles AS r ON sa.NRPRoleID = r.ID LEFT OUTER JOIN SelfAssessmentSupervisorRoles AS sasr ON cas.SelfAssessmentSupervisorRoleID = sasr.ID - WHERE (ca.ID = @candidateAssessmentId) AND (cas.Removed IS NULL) AND (sd.SupervisorAdminID = @adminId)", - new { candidateAssessmentId, adminId } + WHERE (ca.ID = @candidateAssessmentId) AND (cas.Removed IS NULL) AND (sd.SupervisorAdminID = @adminId) AND (sa.CategoryID = @adminIdCategoryId)", + new { candidateAssessmentId, adminId, adminIdCategoryId } ).FirstOrDefault(); } public bool UpdateSelfAssessmentResultSupervisorVerifications(int selfAssessmentResultSupervisorVerificationId, string? comments, bool signedOff, int adminId) diff --git a/DigitalLearningSolutions.Web.Tests/Controllers/SupervisorController/SupervisorControllerTests.cs b/DigitalLearningSolutions.Web.Tests/Controllers/SupervisorController/SupervisorControllerTests.cs index c36ea57224..e34f4047d1 100644 --- a/DigitalLearningSolutions.Web.Tests/Controllers/SupervisorController/SupervisorControllerTests.cs +++ b/DigitalLearningSolutions.Web.Tests/Controllers/SupervisorController/SupervisorControllerTests.cs @@ -107,7 +107,8 @@ public void Setup() emailService, candidateAssessmentDownloadFileService, clockUtility, - pdfService + pdfService, + courseCategoriesService ); controller.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { User = user } }; @@ -161,6 +162,7 @@ public void ReviewDelegateSelfAssessment_Should_Return_View_With_Optional_Compet // Given int candidateAssessmentId = 1; int supervisorDelegateId = 2; + int? adminIdCategoryId = 0; var superviseDelegate = SupervisorTagTestHelper.CreateDefaultSupervisorDelegateDetail(); var delegateSelfAssessment = SupervisorTagTestHelper.CreateDefaultDelegateSelfAssessment(); var appliedFilterViewModel = new List(); @@ -190,7 +192,7 @@ public void ReviewDelegateSelfAssessment_Should_Return_View_With_Optional_Compet A.CallTo(() => supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, AdminId, 0)) .Returns(superviseDelegate); - A.CallTo(() => supervisorService.GetSelfAssessmentByCandidateAssessmentId(candidateAssessmentId, AdminId)) + A.CallTo(() => supervisorService.GetSelfAssessmentByCandidateAssessmentId(candidateAssessmentId, AdminId, adminIdCategoryId)) .Returns(delegateSelfAssessment); A.CallTo(() => selfAssessmentService.GetMostRecentResults(SelfAssessmentId, DelegateUserId)) .Returns(competencies); diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index e571580587..c410800a19 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -355,12 +355,14 @@ public IActionResult AllStaffList() public IActionResult ReviewDelegateSelfAssessment(int supervisorDelegateId, int candidateAssessmentId, int? selfAssessmentResultId = null, SearchSupervisorCompetencyViewModel searchModel = null) { var adminId = GetAdminId(); + var loggedInAdminUser = userService.GetAdminUserById(adminId); var superviseDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); var reviewedCompetencies = PopulateCompetencyLevelDescriptors( selfAssessmentService.GetCandidateAssessmentResultsById(candidateAssessmentId, adminId, selfAssessmentResultId).ToList() ); - var delegateSelfAssessment = supervisorService.GetSelfAssessmentByCandidateAssessmentId(candidateAssessmentId, adminId); + var delegateSelfAssessment = supervisorService.GetSelfAssessmentByCandidateAssessmentId(candidateAssessmentId, adminId, loggedInAdminUser.CategoryId); + if (delegateSelfAssessment == null) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); var competencyIds = reviewedCompetencies.Select(c => c.Id).ToArray(); var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds); var competencies = SupervisorCompetencyFilterHelper.FilterCompetencies(reviewedCompetencies, competencyFlags, searchModel); @@ -375,7 +377,7 @@ public IActionResult ReviewDelegateSelfAssessment(int supervisorDelegateId, int IsSupervisorResultsReviewed = delegateSelfAssessment.IsSupervisorResultsReviewed, SearchViewModel = searchModel, CandidateAssessmentId = candidateAssessmentId, - ExportToExcelHide = delegateSelfAssessment.SupervisorRoleTitle.Contains("Assessor"), + ExportToExcelHide = delegateSelfAssessment.SupervisorRoleTitle?.Contains("Assessor") ?? false, }; var flags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(reviewedCompetencies.Select(c => c.Id).ToArray()); diff --git a/DigitalLearningSolutions.Web/Services/SupervisorService.cs b/DigitalLearningSolutions.Web/Services/SupervisorService.cs index 5848c758db..d6e4844155 100644 --- a/DigitalLearningSolutions.Web/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Web/Services/SupervisorService.cs @@ -16,7 +16,7 @@ public interface ISupervisorService SupervisorDelegate GetSupervisorDelegate(int adminId, int delegateUserId); int? ValidateDelegate(int centreId, string delegateEmail); IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int? adminIdCategoryId); - DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId); + DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId); @@ -117,9 +117,9 @@ public IEnumerable GetDelegateNominatableSuperviso return supervisorDataService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId); } - public DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId) + public DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId) { - return supervisorDataService.GetSelfAssessmentByCandidateAssessmentId(candidateAssessmentId, adminId); + return supervisorDataService.GetSelfAssessmentByCandidateAssessmentId(candidateAssessmentId, adminId, adminIdCategoryId); } public DelegateSelfAssessment? GetSelfAssessmentBySupervisorDelegateCandidateAssessmentId(int candidateAssessmentId, int supervisorDelegateId)