Skip to content

Commit e6d78cf

Browse files
authored
Merge pull request #2773 from TechnologyEnhancedLearning/Develop/Features/TD-4429-Additionaloptionalcompetenciescheckboxonthelearnersignoffrequestscreen
TD-4429 Additional optional competencies checkbox on the supervisor sign off screen
2 parents c4483b4 + e3d5967 commit e6d78cf

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ LEFT JOIN UserCentreDetails ucd
238238
AND da.CentreID = @centreId", new { delegateEmail, centreId });
239239
}
240240

241-
int existingId = (int)connection.ExecuteScalar(
241+
int existingId = Convert.ToInt32(connection.ExecuteScalar(
242242
@"
243243
SELECT COALESCE
244244
((SELECT Top 1 ID
@@ -253,7 +253,7 @@ FROM SupervisorDelegates sd
253253
supervisorAdminId = supervisorAdminId ?? 0,
254254
delegateUserId = delegateUserId ?? 0
255255
}
256-
);
256+
));
257257

258258
if (existingId > 0)
259259
{
@@ -285,7 +285,7 @@ FROM SupervisorDelegates sd
285285
return -1;
286286
}
287287

288-
existingId = (int)connection.ExecuteScalar(
288+
existingId = Convert.ToInt32(connection.ExecuteScalar(
289289
@"
290290
SELECT COALESCE
291291
((SELECT ID
@@ -302,7 +302,7 @@ FROM SupervisorDelegates sd
302302
supervisorAdminId = supervisorAdminId ?? 0,
303303
delegateUserId = delegateUserId ?? 0
304304
}
305-
); return existingId;
305+
)); return existingId;
306306
}
307307
}
308308

@@ -802,23 +802,23 @@ FROM CandidateAssessments
802802
}
803803
public int InsertCandidateAssessmentSupervisor(int delegateUserId, int supervisorDelegateId, int selfAssessmentId, int? selfAssessmentSupervisorRoleId)
804804
{
805-
int candidateAssessmentId = (int)connection.ExecuteScalar(
805+
int candidateAssessmentId = Convert.ToInt32(connection.ExecuteScalar(
806806
@"SELECT COALESCE
807807
((SELECT ID
808808
FROM CandidateAssessments
809809
WHERE (SelfAssessmentID = @selfAssessmentId) AND (DelegateUserID = @delegateUserId) AND (RemovedDate IS NULL) AND (CompletedDate IS NULL)), 0) AS CandidateAssessmentID",
810-
new { selfAssessmentId, delegateUserId });
810+
new { selfAssessmentId, delegateUserId }));
811811
if (candidateAssessmentId > 0)
812812
{
813-
var candidateAssessmentSupervisorsId = (int)connection.ExecuteScalar(
813+
var candidateAssessmentSupervisorsId = Convert.ToInt32(connection.ExecuteScalar(
814814
@"
815815
SELECT COALESCE
816816
((SELECT ID
817817
FROM CandidateAssessmentSupervisors
818818
WHERE (CandidateAssessmentID = @candidateAssessmentId)
819819
AND (SupervisorDelegateId = @supervisorDelegateId)
820820
AND ((SelfAssessmentSupervisorRoleID IS NULL) OR (SelfAssessmentSupervisorRoleID = @selfAssessmentSupervisorRoleId))), 0) AS CandidateAssessmentSupervisorID", new
821-
{ candidateAssessmentId, supervisorDelegateId, selfAssessmentSupervisorRoleId });
821+
{ candidateAssessmentId, supervisorDelegateId, selfAssessmentSupervisorRoleId }));
822822

823823
if (candidateAssessmentSupervisorsId == 0)
824824
{
@@ -1075,7 +1075,7 @@ SelfAssessmentStructure AS sas1 INNER JOIN
10751075
(ca1.ID = ca.ID) AND (caoc1.IncludedInSelfAssessment = 1) AND (NOT (sar1.Result IS NULL)) AND (sasrv.SignedOff = 1) AND (caqrr1.LevelRAG = 3) OR
10761076
(ca1.ID = ca.ID) AND (sas1.Optional = 0) AND (NOT (sar1.SupportingComments IS NULL)) AND (sasrv.SignedOff = 1) AND (caqrr1.LevelRAG = 3) OR
10771077
(ca1.ID = ca.ID) AND (caoc1.IncludedInSelfAssessment = 1) AND (NOT (sar1.SupportingComments IS NULL)) AND (sasrv.SignedOff = 1) AND (caqrr1.LevelRAG = 3)) AS MeetingCount,
1078-
sa.SignOffSupervisorStatement
1078+
sa.SignOffSupervisorStatement,ca.DelegateUserID
10791079
FROM NRPProfessionalGroups AS npg RIGHT OUTER JOIN
10801080
NRPSubGroups AS nsg RIGHT OUTER JOIN
10811081
SelfAssessmentSupervisorRoles AS sasr RIGHT OUTER JOIN

DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,13 +1167,15 @@ public IActionResult SignOffProfileAssessment(int supervisorDelegateId, int cand
11671167
supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0);
11681168
IEnumerable<CandidateAssessmentSupervisorVerificationSummary>? verificationsSummary =
11691169
supervisorService.GetCandidateAssessmentSupervisorVerificationSummaries(candidateAssessmentId);
1170+
var optionalCompetencies = selfAssessmentService.GetCandidateAssessmentOptionalCompetencies(selfAssessmentSummary.SelfAssessmentID, selfAssessmentSummary.DelegateUserID);
11701171
SignOffProfileAssessmentViewModel? model = new SignOffProfileAssessmentViewModel()
11711172
{
11721173
SelfAssessmentResultSummary = selfAssessmentSummary,
11731174
SupervisorDelegate = supervisorDelegate,
11741175
CandidateAssessmentSupervisorVerificationId =
11751176
selfAssessmentSummary?.CandidateAssessmentSupervisorVerificationId,
1176-
CandidateAssessmentSupervisorVerificationSummaries = verificationsSummary
1177+
CandidateAssessmentSupervisorVerificationSummaries = verificationsSummary,
1178+
NumberOfSelfAssessedOptionalCompetencies = optionalCompetencies.Count(x => x.IncludedInSelfAssessment)
11771179
};
11781180
return View("SignOffProfileAssessment", model);
11791181
}
@@ -1186,21 +1188,23 @@ public IActionResult SignOffProfileAssessment(
11861188
SignOffProfileAssessmentViewModel model
11871189
)
11881190
{
1189-
if (!ModelState.IsValid)
1191+
if ((!ModelState.IsValid) && (model.NumberOfSelfAssessedOptionalCompetencies > 0) && (!model.OptionalCompetenciesChecked))
11901192
{
11911193
SelfAssessmentResultSummary? selfAssessmentSummary =
11921194
supervisorService.GetSelfAssessmentResultSummary(candidateAssessmentId, supervisorDelegateId);
11931195
SupervisorDelegateDetail? supervisorDelegate =
11941196
supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0);
11951197
IEnumerable<CandidateAssessmentSupervisorVerificationSummary>? verificationsSummary =
11961198
supervisorService.GetCandidateAssessmentSupervisorVerificationSummaries(candidateAssessmentId);
1199+
var optionalCompetencies = selfAssessmentService.GetCandidateAssessmentOptionalCompetencies(selfAssessmentSummary.SelfAssessmentID, selfAssessmentSummary.DelegateUserID);
11971200
SignOffProfileAssessmentViewModel? newModel = new SignOffProfileAssessmentViewModel()
11981201
{
11991202
SelfAssessmentResultSummary = selfAssessmentSummary,
12001203
SupervisorDelegate = supervisorDelegate,
12011204
CandidateAssessmentSupervisorVerificationId =
12021205
selfAssessmentSummary.CandidateAssessmentSupervisorVerificationId,
1203-
CandidateAssessmentSupervisorVerificationSummaries = verificationsSummary
1206+
CandidateAssessmentSupervisorVerificationSummaries = verificationsSummary,
1207+
NumberOfSelfAssessedOptionalCompetencies = optionalCompetencies.Count(x => x.IncludedInSelfAssessment)
12041208
};
12051209
return View("SignOffProfileAssessment", newModel);
12061210
}

DigitalLearningSolutions.Web/ViewModels/Supervisor/SignOffProfileAssessmentViewModel.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ public class SignOffProfileAssessmentViewModel
1717
[RequiredWhen("SignedOff", false, AllowEmptyStrings = false, ErrorMessage = "Comments are required when rejecting a self assessment (when Sign-off is unchecked).")]
1818
public string? SupervisorComments { get; set; }
1919
public bool SignedOff { get; set; }
20+
[Required]
21+
[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.")]
22+
public bool OptionalCompetenciesChecked { get; set; }
23+
public int NumberOfSelfAssessedOptionalCompetencies { get; set; }
2024
}
2125
}

