diff --git a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs index e06de8deb1..5c52d18b1e 100644 --- a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs @@ -22,7 +22,7 @@ public interface ISupervisorDataService DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); - DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId); + DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId); IEnumerable GetAvailableRoleProfilesForDelegate(int candidateId, int centreId, int? categoryId); RoleProfile? GetRoleProfileById(int selfAssessmentId); IEnumerable GetSupervisorRolesForSelfAssessment(int selfAssessmentId); @@ -594,7 +594,7 @@ FROM CandidateAssessmentSupervisors AS cas INNER JOIN WHERE (ca.RemovedDate IS NULL) AND (cas.SupervisorDelegateId = @supervisorDelegateId) AND (cas.Removed IS NULL) AND (sa.ID = @selfAssessmentId)", new { selfAssessmentId, supervisorDelegateId } ).FirstOrDefault(); } - public DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId) + public DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId) { return connection.Query( @$"SELECT ca.ID, sa.ID AS SelfAssessmentID, sa.Name AS RoleName, sa.QuestionLabel, sa.DescriptionLabel, sa.ReviewerCommentsLabel, @@ -611,7 +611,7 @@ FROM SelfAssessmentResultSupervisorVerifications AS sarsv FROM CandidateAssessmentSupervisors AS cas INNER JOIN CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN SelfAssessments AS sa ON sa.ID = ca.SelfAssessmentID - WHERE (ca.ID = @candidateAssessmentId)", new { candidateAssessmentId } + WHERE (ca.ID = @candidateAssessmentId) AND (ISNULL(@adminIdCategoryID, 0) = 0 OR sa.CategoryID = @adminIdCategoryId)", new { candidateAssessmentId, adminIdCategoryId } ).FirstOrDefault(); } public DelegateSelfAssessment? GetSelfAssessmentBySupervisorDelegateCandidateAssessmentId(int candidateAssessmentId, int supervisorDelegateId) diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index 11d8ab1e7d..32bc6889f6 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -515,7 +515,7 @@ int resultId ) { var model = ReviewCompetencySelfAsessmentData(supervisorDelegateId, candidateAssessmentId, resultId); - + if (model == null) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); return View("ReviewCompetencySelfAsessment", model); } @@ -587,8 +587,10 @@ int resultId candidateAssessmentId, adminId ); + var loggedInAdminUser = userService.GetAdminUserById(adminId); var delegateSelfAssessment = - supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId); + supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId, loggedInAdminUser.CategoryId); + if (delegateSelfAssessment == null) return null; var assessmentQuestion = GetLevelDescriptorsForAssessmentQuestion(competency.AssessmentQuestions.First()); competency.CompetencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyId(competency.Id); var model = new ReviewCompetencySelfAsessmentViewModel() @@ -610,10 +612,12 @@ int resultId public IActionResult VerifyMultipleResults(int supervisorDelegateId, int candidateAssessmentId) { var adminId = GetAdminId(); + var loggedInAdminUser = userService.GetAdminUserById(adminId); var superviseDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); var delegateSelfAssessment = - supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId); + supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId, loggedInAdminUser.CategoryId); + if (delegateSelfAssessment == null) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); var reviewedCompetencies = PopulateCompetencyLevelDescriptors( selfAssessmentService.GetCandidateAssessmentResultsForReviewById(candidateAssessmentId, adminId) .ToList() @@ -638,10 +642,11 @@ List resultChecked if (resultChecked.Count == 0) { var adminId = GetAdminId(); + var loggedInAdminUser = userService.GetAdminUserById(adminId); var superviseDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); var delegateSelfAssessment = - supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId); + supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId, loggedInAdminUser.CategoryId); var reviewedCompetencies = PopulateCompetencyLevelDescriptors( selfAssessmentService.GetCandidateAssessmentResultsForReviewById(candidateAssessmentId, adminId) .ToList() @@ -1260,10 +1265,12 @@ SignOffProfileAssessmentViewModel model public IActionResult SignOffHistory(int supervisorDelegateId, int candidateAssessmentId) { var adminId = GetAdminId(); + var loggedInAdminUser = userService.GetAdminUserById(adminId); var superviseDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); var delegateSelfAssessment = - supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId); + supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId, loggedInAdminUser.CategoryId); + if (delegateSelfAssessment == null) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); var model = new SignOffHistoryViewModel() { DelegateSelfAssessment = delegateSelfAssessment, diff --git a/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs b/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs index b1d63c3130..092f38c15d 100644 --- a/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs +++ b/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs @@ -351,7 +351,7 @@ public void SendResultVerificationRequest(int candidateAssessmentSupervisorId, i int candidateAssessmentId = candidateAssessmentSupervisor.CandidateAssessmentID; var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, 0, delegateUserId); string centreName = GetCentreName(centreId); - var delegateSelfAssessment = supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentSupervisor.CandidateAssessmentID); + var delegateSelfAssessment = supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentSupervisor.CandidateAssessmentID, 0); string emailSubjectLine = $"{delegateSelfAssessment.SupervisorRoleTitle} Self Assessment Results Review Request - Digital Learning Solutions"; string? profileReviewUrl = GetSupervisorProfileReviewUrl(supervisorDelegateId, candidateAssessmentId, selfAssessmentResultId); BodyBuilder? builder = new BodyBuilder(); @@ -369,7 +369,7 @@ public void SendSignOffRequest(int candidateAssessmentSupervisorId, int selfAsse int candidateAssessmentId = candidateAssessmentSupervisor.CandidateAssessmentID; var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, 0, delegateUserId); string centreName = GetCentreName(centreId); - var delegateSelfAssessment = supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentSupervisor.CandidateAssessmentID); + var delegateSelfAssessment = supervisorService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentSupervisor.CandidateAssessmentID, 0); string emailSubjectLine = $"{delegateSelfAssessment.SupervisorRoleTitle} Self Assessment Sign-off Request - Digital Learning Solutions"; string? profileReviewUrl = GetSupervisorProfileReviewUrl(supervisorDelegateId, candidateAssessmentId); BodyBuilder? builder = new BodyBuilder(); diff --git a/DigitalLearningSolutions.Web/Services/SupervisorService.cs b/DigitalLearningSolutions.Web/Services/SupervisorService.cs index a8afcff576..8cd8d2e16e 100644 --- a/DigitalLearningSolutions.Web/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Web/Services/SupervisorService.cs @@ -19,7 +19,7 @@ public interface ISupervisorService DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); - DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId); + DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId); IEnumerable GetAvailableRoleProfilesForDelegate(int candidateId, int centreId, int? categoryId); RoleProfile? GetRoleProfileById(int selfAssessmentId); IEnumerable GetSupervisorRolesForSelfAssessment(int selfAssessmentId); @@ -115,9 +115,9 @@ public IEnumerable GetDelegateNominatableSuperviso return supervisorDataService.GetRoleProfileById(selfAssessmentId); } - public DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId) + public DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId) { - return supervisorDataService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId); + return supervisorDataService.GetSelfAssessmentBaseByCandidateAssessmentId(candidateAssessmentId, adminIdCategoryId); } public DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId) @@ -275,7 +275,7 @@ public IEnumerable GetSupervisorDelegateDetailsForAdmi } public SupervisorDelegateDetail GetSupervisorDelegateDetailsByIdWithoutRemoveClause(int supervisorDelegateId, int adminId, int delegateUserId) { - return supervisorDataService.GetSupervisorDelegateDetailsByIdWithoutRemoveClause(supervisorDelegateId,adminId, delegateUserId); + return supervisorDataService.GetSupervisorDelegateDetailsByIdWithoutRemoveClause(supervisorDelegateId, adminId, delegateUserId); } } }