diff --git a/DigitalLearningSolutions.Data.Migrations/202412020900_UpdateCandidateAssessmentSupervisorsTable.cs b/DigitalLearningSolutions.Data.Migrations/202412020900_UpdateCandidateAssessmentSupervisorsTable.cs new file mode 100644 index 0000000000..0304c7aade --- /dev/null +++ b/DigitalLearningSolutions.Data.Migrations/202412020900_UpdateCandidateAssessmentSupervisorsTable.cs @@ -0,0 +1,36 @@ +namespace DigitalLearningSolutions.Data.Migrations +{ + using FluentMigrator; + + [Migration(202412020900)] + public class UpdateCandidateAssessmentSupervisorsTable : ForwardOnlyMigration + { + public override void Up() + { + Execute.Sql($@"UPDATE cas + SET SelfAssessmentSupervisorRoleID = (SELECT ID FROM SelfAssessmentSupervisorRoles + WHERE SelfAssessmentID = ssr.SelfAssessmentID and AllowDelegateNomination = 1) + FROM CandidateAssessmentSupervisors cas INNER JOIN + SelfAssessmentSupervisorRoles ssr ON cas.SelfAssessmentSupervisorRoleID = ssr.ID + AND cas.Removed IS NULL AND ssr.AllowDelegateNomination = 0 INNER JOIN + SupervisorDelegates sd ON cas.SupervisorDelegateId = sd.ID INNER JOIN + AdminAccounts aa ON sd.SupervisorAdminID = aa.ID + WHERE aa.IsSupervisor = 0 AND aa.IsNominatedSupervisor = 1 + -- to exclude duplicate CandidateAssessmentID from update + AND cas.CandidateAssessmentID NOT IN ( + SELECT CandidateAssessmentID FROM CandidateAssessmentSupervisors WHERE CandidateAssessmentID in ( + SELECT Cas2.CandidateAssessmentID + FROM CandidateAssessmentSupervisors cas2 with (nolock) INNER JOIN + SelfAssessmentSupervisorRoles ssr2 with (nolock) ON cas2.SelfAssessmentSupervisorRoleID = ssr2.ID + AND cas2.Removed IS NULL AND ssr2.AllowDelegateNomination = 0 INNER JOIN + SupervisorDelegates sd2 with (nolock) ON cas2.SupervisorDelegateId = sd2.ID INNER JOIN + AdminAccounts aa2 with (nolock) ON sd2.SupervisorAdminID = aa2.ID + WHERE aa2.IsSupervisor = 0 AND aa2.IsNominatedSupervisor = 1 + ) + GROUP BY CandidateAssessmentID,SupervisorDelegateId + HAVING COUNT(*)>1 + )" + ); + } + } +} diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index 9f0ab58aec..9e3addf30f 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -542,7 +542,7 @@ LEFT OUTER JOIN UserCentreDetails AS UCD ON new { candidateAssessmentId, enrolmentMethodId, completeByDateDynamic } ); } - if (candidateAssessmentId > 1 && supervisorDelegateId !=0) + if (candidateAssessmentId > 1 && supervisorDelegateId != 0) { string sqlQuery = $@" BEGIN TRANSACTION @@ -551,17 +551,17 @@ BEGIN TRANSACTION UPDATE CandidateAssessmentSupervisors SET Removed = NULL {((selfAssessmentSupervisorRoleId > 0) ? " ,SelfAssessmentSupervisorRoleID = @selfAssessmentSupervisorRoleID" : string.Empty)} - WHERE CandidateAssessmentID = @candidateAssessmentId + WHERE CandidateAssessmentID = @candidateAssessmentId AND SupervisorDelegateId = @supervisorDelegateId COMMIT TRANSACTION"; connection.Execute(sqlQuery - , new { candidateAssessmentId, selfAssessmentSupervisorRoleId, enrolmentMethodId, completeByDateDynamic }); + , new { candidateAssessmentId, selfAssessmentSupervisorRoleId, enrolmentMethodId, completeByDateDynamic, supervisorDelegateId }); } if (supervisorId > 0) { - + var adminUserId = Convert.ToInt32(connection.ExecuteScalar(@"SELECT UserID FROM AdminAccounts WHERE (AdminAccounts.ID = @supervisorId)", new { supervisorId }) ); diff --git a/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CandidateAssessmentsDataService.cs b/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CandidateAssessmentsDataService.cs index 20f9f52ab2..2390d54147 100644 --- a/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CandidateAssessmentsDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CandidateAssessmentsDataService.cs @@ -8,6 +8,85 @@ public partial class SelfAssessmentDataService { + public IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId, int? adminIdCategoryID) + { + return connection.Query( + @"SELECT SelfAssessment.Id, + SelfAssessment.Name, + SelfAssessment.Description, + SelfAssessment.IncludesSignposting, + SelfAssessment.IncludeRequirementsFilters, + SelfAssessment. IsSupervisorResultsReviewed, + SelfAssessment.ReviewerCommentsLabel, + SelfAssessment. Vocabulary, + SelfAssessment. NumberOfCompetencies, + SelfAssessment.StartedDate, + SelfAssessment.LastAccessed, + SelfAssessment.CompleteByDate, + SelfAssessment.CandidateAssessmentId, + SelfAssessment.UserBookmark, + SelfAssessment.UnprocessedUpdates, + SelfAssessment.LaunchCount, + SelfAssessment. IsSelfAssessment, + SelfAssessment.SubmittedDate, + SelfAssessment. CentreName, + SelfAssessment.EnrolmentMethodId, + Signoff.SignedOff, + Signoff.Verified, + EnrolledByForename +' '+EnrolledBySurname AS EnrolledByFullName + FROM (SELECT + CA.SelfAssessmentID AS Id, + SA.Name, + SA.Description, + SA.IncludesSignposting, + SA.IncludeRequirementsFilters, + SA.SupervisorResultsReview AS IsSupervisorResultsReviewed, + SA.ReviewerCommentsLabel, + COALESCE(SA.Vocabulary, 'Capability') AS Vocabulary, + COUNT(C.ID) AS NumberOfCompetencies, + CA.StartedDate, + CA.LastAccessed, + CA.CompleteByDate, + CA.ID AS CandidateAssessmentId, + CA.UserBookmark, + CA.UnprocessedUpdates, + CA.LaunchCount, + 1 AS IsSelfAssessment, + CA.SubmittedDate, + CR.CentreName AS CentreName, + CA.EnrolmentMethodId, + uEnrolledBy.FirstName AS EnrolledByForename, + uEnrolledBy.LastName AS EnrolledBySurname + FROM Centres AS CR INNER JOIN + CandidateAssessments AS CA INNER JOIN + SelfAssessments AS SA ON CA.SelfAssessmentID = SA.ID ON CR.CentreID = CA.CentreID INNER JOIN + CentreSelfAssessments AS csa ON csa.SelfAssessmentID = SA.ID AND csa.CentreID = @centreId LEFT OUTER JOIN + Competencies AS C RIGHT OUTER JOIN + SelfAssessmentStructure AS SAS ON C.ID = SAS.CompetencyID ON CA.SelfAssessmentID = SAS.SelfAssessmentID LEFT OUTER JOIN + CandidateAssessmentSupervisors AS cas ON ca.ID =cas.CandidateAssessmentID LEFT OUTER JOIN + CandidateAssessmentSupervisorVerifications AS casv ON casv.CandidateAssessmentSupervisorID = cas.ID LEFT OUTER JOIN + AdminAccounts AS aaEnrolledBy ON aaEnrolledBy.ID = CA.EnrolledByAdminID LEFT OUTER JOIN + Users AS uEnrolledBy ON uEnrolledBy.ID = aaEnrolledBy.UserID + WHERE (CA.DelegateUserID = @delegateUserId) AND (CA.RemovedDate IS NULL) AND (CA.CompletedDate IS NULL) + AND (ISNULL(@adminIdCategoryID, 0) = 0 OR sa.CategoryID = @adminIdCategoryId) + GROUP BY + CA.SelfAssessmentID, SA.Name, SA.Description, SA.IncludesSignposting, SA.SupervisorResultsReview, + SA.ReviewerCommentsLabel, SA.IncludeRequirementsFilters, + COALESCE(SA.Vocabulary, 'Capability'), CA.StartedDate, CA.LastAccessed, CA.CompleteByDate, + CA.ID, + CA.UserBookmark, CA.UnprocessedUpdates, CA.LaunchCount, CA.SubmittedDate, CR.CentreName,CA.EnrolmentMethodId, + uEnrolledBy.FirstName,uEnrolledBy.LastName)SelfAssessment LEFT OUTER JOIN + (SELECT SelfAssessmentID,casv.SignedOff,MAX(casv.Verified) Verified FROM + CandidateAssessments AS CA LEFT OUTER JOIN + CandidateAssessmentSupervisors AS cas ON ca.ID =cas.CandidateAssessmentID LEFT OUTER JOIN + CandidateAssessmentSupervisorVerifications AS casv ON casv.CandidateAssessmentSupervisorID = cas.ID + WHERE (CA.DelegateUserID = @delegateUserId) AND (CA.RemovedDate IS NULL) AND (CA.CompletedDate IS NULL) AND (casv.SignedOff = 1) AND + (casv.Verified IS NOT NULL) + GROUP BY SelfAssessmentID,casv.SignedOff + )Signoff ON SelfAssessment.Id =Signoff.SelfAssessmentID", + new { delegateUserId, centreId, adminIdCategoryID } + ); + } public IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId) { return connection.Query( @@ -86,7 +165,6 @@ CandidateAssessments AS CA LEFT OUTER JOIN new { delegateUserId, centreId } ); } - public CurrentSelfAssessment? GetSelfAssessmentForCandidateById(int delegateUserId, int selfAssessmentId) { return connection.QueryFirstOrDefault( diff --git a/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CompetencyDataService.cs b/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CompetencyDataService.cs index ceb322b467..845a00b07c 100644 --- a/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CompetencyDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CompetencyDataService.cs @@ -288,7 +288,7 @@ public IEnumerable GetResultSupervisorVerifications(int selfAssessme INNER JOIN DelegateAccounts DA1 ON CA.DelegateUserID = DA1.UserID AND au.CentreID = DA1.CentreID AND DA1.Active=1 WHERE (LAR.Verified IS NULL)  AND ((LAR.Result IS NOT NULL) OR (LAR.SupportingComments IS NOT NULL))  - AND (LAR.Requested IS NOT NULL) + AND (LAR.Requested IS NOT NULL) AND (au.CategoryID = 0 OR au.CategoryID = (select CategoryID from SelfAssessments where ID = @selfAssessmentId)) ORDER BY SupervisorVerificationRequested DESC, C.Name", (competency, assessmentQuestion) => { diff --git a/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/SelfAssessmentDataService.cs b/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/SelfAssessmentDataService.cs index e10185bf18..0528c7f907 100644 --- a/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/SelfAssessmentDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/SelfAssessmentDataService.cs @@ -72,8 +72,8 @@ int competencyId // CandidateAssessmentsDataService + IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId, int? adminIdCategoryID); IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId); - CurrentSelfAssessment? GetSelfAssessmentForCandidateById(int delegateUserId, int selfAssessmentId); void UpdateLastAccessed(int selfAssessmentId, int delegateUserId); @@ -174,7 +174,6 @@ int GetSelfAssessmentActivityDelegatesExportCount(string searchString, string so bool HasMinimumOptionalCompetencies(int selfAssessmentId, int delegateUserId); int GetSelfAssessmentCategoryId(int selfAssessmentId); } - public partial class SelfAssessmentDataService : ISelfAssessmentDataService { private readonly IDbConnection connection; 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.Data/DataServices/UserDataService/AdminUserDataService.cs b/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs index 687aeec180..d93094c97b 100644 --- a/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs @@ -279,7 +279,10 @@ bool isCentreManager IsContentCreator = @isContentCreator, IsContentManager = @isContentManager, ImportOnly = @importOnly, - CategoryID = @categoryId, + CategoryID = CASE + WHEN @categoryID = 0 THEN NULL + ELSE @categoryID + END, IsCentreManager = @isCentreManager WHERE ID = @adminId", new 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/Controllers/TrackingSystem/Delegates/ViewDelegateController.cs b/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Delegates/ViewDelegateController.cs index 32589d77a9..22ca66bb84 100644 --- a/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Delegates/ViewDelegateController.cs +++ b/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Delegates/ViewDelegateController.cs @@ -83,7 +83,7 @@ public IActionResult Index(int delegateId, string? callType) } var selfAssessments = - selfAssessmentService.GetSelfAssessmentsForCandidate(delegateEntity.UserAccount.Id, centreId); + selfAssessmentService.GetSelfAssessmentsForCandidate(delegateEntity.UserAccount.Id, centreId, categoryIdFilter); foreach (var selfassessment in selfAssessments) { 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/SelfAssessmentService.cs b/DigitalLearningSolutions.Web/Services/SelfAssessmentService.cs index 61e92bb72b..37b44e8e34 100644 --- a/DigitalLearningSolutions.Web/Services/SelfAssessmentService.cs +++ b/DigitalLearningSolutions.Web/Services/SelfAssessmentService.cs @@ -15,8 +15,8 @@ public interface ISelfAssessmentService //Self Assessments string? GetSelfAssessmentNameById(int selfAssessmentId); // Candidate Assessments + IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId, int? adminIdCategoryID); IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId); - CurrentSelfAssessment? GetSelfAssessmentForCandidateById(int delegateUserId, int selfAssessmentId); void SetBookmark(int selfAssessmentId, int delegateUserId, string bookmark); @@ -404,11 +404,14 @@ public IEnumerable GetCandidateAssessmentOptionalCompetencies(int se return selfAssessmentDataService.GetCandidateAssessmentOptionalCompetencies(selfAssessmentId, delegateUserId); } + public IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId, int? adminIdCategoryID) + { + return selfAssessmentDataService.GetSelfAssessmentsForCandidate(delegateUserId, centreId, adminIdCategoryID); + } public IEnumerable GetSelfAssessmentsForCandidate(int delegateUserId, int centreId) { return selfAssessmentDataService.GetSelfAssessmentsForCandidate(delegateUserId, centreId); } - public IEnumerable GetMostRecentResults(int selfAssessmentId, int delegateId) { return selfAssessmentDataService.GetMostRecentResults(selfAssessmentId, delegateId); 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); } } } diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/SupervisorDelegateViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/SupervisorDelegateViewModel.cs index 53fd39ee54..4c157a0d86 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/SupervisorDelegateViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/SupervisorDelegateViewModel.cs @@ -47,6 +47,6 @@ public SupervisorDelegateViewModel() { } [DefaultValue(false)] public bool ConfirmedRemove { get; set; } public int SelfAssessmentCategory { get; set; } - public IEnumerable SelfAssessmentCategories { get; set; } + public IEnumerable? SelfAssessmentCategories { get; set; } } } diff --git a/DigitalLearningSolutions.Web/package-lock.json b/DigitalLearningSolutions.Web/package-lock.json index bdb61f2a3e..8852eef7d5 100644 --- a/DigitalLearningSolutions.Web/package-lock.json +++ b/DigitalLearningSolutions.Web/package-lock.json @@ -4538,11 +4538,10 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -8446,11 +8445,10 @@ } }, "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, - "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -14305,9 +14303,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -17127,9 +17125,9 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "requires": { "nice-try": "^1.0.4", diff --git a/DigitalLearningSolutions.Web/yarn.lock b/DigitalLearningSolutions.Web/yarn.lock index 3e95327134..8ca9280dd3 100644 --- a/DigitalLearningSolutions.Web/yarn.lock +++ b/DigitalLearningSolutions.Web/yarn.lock @@ -2279,7 +2279,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -2538,9 +2538,9 @@ create-require@^1.1.0: integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -2549,9 +2549,9 @@ cross-spawn@^6.0.5: which "^1.2.9" cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -3318,13 +3318,6 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - find-cache-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2"