diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index ce590a4d25..93a26caff1 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -1215,7 +1215,7 @@ public IActionResult SignOffProfileAssessment( SignOffProfileAssessmentViewModel model ) { - if ((!ModelState.IsValid) && (model.NumberOfSelfAssessedOptionalCompetencies > 0) && (!model.OptionalCompetenciesChecked)) + if ((!ModelState.IsValid) && (model.NumberOfSelfAssessedOptionalCompetencies > 0) && (!model.OptionalCompetenciesChecked) && model.SignedOff) { SelfAssessmentResultSummary? selfAssessmentSummary = supervisorService.GetSelfAssessmentResultSummary(candidateAssessmentId, supervisorDelegateId); @@ -1231,7 +1231,10 @@ SignOffProfileAssessmentViewModel model CandidateAssessmentSupervisorVerificationId = selfAssessmentSummary.CandidateAssessmentSupervisorVerificationId, CandidateAssessmentSupervisorVerificationSummaries = verificationsSummary, - NumberOfSelfAssessedOptionalCompetencies = optionalCompetencies.Count(x => x.IncludedInSelfAssessment) + NumberOfSelfAssessedOptionalCompetencies = optionalCompetencies.Count(x => x.IncludedInSelfAssessment), + SupervisorComments = model.SupervisorComments, + SignedOff = model.SignedOff, + IsSignOffverified = model.SignedOff }; return View("SignOffProfileAssessment", newModel); } diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/SignOffProfileAssessmentViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/SignOffProfileAssessmentViewModel.cs index c44a39a4c7..c6cd41ec5d 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/SignOffProfileAssessmentViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/SignOffProfileAssessmentViewModel.cs @@ -21,5 +21,6 @@ public class SignOffProfileAssessmentViewModel [Range(1, 1, ErrorMessage = "Please tick to confirm that you have reviewed the optional competencies included in this self assessment and they are appropriate to the learner’s role.")] public bool OptionalCompetenciesChecked { get; set; } public int NumberOfSelfAssessedOptionalCompetencies { get; set; } + public bool? IsSignOffverified { get; set; } } } diff --git a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SelfAssessmentOverview.cshtml b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SelfAssessmentOverview.cshtml index a021e1fdbf..e9e97c5bbf 100644 --- a/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SelfAssessmentOverview.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningPortal/SelfAssessments/SelfAssessmentOverview.cshtml @@ -14,6 +14,9 @@ .Select(q => q.ResultDateTime) .DefaultIfEmpty(DateTime.MinValue) .Max(); + bool signedOff = (from record in Model.SupervisorSignOffs + orderby record.ID descending + select record.SignedOff).FirstOrDefault(); var competencySummaries = from g in Model.CompetencyGroups let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required) let selfAssessedCount = questions.Count(q => q.Result.HasValue) @@ -41,7 +44,7 @@ } @section mobilebacklink - { +{

@@ -197,7 +200,7 @@ } @if (!Model.SupervisorSignOffs.Where(x => x.Verified == null).Any() - && latestResult > latestSignoff + && (latestResult > latestSignoff || !signedOff) && (Model.NumberOfSelfAssessedOptionalCompetencies >= Model.SelfAssessment.MinimumOptionalCompetencies) ) { diff --git a/DigitalLearningSolutions.Web/Views/Supervisor/SignOffProfileAssessment.cshtml b/DigitalLearningSolutions.Web/Views/Supervisor/SignOffProfileAssessment.cshtml index b1387a5d6c..f47fa23a6e 100644 --- a/DigitalLearningSolutions.Web/Views/Supervisor/SignOffProfileAssessment.cshtml +++ b/DigitalLearningSolutions.Web/Views/Supervisor/SignOffProfileAssessment.cshtml @@ -2,209 +2,209 @@ @using DigitalLearningSolutions.Web.ViewModels.Supervisor @model SignOffProfileAssessmentViewModel; @{ - var errorHasOccurred = !ViewData.ModelState.IsValid; - ViewData["Title"] = "Sign-off Self Assessment"; - ViewData["Application"] = "Supervisor"; - ViewData["HeaderPathName"] = "Supervisor"; + var errorHasOccurred = !ViewData.ModelState.IsValid; + ViewData["Title"] = "Sign-off Self Assessment"; + ViewData["Application"] = "Supervisor"; + ViewData["HeaderPathName"] = "Supervisor"; } @section NavMenuItems { - + } - @section NavBreadcrumbs { -

+@section NavBreadcrumbs { + } @if (errorHasOccurred) { } -
+
-

- @Model.SupervisorDelegate.FirstName @Model.SupervisorDelegate.LastName -

+

+ @Model.SupervisorDelegate.FirstName @Model.SupervisorDelegate.LastName +

- +
-
-

@Model.SelfAssessmentResultSummary.RoleName

-
+
+

@Model.SelfAssessmentResultSummary.RoleName

+
-
- Assessment questions in profile -
-
- @Model.SelfAssessmentResultSummary.CompetencyAssessmentQuestionCount -
+
+ Assessment questions in profile +
+
+ @Model.SelfAssessmentResultSummary.CompetencyAssessmentQuestionCount +
-
- Assessment question responses -
-
- @Model.SelfAssessmentResultSummary.ResultCount -
+
+ Assessment question responses +
+
+ @Model.SelfAssessmentResultSummary.ResultCount +
-
- Responses verified -
-
- @Model.SelfAssessmentResultSummary.VerifiedCount -
+
+ Responses verified +
+
+ @Model.SelfAssessmentResultSummary.VerifiedCount +
@if (Model.CandidateAssessmentSupervisorVerificationSummaries.Any()) - { -
-
- Response confirmers -
-
- @foreach (var candidateAssessmentSupervisorVerificationSummary in Model.CandidateAssessmentSupervisorVerificationSummaries) - { - - @DisplayStringHelper.GetPotentiallyInactiveAdminName( - candidateAssessmentSupervisorVerificationSummary.Forename, - candidateAssessmentSupervisorVerificationSummary.Surname, - candidateAssessmentSupervisorVerificationSummary.AdminActive) (@candidateAssessmentSupervisorVerificationSummary.Email) - @candidateAssessmentSupervisorVerificationSummary.VerifiedCount - - -
- } -
- -
- } - - @if (Model.SelfAssessmentResultSummary.UngradedCount < Model.SelfAssessmentResultSummary.ResultCount) - { -
-
- Responses meeting role requirements -
-
- @Model.SelfAssessmentResultSummary.MeetingCount -
- -
-
-
- Responses partially meeting role requirements -
-
- @Model.SelfAssessmentResultSummary.PartiallyMeetingCount -
- -
-
-
- Responses not meeting role requirements -
-
- @Model.SelfAssessmentResultSummary.NotMeetingCount -
- -
-
-
- Responses with no role requirements set -
-
- @Model.SelfAssessmentResultSummary.UngradedCount -
-
- } + { +
+
+ Response confirmers +
+
+ @foreach (var candidateAssessmentSupervisorVerificationSummary in Model.CandidateAssessmentSupervisorVerificationSummaries) + { + + @DisplayStringHelper.GetPotentiallyInactiveAdminName( + candidateAssessmentSupervisorVerificationSummary.Forename, + candidateAssessmentSupervisorVerificationSummary.Surname, + candidateAssessmentSupervisorVerificationSummary.AdminActive) (@candidateAssessmentSupervisorVerificationSummary.Email) - @candidateAssessmentSupervisorVerificationSummary.VerifiedCount + + +
+ } +
+ +
+ } + + @if (Model.SelfAssessmentResultSummary.UngradedCount < Model.SelfAssessmentResultSummary.ResultCount) + { +
+
+ Responses meeting role requirements +
+
+ @Model.SelfAssessmentResultSummary.MeetingCount +
+ +
+
+
+ Responses partially meeting role requirements +
+
+ @Model.SelfAssessmentResultSummary.PartiallyMeetingCount +
+ +
+
+
+ Responses not meeting role requirements +
+
+ @Model.SelfAssessmentResultSummary.NotMeetingCount +
+ +
+
+
+ Responses with no role requirements set +
+
+ @Model.SelfAssessmentResultSummary.UngradedCount +
+
+ }
-
-
-
- -

- Sign-off Self Assessment -

-
- +
+ +
+ +

+ Sign-off Self Assessment +

+
+ - - - - - -
-
- - -
- @Html.Raw(Model.SelfAssessmentResultSummary.SignOffSupervisorStatement == null ? - "I confirm that this profile self-assessment accurately captures" + - $" {Model.SupervisorDelegate.FirstName} {Model.SupervisorDelegate.LastName}'s " + - "current capability in the areas assessed." : - Model.SelfAssessmentResultSummary.SignOffSupervisorStatement) -
-
-
- - -
- You must provide sign-off comments indicating the reason for rejecting sign-off. -
-
- -
-
+ + + + + +
+
+ + +
+ @Html.Raw(Model.SelfAssessmentResultSummary.SignOffSupervisorStatement == null ? + "I confirm that this profile self-assessment accurately captures" + + $" {Model.SupervisorDelegate.FirstName} {Model.SupervisorDelegate.LastName}'s " + + "current capability in the areas assessed." : + Model.SelfAssessmentResultSummary.SignOffSupervisorStatement) +
+
+
+ + +
+ You must provide sign-off comments indicating the reason for rejecting sign-off. +
+
+ +
+
@if (Model.NumberOfSelfAssessedOptionalCompetencies > 0) { @@ -217,25 +217,25 @@ }
- - -
+ + +
@section scripts { - + }