Skip to content

Commit 6eb251c

Browse files
committed
TD-5307 Sets up post action and services for assessment frameworks
1 parent 40875a2 commit 6eb251c

File tree

6 files changed

+120
-10
lines changed

6 files changed

+120
-10
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,16 @@ WHERE NOT EXISTS (SELECT 1 FROM SelfAssessmentFrameworks WHERE SelfAssessmentId
334334
new { adminId, selfAssessmentId, frameworkId }
335335
);
336336
if (numberOfAffectedRows < 1)
337+
{
338+
numberOfAffectedRows = connection.Execute(
339+
@"UPDATE SelfAssessmentFrameworks
340+
SET @selfAssessmentId, @frameworkId, @adminId
341+
WHERE SelfAssessmentId = @selfAssessmentId AND FrameworkId = @frameworkId"
342+
,
343+
new { adminId, selfAssessmentId, frameworkId }
344+
);
345+
}
346+
if (numberOfAffectedRows < 1)
337347
{
338348
logger.LogWarning(
339349
"Not inserting SelfAssessmentFrameworks record as db insert failed. " +

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,5 +409,33 @@ public IActionResult SelectFrameworkSources(int competencyAssessmentId)
409409
var model = new SelectFrameworkSourcesViewModel(competencyAssessmentBase, frameworks, selectedFrameworks, competencyAssessmentTaskStatus.FrameworkLinksTaskStatus);
410410
return View(model);
411411
}
412+
[HttpPost]
413+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Frameworks/")]
414+
public IActionResult SelectFrameworkSources(SelectFrameworkSourcesFormData model)
415+
{
416+
var adminId = GetAdminID();
417+
var competencyAssessmentId = model.CompetencyAssessmentId;
418+
if (!ModelState.IsValid)
419+
{
420+
421+
var frameworks = frameworkService.GetAllFrameworks(adminId);
422+
var competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
423+
if (competencyAssessmentBase == null)
424+
{
425+
logger.LogWarning($"Failed to load Vocabulary page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}");
426+
return StatusCode(500);
427+
}
428+
if (competencyAssessmentBase.UserRole < 2)
429+
{
430+
return StatusCode(403);
431+
}
432+
var selectedFrameworks = competencyAssessmentService.GetLinkedFrameworkIds(competencyAssessmentId);
433+
var competencyAssessmentTaskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, null);
434+
var viewModel = new SelectFrameworkSourcesViewModel(competencyAssessmentBase, frameworks, selectedFrameworks, competencyAssessmentTaskStatus.FrameworkLinksTaskStatus);
435+
return View("SelectFrameworkSources", viewModel);
436+
}
437+
competencyAssessmentService.InsertSelfAssessmentFramework(adminId, competencyAssessmentId, model.FrameworkId);
438+
return RedirectToAction("SelectFrameworkSources", new { competencyAssessmentId });
439+
}
412440
}
413441
}

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public interface ICompetencyAssessmentService
3737

3838
//INSERT DATA
3939
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName, int? frameworkId);
40+
bool InsertSelfAssessmentFramework(int adminId, int assessmentId, int frameworkId);
4041
int[] GetLinkedFrameworkIds(int assessmentId);
4142
}
4243
public class CompetencyAssessmentService : ICompetencyAssessmentService
@@ -155,5 +156,10 @@ public int[] GetLinkedFrameworkIds(int assessmentId)
155156
{
156157
return competencyAssessmentDataService.GetLinkedFrameworkIds(assessmentId);
157158
}
159+
160+
public bool InsertSelfAssessmentFramework(int adminId, int assessmentId, int frameworkId)
161+
{
162+
return competencyAssessmentDataService.InsertSelfAssessmentFramework(adminId, assessmentId, frameworkId);
163+
}
158164
}
159165
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
2+
{
3+
using System.ComponentModel.DataAnnotations;
4+
public class SelectFrameworkSourcesFormData
5+
{
6+
[Required]
7+
public int[] SelectedFrameworkIds { get; set; }
8+
public int CompetencyAssessmentId { get; set; }
9+
}
10+
}

DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/SelectFrameworkSourcesViewModel.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
1-
using AngleSharp.Css;
2-
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
1+
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
32
using DigitalLearningSolutions.Data.Models.Frameworks;
4-
using DocumentFormat.OpenXml.Office2010.Excel;
53
using System.Collections.Generic;
6-
using System.Threading.Tasks;
4+
using System.Linq;
75

