Skip to content

Commit 0e9d1cf

Browse files
authored
Merge pull request #3128 from TechnologyEnhancedLearning/Develop/Features/TD-482-EditDescription
TD-482 edit assessment description
2 parents 17ee3c4 + eab0c2a commit 0e9d1cf

File tree

5 files changed

+152
-16
lines changed

5 files changed

+152
-16
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ int adminId
3838
);
3939
bool UpdateCompetencyAssessmentVocabulary(int competencyAssessmentId, int adminId, string vocabulary);
4040
bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string competencyAssessmentDescription);
41+
bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus);
4142
//INSERT DATA
4243
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName);
4344
bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId);
@@ -252,7 +253,7 @@ public bool UpdateCompetencyAssessmentBranding(
252253
int adminId
253254
)
254255
{
255-
if ((competencyAssessmentId < 1) | (brandId < 1) | (categoryId < 1) | (adminId < 1))
256+
if ((competencyAssessmentId < 1) | (brandId < 1) | (categoryId < 1) | (adminId < 1))
256257
{
257258
logger.LogWarning(
258259
$"Not updating competency assessment as it failed server side validation. competencyAssessmentId: {competencyAssessmentId}, brandId: {brandId}, categoryId: {categoryId}, AdminId: {adminId}"
@@ -347,7 +348,24 @@ FROM SelfAssessmentTaskStatus
347348
WHERE (SelfAssessmentId = @assessmentId)",
348349
new { assessmentId }
349350
).Single();
350-
351+
352+
}
353+
public bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus)
354+
{
355+
var numberOfAffectedRows = connection.Execute(
356+
@"UPDATE SelfAssessmentTaskStatus SET IntroductoryTextTaskStatus = @taskStatus
357+
WHERE SelfAssessmentId = @assessmentId",
358+
new { assessmentId, taskStatus }
359+
);
360+
if (numberOfAffectedRows < 1)
361+
{
362+
logger.LogWarning(
363+
"Not updating IntroductoryTextTaskStatus as db update failed. " +
364+
$"assessmentId: {assessmentId}, taskStatus: {taskStatus}"
365+
);
366+
return false;
367+
}
368+
return true;
351369
}
352370
}
353371
}

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,13 @@
55
using Microsoft.AspNetCore.Mvc;
66
using Microsoft.Extensions.Logging;
77
using DigitalLearningSolutions.Web.Extensions;
8-
using DigitalLearningSolutions.Data.Models.SessionData.CompetencyAssessments;
9-
using Microsoft.AspNetCore.Http;
10-
using System;
118
using System.Collections.Generic;
129
using DigitalLearningSolutions.Data.Enums;
1310
using DigitalLearningSolutions.Web.Attributes;
1411
using DigitalLearningSolutions.Web.Models.Enums;
1512

1613
public partial class CompetencyAssessmentsController
1714
{
18-
private const string CookieName = "DLSFrameworkService";
1915
[Route("/CompetencyAssessments/View/{tabname}/{page=1:int}")]
2016
[SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))]
2117
public IActionResult ViewCompetencyAssessments(string tabname, string? searchString = null,
@@ -208,10 +204,7 @@ public IActionResult CompetencyAssessmentProfessionalGroup(string actionName, in
208204
}
209205
else
210206
{
211-
SessionNewCompetencyAssessment sessionNewCompetencyAssessment = TempData.Peek<SessionNewCompetencyAssessment>();
212-
TempData.Set(sessionNewCompetencyAssessment);
213-
competencyAssessmentBase = sessionNewCompetencyAssessment.CompetencyAssessmentBase;
214-
TempData.Set(sessionNewCompetencyAssessment);
207+
competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
215208
}
216209
var professionalGroups = competencyAssessmentService.GetNRPProfessionalGroups();
217210
var model = new ProfessionalGroupViewModel()
@@ -237,9 +230,8 @@ public IActionResult SaveProfessionalGroup(CompetencyAssessmentBase competencyAs
237230
}
238231
if (actionName == "New")
239232
{
240-
SessionNewCompetencyAssessment sessionNewCompetencyAssessment = TempData.Peek<SessionNewCompetencyAssessment>();
241-
sessionNewCompetencyAssessment.CompetencyAssessmentBase = competencyAssessmentBase;
242-
TempData.Set(sessionNewCompetencyAssessment);
233+
//TO DO Store to self assessment
234+
243235
return RedirectToAction("CompetencyAssessmentSubGroup", "CompetencyAssessments", new { actionName });
244236
}
245237
else
@@ -264,5 +256,37 @@ public IActionResult CompetencyAssessmentSubGroup(string actionName, int compete
264256
{
265257
return View("SubGroup");
266258
}
259+
260+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Description/")]
261+
public IActionResult EditDescription(int competencyAssessmentId)
262+
{
263+
var adminId = GetAdminID();
264+
CompetencyAssessmentBase? competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
265+
if (competencyAssessmentBase == null)
266+
{
267+
logger.LogWarning($"Failed to load description page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}");
268+
return StatusCode(500);
269+
}
270+
if (competencyAssessmentBase.UserRole < 2)
271+
{
272+
return StatusCode(403);
273+
}
274+
var competencyAssessmentTaskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, null);
275+
var model = new EditDescriptionViewModel(competencyAssessmentBase, competencyAssessmentTaskStatus.IntroductoryTextTaskStatus);
276+
return View(model);
277+
}
278+
[HttpPost]
279+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Description/")]
280+
public IActionResult SaveDescription(EditDescriptionViewModel model)
281+
{
282+
if (!ModelState.IsValid)
283+
{
284+
return View("EditDescription", model);
285+
}
286+
var adminId = GetAdminID();
287+
var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentDescription(model.ID, adminId, model.Description);
288+
competencyAssessmentService.UpdateIntroductoryTextTaskStatus(model.ID, model.TaskStatus ?? false);
289+
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
290+
}
267291
}
268292
}

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ public interface ICompetencyAssessmentService
2323
bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName);
2424

2525
bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID);
26+
bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus);
2627

2728
//INSERT DATA
2829
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName, int? frameworkId);
29-
30+
bool UpdateCompetencyAssessmentDescription(int iD, int adminId, string description);
3031
}
3132
public class CompetencyAssessmentService : ICompetencyAssessmentService
3233
{
@@ -64,10 +65,11 @@ public IEnumerable<CompetencyAssessment> GetCompetencyAssessmentsForAdminId(int
6465
public int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName, int? frameworkId)
6566
{
6667
var assessmentId = competencyAssessmentDataService.InsertCompetencyAssessment(adminId, centreId, competencyAssessmentName);
67-
if(assessmentId > 0 && frameworkId != null)
68+
if (assessmentId > 0 && frameworkId != null)
6869
{
6970
var framework = frameworkDataService.GetBrandedFrameworkByFrameworkId((int)frameworkId, adminId);
70-
if (framework != null) {
71+
if (framework != null)
72+
{
7173
competencyAssessmentDataService.InsertSelfAssessmentFramework(adminId, assessmentId, framework.ID);
7274
competencyAssessmentDataService.UpdateCompetencyAssessmentDescription(adminId, assessmentId, framework.Description);
7375
competencyAssessmentDataService.UpdateCompetencyAssessmentBranding(assessmentId, (int)framework.BrandID, (int)framework.CategoryID, adminId);
@@ -90,5 +92,13 @@ public CompetencyAssessmentTaskStatus GetCompetencyAssessmentTaskStatus(int asse
9092
{
9193
return competencyAssessmentDataService.GetOrInsertAndReturnAssessmentTaskStatus(assessmentId, (frameworkId != null));
9294
}
95+
public bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string description)
96+
{
97+
return competencyAssessmentDataService.UpdateCompetencyAssessmentDescription(competencyAssessmentId, adminId, description);
98+
}
99+
public bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus)
100+
{
101+
return competencyAssessmentDataService.UpdateIntroductoryTextTaskStatus(assessmentId, taskStatus);
102+
}
93103
}
94104
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
2+
3+
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
4+
{
5+
public class EditDescriptionViewModel
6+
{
7+
public EditDescriptionViewModel() { }
8+
public EditDescriptionViewModel(CompetencyAssessmentBase competencyAssessmentBase, bool? taskStatus)
9+
{
10+
ID = competencyAssessmentBase.ID;
11+
CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
12+
Description = competencyAssessmentBase.Description;
13+
UserRole = competencyAssessmentBase.UserRole;
14+
TaskStatus = taskStatus;
15+
}
16+
public int ID { get; set; }
17+
public string CompetencyAssessmentName { get; set; } = string.Empty;
18+
public string? Description { get; set; }
19+
public int UserRole { get; set; }
20+
public bool? TaskStatus { get; set; }
21+
}
22+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
@using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
2+
@model EditDescriptionViewModel;
3+
@{
4+
ViewData["Title"] = "Edit Introductory Text";
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">Introductory text</li>
20+
</ol>
21+
<p class="nhsuk-breadcrumb__back"><a class="nhsuk-breadcrumb__backlink" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">Back to competency assessment detail</a></p>
22+
</div>
23+
</nav>
24+
}
25+
26+
<h1>Edit @Model.CompetencyAssessmentName introductory text</h1>
27+
<form method="post">
28+
@if (!ViewData.ModelState.IsValid)
29+
{
30+
<partial name="_ErrorSummary" />
31+
}
32+
<nhs-form-group nhs-validation-for="Description">
33+
<vc:text-area asp-for="Description"
34+
character-count="null"
35+
label="Introductory text"
36+
rows="5"
37+
css-class="html-editor"
38+
hint-text="The learner will see this text when they launch the assessment, it should tell them what the assessment covers, how to complete it and where to get more information"
39+
populate-with-current-value="true"
40+
spell-check="false" />
41+
</nhs-form-group>
42+
<nhs-form-group>
43+
<vc:single-checkbox asp-for="@nameof(Model.TaskStatus)" label="Mark this task as complete" hint-text="You will still be able to make changes after marking this task as complete."></vc:single-checkbox>
44+
</nhs-form-group>
45+
<input name="ID" type="hidden" asp-for="ID" />
46+
<input name="CompetencyAssessmentName" type="hidden" asp-for="CompetencyAssessmentName" />
47+
<input name="userRole" type="hidden" asp-for="UserRole" />
48+
<button class="nhsuk-button" type="submit">
49+
Save
50+
</button>
51+
<div class="nhsuk-back-link">
52+
<a class="nhsuk-back-link__link" asp-action="ManageCompetencyAssessment" asp-route-frameworkId="@Model.ID" asp-route-competencyAssessmentId="@Model.ID">
53+
<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">
54+
<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>
55+
</svg>
56+
Cancel
57+
</a>
58+
</div>
59+
</form>
60+
@section scripts {
61+
<script src="@Url.Content("~/js/frameworks/htmleditor.js")" asp-append-version="true"></script>
62+
}

0 commit comments

Comments
 (0)