From f6f75d7ebeb2cbc3c9f9fe3e6628a7a5abcfb5fb Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Mon, 6 Sep 2021 09:42:21 +0100 Subject: [PATCH 1/5] DLSV2-257 Removes request removal button and adds supervisor role to Admin account when existing admin is identified as supervisor --- DigitalLearningSolutions.Data/Services/SupervisorService.cs | 4 ++++ .../LearningPortal/SelfAssessments/ManageSupervisors.cshtml | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DigitalLearningSolutions.Data/Services/SupervisorService.cs b/DigitalLearningSolutions.Data/Services/SupervisorService.cs index 2057dafcf2..b6ec555bee 100644 --- a/DigitalLearningSolutions.Data/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Data/Services/SupervisorService.cs @@ -142,6 +142,10 @@ FROM SupervisorDelegates @"SELECT AdminID FROM AdminUsers WHERE Email = @supervisorEmail AND Active = 1 AND CentreID = @centreId", new { supervisorEmail, centreId } ); } + if (supervisorAdminId != null) + { + connection.Execute("@UPDATE AdminUsers SET Supervisor = 1 WHERE Admin ID = @supervisorAdminId AND Supervisor = 0"); + } var numberOfAffectedRows = connection.Execute( @"INSERT INTO SupervisorDelegates (SupervisorAdminID, DelegateEmail, CandidateID, SupervisorEmail, AddedByDelegate) VALUES (@supervisorAdminId, @delegateEmail, @delegateId, @supervisorEmail, @addedByDelegate)", diff --git a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml index b1f3986873..4a52fbc30e 100644 --- a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml @@ -41,10 +41,6 @@ { Confirm Reject } - else - { - Request removal of supervisor - } @if (supervisor.SupervisorAdminID == null) { Send reminder From 1fc2aa72f795e1a77f9021941f7dd2a5fd53455e Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Mon, 6 Sep 2021 11:26:16 +0100 Subject: [PATCH 2/5] DLSV2-257 Implements Remove supervisor button Deletes the CandidateAssessmentSupervisor Record. Sets SupervisorDelegates Removed date if no other CandidateAssessmentSupervisors exist with matching Supervisor Delegate ID. No confirm screen is included - should there be one? --- .../Services/SupervisorService.cs | 27 ++++++++++++++++++- .../SelfAssessment.cs | 5 ++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/DigitalLearningSolutions.Data/Services/SupervisorService.cs b/DigitalLearningSolutions.Data/Services/SupervisorService.cs index b6ec555bee..df515c92c6 100644 --- a/DigitalLearningSolutions.Data/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Data/Services/SupervisorService.cs @@ -36,7 +36,7 @@ public interface ISupervisorService int EnrolDelegateOnAssessment(int delegateId, int supervisorDelegateId, int selfAssessmentId, DateTime? completeByDate, int? selfAssessmentSupervisorRoleId, int adminId); int InsertCandidateAssessmentSupervisor(int delegateId, int supervisorDelegateId, int selfAssessmentId, int? selfAssessmentSupervisorRoleId); //DELETE DATA - + bool RemoveCandidateAssessmentSupervisor(int candidateAssessmentSupervisorId); } public class SupervisorService : ISupervisorService @@ -455,5 +455,30 @@ public bool RemoveCandidateAssessment(int candidateAssessmentId) } return true; } + + public bool RemoveCandidateAssessmentSupervisor(int candidateAssessmentSupervisorId) + { + var supervisorDelegateId = (int)connection.ExecuteScalar( + @"SELECT SupervisorDelegateId + FROM CandidateAssessmentSupervisors + WHERE (ID = @candidateAssessmentSupervisorId)", + new { candidateAssessmentSupervisorId }); + var numberOfAffectedRows = connection.Execute( + @"DELETE CandidateAssessmentSupervisors + WHERE ID = @candidateAssessmentSupervisorId", + new { candidateAssessmentSupervisorId }); + if (numberOfAffectedRows < 1) + { + logger.LogWarning( + $"Not removing Candidate Assessment Supervisor as db update failed. candidateAssessmentSupervisorId: {candidateAssessmentSupervisorId}" + ); + return false; + } + connection.Execute( + @"UPDATE SupervisorDelegates SET Removed = getUTCDate() + WHERE ID = @supervisorDelegateId AND (SELECT COUNT(*) FROM CandidateAssessmentSupervisors WHERE SupervisorDelegateId = @supervisorDelegateId) = 0", + new { candidateAssessmentSupervisorId }); + return true; + } } } diff --git a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs index 4c941aa2ea..71625a9ac2 100644 --- a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs +++ b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs @@ -364,5 +364,10 @@ public IActionResult SubmitSummary() frameworkNotificationService.SendDelegateSupervisorNominated(supervisorDelegateId, sessionAddSupervisor.SelfAssessmentID); return RedirectToAction("ManageSupervisors", new { sessionAddSupervisor.SelfAssessmentID }); } + public IActionResult RemoveSupervisor(int selfAssessmentId, int candidateAssessmentSupervisorId) + { + supervisorService.RemoveCandidateAssessmentSupervisor(candidateAssessmentSupervisorId); + return RedirectToAction("ManageSupervisors", new { selfAssessmentId }); + } } } From 9d586c989149cd55a7e4e11301e20c0dc7ca97e5 Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 7 Sep 2021 07:44:10 +0100 Subject: [PATCH 3/5] DLSV2-257 Implements Send Reminder NotificationSent added to SelfAssessmentSupervisor model and loaded to prevent spamming reminders. --- .../SelfAssessments/SelfAssessmentSupervisor.cs | 1 + .../Services/FrameworkNotificationService.cs | 3 ++- .../Services/SelfAssessmentService.cs | 10 +++++----- .../Services/SupervisorService.cs | 12 ++++++++++-- .../LearningPortalController/SelfAssessment.cs | 5 +++++ .../SelfAssessments/ManageSupervisors.cshtml | 9 ++++++--- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/DigitalLearningSolutions.Data/Models/SelfAssessments/SelfAssessmentSupervisor.cs b/DigitalLearningSolutions.Data/Models/SelfAssessments/SelfAssessmentSupervisor.cs index 6de2735f42..ecd688942a 100644 --- a/DigitalLearningSolutions.Data/Models/SelfAssessments/SelfAssessmentSupervisor.cs +++ b/DigitalLearningSolutions.Data/Models/SelfAssessments/SelfAssessmentSupervisor.cs @@ -11,6 +11,7 @@ public class SelfAssessmentSupervisor public int? SupervisorAdminID { get; set; } public string SupervisorName { get; set; } public string SupervisorEmail { get; set; } + public DateTime NotificationSent { get; set; } public string RoleName { get; set; } public bool ReviewResults { get; set; } public bool SelfAssessmentReview { get; set; } diff --git a/DigitalLearningSolutions.Data/Services/FrameworkNotificationService.cs b/DigitalLearningSolutions.Data/Services/FrameworkNotificationService.cs index 08ff5e9d4d..63a29e05be 100644 --- a/DigitalLearningSolutions.Data/Services/FrameworkNotificationService.cs +++ b/DigitalLearningSolutions.Data/Services/FrameworkNotificationService.cs @@ -324,7 +324,7 @@ public void SendDelegateSupervisorNominated(int supervisorDelegateId, int selfAs return; } var delegateSelfAssessment = supervisorService.GetSelfAssessmentBySupervisorDelegateSelfAssessmentId(selfAssessmentID,(int)supervisorDelegate.ID); - string emailSubjectLine = "Invite from Supervisor - Digital Learning Solutions"; + string emailSubjectLine = $"{delegateSelfAssessment.SupervisorRoleTitle} role request - Digital Learning Solutions"; var builder = new BodyBuilder(); var dlsUrlBuilder = GetDLSUriBuilder(); if (supervisorDelegate.SupervisorAdminID == null) @@ -344,6 +344,7 @@ public void SendDelegateSupervisorNominated(int supervisorDelegateId, int selfAs To supervise this activity, please visit {dlsUrlBuilder.Uri.ToString()} (sign in using your existing DLS credentials)."; builder.HtmlBody = $@"

Dear {supervisorDelegate.SupervisorName},

You have been identified by {supervisorDelegate.FirstName} {supervisorDelegate.LastName} as their {delegateSelfAssessment.SupervisorRoleTitle} for the activity '{delegateSelfAssessment.RoleName}' in the NHS Health Education England, Digital Learning Solutions (DLS) platform.

You are already registered as a delegate at the supervisor's DLS centre. Click here to supervise this activity (sign in using your existing DLS credentials).

/body>"; } + supervisorService.UpdateNotificationSent(supervisorDelegateId); emailService.SendEmail(new Email(emailSubjectLine, builder, supervisorDelegate.DelegateEmail)); } } diff --git a/DigitalLearningSolutions.Data/Services/SelfAssessmentService.cs b/DigitalLearningSolutions.Data/Services/SelfAssessmentService.cs index 6e3e61f0fc..83252b6e68 100644 --- a/DigitalLearningSolutions.Data/Services/SelfAssessmentService.cs +++ b/DigitalLearningSolutions.Data/Services/SelfAssessmentService.cs @@ -555,7 +555,7 @@ public IEnumerable GetLevelDescriptorsForAssessmentQuestion(int public IEnumerable GetSupervisorsForSelfAssessmentId(int selfAssessmentId, int candidateId) {return connection.Query( - @"SELECT sd.ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, au.Forename + ' ' + au.Surname AS SupervisorName, COALESCE(sasr.RoleName, 'Supervisor') AS RoleName, sasr.SelfAssessmentReview, sasr.ResultsReview, sd.AddedByDelegate, sd.Confirmed + @"SELECT sd.ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, sd.NotificationSent, au.Forename + ' ' + au.Surname AS SupervisorName, COALESCE(sasr.RoleName, 'Supervisor') AS RoleName, sasr.SelfAssessmentReview, sasr.ResultsReview, sd.AddedByDelegate, sd.Confirmed FROM SupervisorDelegates AS sd INNER JOIN CandidateAssessmentSupervisors AS cas ON sd.ID = cas.SupervisorDelegateId INNER JOIN CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN @@ -567,7 +567,7 @@ FROM SupervisorDelegates AS sd INNER JOIN public IEnumerable GetAllSupervisorsForSelfAssessmentId(int selfAssessmentId, int candidateId) { return connection.Query( - @"SELECT cas.ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, COALESCE(au.Forename + ' ' + au.Surname, sd.SupervisorEmail) AS SupervisorName, COALESCE(sasr.RoleName, 'Supervisor') AS RoleName, sasr.SelfAssessmentReview, sasr.ResultsReview, sd.AddedByDelegate, sd.Confirmed + @"SELECT cas.ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, sd.NotificationSent, COALESCE(au.Forename + ' ' + au.Surname, sd.SupervisorEmail) AS SupervisorName, COALESCE(sasr.RoleName, 'Supervisor') AS RoleName, sasr.SelfAssessmentReview, sasr.ResultsReview, sd.AddedByDelegate, sd.Confirmed FROM SupervisorDelegates AS sd INNER JOIN CandidateAssessmentSupervisors AS cas ON sd.ID = cas.SupervisorDelegateId INNER JOIN CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID LEFT OUTER JOIN @@ -579,20 +579,20 @@ FROM SupervisorDelegates AS sd INNER JOIN public IEnumerable GetOtherSupervisorsForCandidate(int selfAssessmentId, int candidateId) { return connection.Query( - @"SELECT 0 AS ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, au.Forename + ' ' + au.Surname AS SupervisorName, 'Supervisor' AS RoleName + @"SELECT 0 AS ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, sd.NotificationSent, au.Forename + ' ' + au.Surname AS SupervisorName, 'Supervisor' AS RoleName FROM SupervisorDelegates AS sd INNER JOIN CandidateAssessmentSupervisors AS cas ON sd.ID = cas.SupervisorDelegateId INNER JOIN CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN AdminUsers AS au ON sd.SupervisorAdminID = au.AdminID WHERE (sd.Removed IS NULL) AND (sd.SupervisorAdminID IS NOT NULL) AND (sd.Confirmed IS NOT NULL) AND (sd.CandidateID = @candidateId) EXCEPT -SELECT 0 AS ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, au.Forename + ' ' + au.Surname AS SupervisorName, 'Supervisor' AS RoleName +SELECT 0 AS ID, sd.ID AS SupervisorDelegateID, sd.SupervisorAdminID, sd.SupervisorEmail, sd.NotificationSent, au.Forename + ' ' + au.Surname AS SupervisorName, 'Supervisor' AS RoleName FROM SupervisorDelegates AS sd INNER JOIN CandidateAssessmentSupervisors AS cas ON sd.ID = cas.SupervisorDelegateId INNER JOIN CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN AdminUsers AS au ON sd.SupervisorAdminID = au.AdminID WHERE (sd.Removed IS NULL) AND (sd.Confirmed IS NOT NULL) AND (sd.CandidateID = @candidateId) AND (ca.SelfAssessmentID = @selfAssessmentId) -GROUP BY sd.ID, SupervisorAdminID, SupervisorEmail, au.Forename + ' ' + au.Surname", new { selfAssessmentId, candidateId } +GROUP BY sd.ID, SupervisorAdminID, SupervisorEmail, sd.NotificationSent, au.Forename + ' ' + au.Surname", new { selfAssessmentId, candidateId } ); } } diff --git a/DigitalLearningSolutions.Data/Services/SupervisorService.cs b/DigitalLearningSolutions.Data/Services/SupervisorService.cs index df515c92c6..3eabb12191 100644 --- a/DigitalLearningSolutions.Data/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Data/Services/SupervisorService.cs @@ -31,13 +31,13 @@ public interface ISupervisorService bool RemoveSupervisorDelegateById(int supervisorDelegateId, int candidateId, int adminId); bool UpdateSelfAssessmentResultSupervisorVerifications(int selfAssessmentResultSupervisorVerificationId, string? comments, bool signedOff, int adminId); bool RemoveCandidateAssessment(int candidateAssessmentId); + void UpdateNotificationSent(int supervisorDelegateId); //INSERT DATA int AddSuperviseDelegate(int? supervisorAdminId, int? delegateId, string delegateEmail, string supervisorEmail, int centreId); int EnrolDelegateOnAssessment(int delegateId, int supervisorDelegateId, int selfAssessmentId, DateTime? completeByDate, int? selfAssessmentSupervisorRoleId, int adminId); int InsertCandidateAssessmentSupervisor(int delegateId, int supervisorDelegateId, int selfAssessmentId, int? selfAssessmentSupervisorRoleId); //DELETE DATA bool RemoveCandidateAssessmentSupervisor(int candidateAssessmentSupervisorId); - } public class SupervisorService : ISupervisorService { @@ -477,8 +477,16 @@ FROM CandidateAssessmentSupervisors connection.Execute( @"UPDATE SupervisorDelegates SET Removed = getUTCDate() WHERE ID = @supervisorDelegateId AND (SELECT COUNT(*) FROM CandidateAssessmentSupervisors WHERE SupervisorDelegateId = @supervisorDelegateId) = 0", - new { candidateAssessmentSupervisorId }); + new { supervisorDelegateId }); return true; } + + public void UpdateNotificationSent(int supervisorDelegateId) + { + connection.Execute( + @"UPDATE SupervisorDelegates SET NotificationSent = getUTCDate() + WHERE ID = @supervisorDelegateId", + new { supervisorDelegateId }); + } } } diff --git a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs index 71625a9ac2..46e0d13621 100644 --- a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs +++ b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs @@ -369,5 +369,10 @@ public IActionResult RemoveSupervisor(int selfAssessmentId, int candidateAssessm supervisorService.RemoveCandidateAssessmentSupervisor(candidateAssessmentSupervisorId); return RedirectToAction("ManageSupervisors", new { selfAssessmentId }); } + public IActionResult SendSupervisorReminder(int selfAssessmentId, int supervisorDelegateId) + { + frameworkNotificationService.SendDelegateSupervisorNominated(supervisorDelegateId, selfAssessmentId); + return RedirectToAction("ManageSupervisors", new { selfAssessmentId }); + } } } diff --git a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml index 4a52fbc30e..012ad7d226 100644 --- a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml @@ -43,10 +43,13 @@ } @if (supervisor.SupervisorAdminID == null) { - Send reminder - } + @if (supervisor.NotificationSent.ToShortDateString() != DateTime.UtcNow.ToShortDateString()) + { + Send reminder + } + } - + } From 10d369f863a83c39f221e686cb1662ece76d44b8 Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 7 Sep 2021 07:59:36 +0100 Subject: [PATCH 4/5] DLSV2-257 Implements confirm and reject supervisor functionality --- .../LearningPortalController/SelfAssessment.cs | 12 ++++++++++++ .../SelfAssessments/ManageSupervisors.cshtml | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs index 46e0d13621..ccc05e1b40 100644 --- a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs +++ b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs @@ -374,5 +374,17 @@ public IActionResult SendSupervisorReminder(int selfAssessmentId, int supervisor frameworkNotificationService.SendDelegateSupervisorNominated(supervisorDelegateId, selfAssessmentId); return RedirectToAction("ManageSupervisors", new { selfAssessmentId }); } + public IActionResult ConfirmSupervisor(int supervisorDelegateId, int selfAssessmentId) + { + supervisorService.ConfirmSupervisorDelegateById(supervisorDelegateId, GetCandidateId(), 0); + frameworkNotificationService.SendSupervisorDelegateConfirmed(supervisorDelegateId); + return RedirectToAction("ManageSupervisors", new { selfAssessmentId }); + } + public IActionResult RejectSupervisor(int supervisorDelegateId, int selfAssessmentId) + { + supervisorService.RemoveSupervisorDelegateById(supervisorDelegateId, GetCandidateId(), 0); + frameworkNotificationService.SendSupervisorDelegateRejected(supervisorDelegateId); + return RedirectToAction("ManageSupervisors", new { selfAssessmentId }); + } } } diff --git a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml index 012ad7d226..aaa3053719 100644 --- a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/ManageSupervisors.cshtml @@ -39,7 +39,7 @@ } else if (supervisor.Confirmed == null) { - Confirm Reject + Confirm Reject } @if (supervisor.SupervisorAdminID == null) { From 802e617f19214df12e30a6728636511e4903f875 Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 7 Sep 2021 09:30:46 +0100 Subject: [PATCH 5/5] DLSV2-257 Improves validation and markup of add supervisor views --- .../SetSupervisorRoleViewModel.cs | 1 + .../SelfAssessments/AddSupervisor.cshtml | 41 +++++++++------- .../SelfAssessments/SetSupervisorRole.cshtml | 47 ++++++++++--------- 3 files changed, 50 insertions(+), 39 deletions(-) diff --git a/DigitalLearningSolutions.Web/ViewModels/LearningPortal/SelfAssessments/SetSupervisorRoleViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/LearningPortal/SelfAssessments/SetSupervisorRoleViewModel.cs index 228f8534d8..920591a2e4 100644 --- a/DigitalLearningSolutions.Web/ViewModels/LearningPortal/SelfAssessments/SetSupervisorRoleViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/LearningPortal/SelfAssessments/SetSupervisorRoleViewModel.cs @@ -14,6 +14,7 @@ public class SetSupervisorRoleViewModel [EmailAddress(ErrorMessage = "Enter a supervisor email address in the correct format, like name@example.com")] [NoWhitespace("Supervisor email address must not contain any whitespace characters")] public string SupervisorEmail { get; set; } + [Range(1, int.MaxValue, ErrorMessage = "Please choose a supervisor role")] public int SelfAssessmentSupervisorRoleId { get; set; } public IEnumerable? SelfAssessmentSupervisorRoles { get; set; } } diff --git a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/AddSupervisor.cshtml b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/AddSupervisor.cshtml index 6b0c95ec04..aff2f0f600 100644 --- a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/AddSupervisor.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/AddSupervisor.cshtml @@ -14,6 +14,7 @@
  • Add
  • } +

    New activity supervisor

    @@ -21,24 +22,28 @@ { } - -
    - - - -
    - +
    + + + Add a supervisor + + + + + + + +
    +
    diff --git a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SetSupervisorRole.cshtml b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SetSupervisorRole.cshtml index 786a9b12d0..6a3b1a23b4 100644 --- a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SetSupervisorRole.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SetSupervisorRole.cshtml @@ -15,20 +15,24 @@ Supervisor Role
    -
    + @if (errorHasOccurred) + { + + } + -
    - - - Choose a role for this supervisor - - - - - -
    - @foreach (var role in Model.SelfAssessmentSupervisorRoles) - { +
    + + + Choose a role for this supervisor + + + + + +
    + @foreach (var role in Model.SelfAssessmentSupervisorRoles) + {
    }
    - } + } -
    -
    -
    - - Back - -
    + +
    +
    + + Back + +
    +