diff --git a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs index 1c243262c2..7b280dddf4 100644 --- a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs @@ -18,8 +18,8 @@ public interface ISupervisorDataService SupervisorDelegateDetail GetSupervisorDelegateDetailsById(int supervisorDelegateId, int adminId, int delegateUserId); SupervisorDelegate GetSupervisorDelegate(int adminId, int delegateUserId); int? ValidateDelegate(int centreId, string delegateEmail); - IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId); - DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId); + IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId, int? adminIdCategoryId); + DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId); @@ -449,7 +449,7 @@ public bool RemoveSupervisorDelegateById(int supervisorDelegateId, int delegateU return true; } - public IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId) + public IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId, int? adminIdCategoryId) { return connection.Query( @$"SELECT {delegateSelfAssessmentFields}, COALESCE(ca.LastAccessed, ca.StartedDate) AS LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.RoleProfile, sg.SubGroup, pg.ProfessionalGroup,CONVERT(BIT, IIF(cas.CandidateAssessmentID IS NULL, 0, 1)) AS IsAssignedToSupervisor,ca.DelegateUserID, @@ -470,7 +470,7 @@ FROM CandidateAssessments AS ca LEFT JOIN RIGHT OUTER JOIN SupervisorDelegates AS sd ON sd.ID=@supervisorDelegateId RIGHT OUTER JOIN AdminAccounts AS au ON au.ID = sd.SupervisorAdminID WHERE (ca.RemovedDate IS NULL) AND (ca.DelegateUserID=sd.DelegateUserID) AND (cas.SupervisorDelegateId = @supervisorDelegateId OR (cas.CandidateAssessmentID IS NULL) AND ((sa.SupervisorSelfAssessmentReview = 1) OR - (sa.SupervisorResultsReview = 1)))", new { supervisorDelegateId } + (sa.SupervisorResultsReview = 1))) AND (ISNULL(@adminIdCategoryId, 0) = 0 OR sa.CategoryID = @adminIdCategoryId)", new { supervisorDelegateId, adminIdCategoryId } ); } public DelegateSelfAssessment? GetSelfAssessmentBySupervisorDelegateSelfAssessmentId(int selfAssessmentId, int supervisorDelegateId) @@ -562,7 +562,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, @@ -582,8 +582,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/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index 2946fa9b41..e806546078 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -321,7 +321,8 @@ public IActionResult DelegateProfileAssessments(int supervisorDelegateId, int de var superviseDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, adminId, delegateUserId); var loggedInUserId = User.GetAdminId(); var loggedInAdminUser = userService.GetAdminUserById(loggedInUserId!.GetValueOrDefault()); - var delegateSelfAssessments = supervisorService.GetSelfAssessmentsForSupervisorDelegateId(supervisorDelegateId, adminId); + var loggedInAdmin = userService.GetAdminById(adminId); + var delegateSelfAssessments = supervisorService.GetSelfAssessmentsForSupervisorDelegateId(supervisorDelegateId, adminId, loggedInAdmin.CategoryId); var model = new DelegateSelfAssessmentsViewModel() { IsNominatedSupervisor = loggedInAdminUser?.IsSupervisor == true ? false : loggedInAdminUser?.IsNominatedSupervisor ?? false, @@ -354,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); diff --git a/DigitalLearningSolutions.Web/Services/SupervisorService.cs b/DigitalLearningSolutions.Web/Services/SupervisorService.cs index 1f1c6a35b1..859c397dab 100644 --- a/DigitalLearningSolutions.Web/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Web/Services/SupervisorService.cs @@ -15,8 +15,8 @@ public interface ISupervisorService SupervisorDelegateDetail GetSupervisorDelegateDetailsById(int supervisorDelegateId, int adminId, int delegateUserId); SupervisorDelegate GetSupervisorDelegate(int adminId, int delegateUserId); int? ValidateDelegate(int centreId, string delegateEmail); - IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId); - DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId); + IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId, int? adminIdCategoryId); + 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) @@ -137,9 +137,9 @@ public IEnumerable GetDelegateNominatableSuperviso return supervisorDataService.GetSelfAssessmentResultSummary(candidateAssessmentId, supervisorDelegateId); } - public IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId) + public IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int adminId, int? adminIdCategoryId) { - return supervisorDataService.GetSelfAssessmentsForSupervisorDelegateId(supervisorDelegateId, adminId); + return supervisorDataService.GetSelfAssessmentsForSupervisorDelegateId(supervisorDelegateId, adminId, adminIdCategoryId); } public IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId)