Skip to content

Commit e82163a

Browse files
committed
Implements manage optional competency learner prompt form
1 parent dba4e03 commit e82163a

File tree

8 files changed

+133
-13
lines changed

8 files changed

+133
-13
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ public void UpdateMinimumOptionalCompetencies(int selfAssessmentId, int minimumO
915915
@"UPDATE SelfAssessments
916916
SET
917917
[MinimumOptionalCompetencies] = @minimumOptionalCompetecies
918-
WHERE id = @selfAssessmentId AND MinimumOptionalCompetencies <> @minimumOptionalCompetecies;"
918+
WHERE id = @selfAssessmentId AND ISNULL(MinimumOptionalCompetencies, 0) <> @minimumOptionalCompetecies;"
919919
,
920920
new { selfAssessmentId, minimumOptionalCompetecies }
921921
);
@@ -926,7 +926,7 @@ public void UpdateManageOptionalCompetenciesPrompt(int selfAssessmentId, string
926926
@"UPDATE SelfAssessments
927927
SET
928928
[ManageOptionalCompetenciesPrompt] = @manageOptionalCompetenciesPrompt
929-
WHERE id = @selfAssessmentId AND ManageOptionalCompetenciesPrompt <> @manageOptionalCompetenciesPrompt;"
929+
WHERE id = @selfAssessmentId AND ISNULL(ManageOptionalCompetenciesPrompt, '') <> @manageOptionalCompetenciesPrompt;"
930930
,
931931
new { selfAssessmentId, manageOptionalCompetenciesPrompt }
932932
);

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ public IActionResult SelectOptionalCompetencies(SelectOptionalCompetenciesFormDa
738738
return View("SelectOptionalCompetencies", viewModel);
739739
}
740740
competencyAssessmentService.UpdateOptionalCompetenciesInAssessment(model.ID, model.GroupIds ?? [], model.SelectedCompetencyIds ?? []);
741-
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
741+
return RedirectToAction("ManageOptionalCompetencies", new { competencyAssessmentId = model.ID });
742742
}
743743
[HttpGet]
744744
[Route("/CompetencyAssessments/{competencyAssessmentId}/Competencies/Optional/SetMinimum")]
@@ -763,8 +763,34 @@ public IActionResult SetMinimumOptionalCompetencies(SetMinimumOptionalCompetenci
763763
return View("SetMinimumOptionalCompetencies", viewModel);
764764
}
765765
competencyAssessmentService.UpdateMinimumOptionalCompetencies(model.ID, model.MinimumOptionalCompetencies ?? 0);
766-
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
766+
return RedirectToAction("ManageOptionalCompetencies", new { competencyAssessmentId = model.ID });
767+
}
768+
[HttpGet]
769+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Competencies/Optional/LearnerPrompt")]
770+
public IActionResult SetOptionalCompetencyLearnerPrompt(int competencyAssessmentId)
771+
{
772+
var adminId = GetAdminID();
773+
var competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
774+
var competencies = competencyAssessmentService.GetCompetenciesForCompetencyAssessment(competencyAssessmentId);
775+
var viewModel = new SetOptionalCompetencyLearnerPromptViewModel(competencyAssessmentBase, competencies);
776+
return View("SetOptionalCompetencyLearnerPrompt", viewModel);
777+
}
778+
[HttpPost]
779+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Competencies/Optional/LearnerPrompt")]
780+
public IActionResult SetOptionalCompetencyLearnerPrompt(SetOptionalCompetencyLearnerPromptFormData model)
781+
{
782+
if (!ModelState.IsValid)
783+
{
784+
var adminId = GetAdminID();
785+
var competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(model.ID, adminId);
786+
var competencies = competencyAssessmentService.GetCompetenciesForCompetencyAssessment(model.ID);
787+
var viewModel = new SetOptionalCompetencyLearnerPromptViewModel(competencyAssessmentBase, competencies);
788+
return View("SetOptionalCompetencyLearnerPrompt", viewModel);
789+
}
790+
competencyAssessmentService.UpdateManageOptionalCompetenciesPrompt(model.ID, model.ManageOptionalCompetenciesPrompt);
791+
return RedirectToAction("ManageOptionalCompetencies", new { competencyAssessmentId = model.ID });
767792
}
793+
768794
[Route("/CompetencyAssessments/Framework/{frameworkId}/{competencyAssessmentId}/Features")]
769795
public IActionResult CompetencyAssessmentFeatures(int competencyAssessmentId, int? frameworkId = null)
770796
{

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using DigitalLearningSolutions.Data.DataServices;
22
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
33
using System.Collections.Generic;
4-
using static DigitalLearningSolutions.Web.Helpers.SanitizerHelper;
4+
using DigitalLearningSolutions.Web.Helpers;
55

66
namespace DigitalLearningSolutions.Web.Services
77
{
@@ -305,7 +305,11 @@ public void UpdateMinimumOptionalCompetencies(int selfAssessmentId, int minimumO
305305
}
306306
public void UpdateManageOptionalCompetenciesPrompt(int selfAssessmentId, string manageOptionalCompetenciesPrompt)
307307
{
308-
competencyAssessmentDataService.UpdateManageOptionalCompetenciesPrompt(selfAssessmentId, SanitizeHtmlData(manageOptionalCompetenciesPrompt));
308+
if (StringHelper.StripHtmlTags(manageOptionalCompetenciesPrompt) == "")
309+
{
310+
manageOptionalCompetenciesPrompt = null;
311+
}
312+
competencyAssessmentDataService.UpdateManageOptionalCompetenciesPrompt(selfAssessmentId, SanitizerHelper.SanitizeHtmlData(manageOptionalCompetenciesPrompt));
309313
}
310314
}
311315
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using DigitalLearningSolutions.Web.Helpers;
2+
3+
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
4+
{
5+
public class SetOptionalCompetencyLearnerPromptFormData
6+
{
7+
8+
public string? ManageOptionalCompetenciesPrompt { get; set; }
9+
public int ID { get; set; }
10+
}
11+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
2+
{
3+
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
4+
using DigitalLearningSolutions.Web.Helpers;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
8+
public class SetOptionalCompetencyLearnerPromptViewModel : SetOptionalCompetencyLearnerPromptFormData
9+
{
10+
public SetOptionalCompetencyLearnerPromptViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<Competency> competencies)
11+
{
12+
ID = competencyAssessmentBase.ID;
13+
CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
14+
ManageOptionalCompetenciesPrompt = competencyAssessmentBase.ManageOptionalCompetenciesPrompt;
15+
UserRole = competencyAssessmentBase.UserRole;
16+
VocabularySingular = FrameworkVocabularyHelper.VocabularySingular(competencyAssessmentBase.Vocabulary);
17+
VocabularyPlural = FrameworkVocabularyHelper.VocabularyPlural(competencyAssessmentBase.Vocabulary);
18+
}
19+
public string CompetencyAssessmentName { get; set; }
20+
public int UserRole { get; set; }
21+
public string VocabularySingular { get; set; }
22+
public string VocabularyPlural { get; set; }
23+
}
24+
}

DigitalLearningSolutions.Web/Views/CompetencyAssessments/ManageOptionalCompetencies.cshtml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@
7272
</div>
7373
<div class="nhsuk-summary-list__row">
7474
<dt class="nhsuk-summary-list__key">
75-
Optional @Model.VocabularySingular.ToLower() learner guidance
75+
Optional @Model.VocabularySingular.ToLower() learner prompt
7676
</dt>
7777
<dd class="nhsuk-summary-list__value">
78-
@Html.Raw(Model.ManageOptionalCompetenciesPrompt == null ? "No guidance text specified" : Model.ManageOptionalCompetenciesPrompt.ToString())
78+
@Html.Raw(Model.ManageOptionalCompetenciesPrompt == null ? "No learner prompt specified" : Model.ManageOptionalCompetenciesPrompt.ToString())
7979
</dd>
8080
<dd class="nhsuk-summary-list__actions">
81-
<a class="nhsuk-link" asp-route-competencyAssessmentId="@Model.ID" asp-action="SetOptionalCompetenciesPrompt">Change<span class="nhsuk-u-visually-hidden"> learner guidance</span></a>
81+
<a class="nhsuk-link" asp-route-competencyAssessmentId="@Model.ID" asp-action="SetOptionalCompetencyLearnerPrompt">Change<span class="nhsuk-u-visually-hidden"> learner prompt</span></a>
8282
</dd>
8383
</div>
8484
}

DigitalLearningSolutions.Web/Views/CompetencyAssessments/SetMinimumOptionalCompetencies.cshtml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
22
@model SetMinimumOptionalCompetenciesViewModel;
33
@{
4-
ViewData["Title"] = "Select Optional Competencies";
4+
ViewData["Title"] = "Set Minimum Optional Competencies";
55
ViewData["Application"] = "Framework Service";
66
}
77
<link rel="stylesheet" href="@Url.Content("~/css/frameworks/frameworksShared.css")" asp-append-version="true">
@@ -52,6 +52,3 @@
5252
Cancel
5353
</a>
5454
</div>
55-
@section scripts {
56-
<script src="@Url.Content("~/js/frameworks/selectoptionalcompetencies.js")" asp-append-version="true"></script>
57-
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
@using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
2+
@model SetOptionalCompetencyLearnerPromptViewModel;
3+
@{
4+
ViewData["Title"] = "Set Optional Competencies Learner Prompt";
5+
ViewData["Application"] = "Framework Service";
6+
}
7+
<link rel="stylesheet" href="@Url.Content("~/css/jodit.css")" asp-append-version="true">
8+
<link rel="stylesheet" href="@Url.Content("~/css/frameworks/frameworksShared.css")" asp-append-version="true">
9+
@section NavMenuItems {
10+
<partial name="~/Views/Frameworks/Shared/_NavMenuItems.cshtml" />
11+
}
12+
13+
@section NavBreadcrumbs {
14+
<nav class="nhsuk-breadcrumb" aria-label="Breadcrumb">
15+
<div class="nhsuk-width-container">
16+
<ol class="nhsuk-breadcrumb__list">
17+
<li class="nhsuk-breadcrumb__item"><a class="nhsuk-breadcrumb__link trigger-loader" asp-action="ViewCompetencyAssessments" asp-route-tabname="Mine">Competency Assessments</a></li>
18+
<li class="nhsuk-breadcrumb__item"><a class="nhsuk-breadcrumb__link trigger-loader" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">Manage Competency Assessment</a></li>
19+
<li class="nhsuk-breadcrumb__item">Optional Competencies</li>
20+
</ol>
21+
<p class="nhsuk-breadcrumb__back"><a class="nhsuk-breadcrumb__backlink" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">Back to manage competency assessment</a></p>
22+
</div>
23+
</nav>
24+
}
25+
<h1>Optional @Model.VocabularyPlural.ToLower() learner prompt</h1>
26+
27+
<p class="nhsuk-lede-text">
28+
Provide an optional prompt to help learners choose the right optional @Model.VocabularyPlural.ToLower() to include in their @Model.CompetencyAssessmentName self assessment.
29+
</p>
30+
<form method="post" asp-action="SetOptionalCompetencyLearnerPrompt">
31+
<nhs-form-group nhs-validation-for="ManageOptionalCompetenciesPrompt">
32+
<vc:text-area asp-for="ManageOptionalCompetenciesPrompt"
33+
character-count="null"
34+
label="Set optional @Model.VocabularyPlural.ToLower()"
35+
rows="5"
36+
css-class="html-editor"
37+
hint-text="This text will be displayed above the optional @Model.VocabularyPlural.ToLower() list to help the learner to choose them."
38+
populate-with-current-value="true"
39+
spell-check="false" />
40+
<span nhs-validation-for="ManageOptionalCompetenciesPrompt"></span>
41+
</nhs-form-group>
42+
<input type="hidden" asp-for="ID" />
43+
<button class="nhsuk-button" type="submit">
44+
Save
45+
</button>
46+
</form>
47+
48+
<div class="nhsuk-back-link">
49+
<a class="nhsuk-back-link__link" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">
50+
<svg class="nhsuk-icon nhsuk-icon__chevron-left" focusable='false' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
51+
<path d="M13.41 12l5.3-5.29a1 1 0 1 0-1.42-1.42L12 10.59l-5.29-5.3a1 1 0 0 0-1.42 1.42l5.3 5.29-5.3 5.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l5.29-5.3 5.29 5.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z"></path>
52+
</svg>
53+
Cancel
54+
</a>
55+
</div>
56+
@section scripts {
57+
<script src="@Url.Content("~/js/frameworks/htmleditor.js")" asp-append-version="true"></script>
58+
}

0 commit comments

Comments
 (0)