86
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
97
{
10-
public class SelectFrameworkSourcesViewModel
8+
public class SelectFrameworkSourcesViewModel : SelectFrameworkSourcesFormData
119
{
1210
public SelectFrameworkSourcesViewModel() { }
13-
public SelectFrameworkSourcesViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<BrandedFramework> frameworks, int[] selectedFrameworks, bool? taskStatus)
11+
public SelectFrameworkSourcesViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<BrandedFramework> frameworks, int[] selectedFrameworksIds, bool? taskStatus)
1412
{
1513
ID = competencyAssessmentBase.ID;
1614
CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
1715
UserRole = competencyAssessmentBase.UserRole;
1816
TaskStatus = taskStatus;
19-
Frameworks = frameworks;
20-
SelectedFrameworks = selectedFrameworks;
17+
Frameworks = frameworks.OrderBy(f => f.FrameworkName);
18+
SelectedFrameworks = [.. frameworks.Where(f => selectedFrameworksIds.Contains(f.ID))];
2119
}
2220
public IEnumerable<BrandedFramework> Frameworks { get; set; }
23-
public int[] SelectedFrameworks { get; set; }
21+
public IEnumerable<BrandedFramework> SelectedFrameworks { get; set; }
2422
public IEnumerable<NRPRoles> Roles { get; set; }
2523
public int ID { get; set; }
2624
public string CompetencyAssessmentName { get; set; }

DigitalLearningSolutions.Web/Views/CompetencyAssessments/SelectFrameworkSources.cshtml

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="stylesheet" href="@Url.Content("~/css/jodit.css")" asp-append-version="true">
88
<link rel="stylesheet" href="@Url.Content("~/css/frameworks/frameworksShared.css")" asp-append-version="true">
99
@section NavMenuItems {
10-
<partial name="~/Views/Frameworks/Shared/_NavMenuItems.cshtml" />
10+
<partial name="~/Views/Frameworks/Shared/_NavMenuItems.cshtml" />
1111
}
1212

1313
@section NavBreadcrumbs {
@@ -24,3 +24,61 @@
2424
}
2525

2626
<h1>Select framework sources for @Model.CompetencyAssessmentName</h1>
27+
@if (Model.SelectedFrameworks.Count() > 0)
28+
{
29+
<dl class="nhsuk-summary-list">
30+
<div class="nhsuk-summary-list__row">
31+
<dt class="nhsuk-summary-list__key">
32+
Primary framework
33+
</dt>
34+
<dd class="nhsuk-summary-list__value">
35+
@Model.SelectedFrameworks.First().FrameworkName
36+
</dd>
37+
<dd class="nhsuk-summary-list__actions">
38+
<a asp-action="RemoveFramework" asp-route-Id="@Model.SelectedFrameworks.First().ID">
39+
Remove<span class="nhsuk-u-visually-hidden"> @Model.SelectedFrameworks.First().FrameworkName</span>
40+
</a>
41+
</dd>
42+
</div>
43+
@if (Model.SelectedFrameworks.Count() > 1)
44+
{
45+
for (int i = 1; i < Model.SelectedFrameworks.Count(); i++)
46+
{
47+
<div class="nhsuk-summary-list__row">
48+
<dt class="nhsuk-summary-list__key">
49+
Additional framework @i
50+
</dt>
51+
<dd class="nhsuk-summary-list__value">
52+
@Model.SelectedFrameworks.ElementAt(i).FrameworkName
53+
</dd>
54+
<dd class="nhsuk-summary-list__actions">
55+
<a asp-action="RemoveFramework" asp-route-Id="@Model.SelectedFrameworks.ElementAt(i).ID">
56+
Remove<span class="nhsuk-u-visually-hidden"> @Model.SelectedFrameworks.ElementAt(i).FrameworkName</span>
57+
</a>
58+
</dd>
59+
</div>
60+
}
61+
}
62+
</dl>
63+
}
64+
<form method="post">
65+
<div class="nhsuk-form-group">
66+
<fieldset class="nhsuk-fieldset">
67+
<legend class="nhsuk-fieldset__legend nhsuk-fieldset__legend--l">
68+
<h1 class="nhsuk-fieldset__heading">Add a framework source</h1>
69+
</legend>
70+
<div class="nhsuk-radios">
71+
@foreach(var framework in Model.Frameworks)
72+
{
73+
<div class="nhsuk-radios__item">
74+
<input class="nhsuk-radios__input" type="radio" id="[email protected]" asp-for="SelectedFrameworkIds" value="@framework.ID" />
75+
<label class="nhsuk-label nhsuk-radios__label" for="[email protected]">
76+
@framework.FrameworkName
77+
</label>
78+
</div>
79+
}
80+
</div>
81+
</fieldset>
82+
</div>
83+
<button class="nhsuk-button" type="submit">Add</button>
84+
</form>

0 commit comments

Comments
 (0)