DigitalLearningSolutions.Web/Views/Supervisor/SignOffProfileAssessment.cshtml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@
5555
</p>
5656
</nav>
5757
}
58-
58+
@if (errorHasOccurred)
59+
{
60+
<vc:error-summary order-of-property-names="@(new[] {nameof(Model.OptionalCompetenciesChecked) })" />
61+
}
5962
<details class="nhsuk-details nhsuk-expander">
6063
<summary class="nhsuk-details__summary">
6164
<h1 class="nhsuk-details__summary-text nhsuk-u-margin-bottom-0">
@@ -170,6 +173,7 @@
170173
</h2>
171174
</legend>
172175
<input type="hidden" asp-for="CandidateAssessmentSupervisorVerificationId" />
176+
<input type="hidden" asp-for="NumberOfSelfAssessedOptionalCompetencies" />
173177
<nhs-form-group nhs-validation-for="SupervisorComments">
174178
<vc:text-area asp-for="SupervisorComments" character-count="null" label="@(Model.SelfAssessmentResultSummary.ReviewerCommentsLabel == null ? "Reviewer comments": Model.SelfAssessmentResultSummary.ReviewerCommentsLabel.ToString())" rows="5" css-class="" hint-text="" populate-with-current-value="true" spell-check="false"></vc:text-area>
175179
</nhs-form-group>
@@ -201,7 +205,18 @@
201205
<span asp-validation-for="SignedOff" class="text-danger"></span>
202206
</div>
203207
</nhs-form-group>
204-
</fieldset>
208+
@if (Model.NumberOfSelfAssessedOptionalCompetencies > 0)
209+
{
210+
<nhs-form-group nhs-validation-for="OptionalCompetenciesChecked">
211+
<div class="nhsuk-checkboxes__item">
212+
<input class="nhsuk-checkboxes__input" id="optional-competencies" name="OptionalCompetenciesChecked" asp-for="OptionalCompetenciesChecked" type="checkbox">
213+
<label class="nhsuk-label nhsuk-checkboxes__label" for="optional-competencies">
214+
I have reviewed the optional competencies included in this self assessment and confirm them to be appropriate to the learners role.
215+
</label>
216+
</div>
217+
</nhs-form-group>
218+
}
219+
</fieldset>
205220
<button class="nhsuk-button nhsuk-u-margin-bottom-0" type="submit">
206221
Submit
207222
</button>

0 commit comments

Comments
 (0)