Skip to content

Commit 1569e57

Browse files
committed
Implements frameworks summary to view selected competencies and selects competencies in add competencies view
1 parent 87c4db7 commit 1569e57

File tree

9 files changed

+91
-32
lines changed

9 files changed

+91
-32
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public interface ICompetencyAssessmentDataService
3636
int GetCompetencyCountByFrameworkId(int assessmentId, int frameworkId);
3737

3838
IEnumerable<Competency> GetCompetenciesForCompetencyAssessment(int competencyAssessmentId);
39-
IEnumerable<BaseFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId);
39+
IEnumerable<LinkedFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId);
40+
int[] GetLinkedFrameworkCompetencyIds(int competencyAssessmentId, int frameworkId);
4041

4142
//UPDATE DATA
4243
bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName);
@@ -652,9 +653,9 @@ FROM SelfAssessmentStructure AS sas INNER JOIN
652653
);
653654
}
654655

655-
public IEnumerable<BaseFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId)
656+
public IEnumerable<LinkedFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId)
656657
{
657-
return connection.Query<BaseFramework>(
658+
return connection.Query<LinkedFramework>(
658659
@"SELECT f.ID,
659660
FrameworkName,
660661
f.OwnerAdminID,
@@ -670,5 +671,17 @@ FROM SelfAssessmentFrameworks saf INNER JOIN
670671
ORDER BY f.FrameworkName", new { competencyAssessmentId }
671672
);
672673
}
674+
675+
public int[] GetLinkedFrameworkCompetencyIds(int competencyAssessmentId, int frameworkId)
676+
{
677+
return [.. connection.Query<int>(
678+
@"SELECT sas.CompetencyID
679+
FROM SelfAssessmentStructure AS sas INNER JOIN
680+
FrameworkCompetencies AS fc ON sas.CompetencyID = fc.CompetencyID
681+
WHERE (sas.SelfAssessmentID = @competencyAssessmentId) AND (fc.FrameworkID = @frameworkId)
682+
ORDER BY fc.Ordering",
683+
new { competencyAssessmentId, frameworkId}
684+
)];
685+
}
673686
}
674687
}

DigitalLearningSolutions.Data/Models/CompetencyAssessments/Competency.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using System.Threading.Tasks;
6-
7-
namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments
1+
namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments
82
{
93
public class Competency
104
{
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments
2+
{
3+
using DigitalLearningSolutions.Data.Models.Frameworks;
4+
public class LinkedFramework : BaseFramework
5+
{
6+
public int AssessmentFrameworkCompetencyCount { get; set; } = 0;
7+
}
8+
}

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,7 @@
1010
using DigitalLearningSolutions.Web.Models.Enums;
1111
using DigitalLearningSolutions.Web.Helpers;
1212
using System.Linq;
13-
using AspNetCoreGeneratedDocument;
1413
using Microsoft.AspNetCore.Mvc.Rendering;
15-
using DigitalLearningSolutions.Data.Models.Centres;
16-
using DigitalLearningSolutions.Data.Models.Frameworks;
17-
using Microsoft.CodeAnalysis.CSharp.Syntax;
18-
using DigitalLearningSolutions.Data.Models.Courses;
19-
using DigitalLearningSolutions.Web.Services;
20-
using DigitalLearningSolutions.Web.ViewModels.TrackingSystem.Delegates.GroupCourses;
2114

2215
public partial class CompetencyAssessmentsController
2316
{
@@ -486,6 +479,7 @@ public IActionResult ViewSelectedCompetencies(int competencyAssessmentId)
486479
{
487480

488481
var competencies = competencyAssessmentService.GetCompetenciesForCompetencyAssessment(competencyAssessmentId);
482+
var linkedFrameworks = competencyAssessmentService.GetLinkedFrameworksForCompetencyAssessment(competencyAssessmentId);
489483
if (!competencies.Any())
490484
{
491485
return RedirectToAction("AddCompetenciesSelectFramework", new { competencyAssessmentId });
@@ -501,7 +495,7 @@ public IActionResult ViewSelectedCompetencies(int competencyAssessmentId)
501495
{
502496
return StatusCode(403);
503497
}
504-
var model = new ViewSelectedCompetenciesViewModel(competencyAssessmentBase, competencies);
498+
var model = new ViewSelectedCompetenciesViewModel(competencyAssessmentBase, competencies, linkedFrameworks);
505499
return View(model);
506500
}
507501
[Route("/CompetencyAssessments/{competencyAssessmentId}/Competencies/Add/SelectFramework")]
@@ -561,6 +555,7 @@ public IActionResult AddCompetencies(int competencyAssessmentId, int frameworkId
561555
return StatusCode(403);
562556
}
563557
var framework = frameworkService.GetBaseFrameworkByFrameworkId(frameworkId, adminId);
558+
var selectedFrameworkCompetencies = competencyAssessmentService.GetLinkedFrameworkCompetencyIds(competencyAssessmentId, frameworkId);
564559
var groupedCompetencies = frameworkService.GetFrameworkCompetencyGroups(frameworkId);
565560
var ungroupedCompetencies = frameworkService.GetFrameworkCompetenciesUngrouped(frameworkId);
566561
var competencyIds = ungroupedCompetencies.Select(c => c.CompetencyID).ToArray();
@@ -574,7 +569,7 @@ public IActionResult AddCompetencies(int competencyAssessmentId, int frameworkId
574569
foreach (var competency in group.FrameworkCompetencies)
575570
competency.CompetencyFlags = competencyFlags.Where(f => f.CompetencyId == competency.CompetencyID);
576571
}
577-
var model = new AddCompetenciesViewModel(competencyAssessmentBase, groupedCompetencies, ungroupedCompetencies, frameworkId, framework.FrameworkName);
572+
var model = new AddCompetenciesViewModel(competencyAssessmentBase, groupedCompetencies, ungroupedCompetencies, frameworkId, framework.FrameworkName, selectedFrameworkCompetencies);
578573
return View(model);
579574
}
580575
}

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ public interface ICompetencyAssessmentService
2929
int? GetPrimaryLinkedFrameworkId(int assessmentId);
3030

3131
IEnumerable<Competency> GetCompetenciesForCompetencyAssessment(int competencyAssessmentId);
32-
IEnumerable<BaseFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId);
32+
IEnumerable<LinkedFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId);
3333

3434
bool RemoveSelfAssessmentFramework(int assessmentId, int frameworkId, int adminId);
3535

36+
int[] GetLinkedFrameworkCompetencyIds(int competencyAssessmentId, int frameworkId);
37+
3638
//UPDATE DATA
3739
bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName);
3840
bool UpdateCompetencyRoleProfileLinks(int competencyAssessmentId, int adminId, int? professionalGroupId, int? subGroupId, int? roleId);
@@ -227,9 +229,14 @@ public IEnumerable<Competency> GetCompetenciesForCompetencyAssessment(int compet
227229
return competencyAssessmentDataService.GetCompetenciesForCompetencyAssessment(competencyAssessmentId);
228230
}
229231

230-
public IEnumerable<BaseFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId)
232+
public IEnumerable<LinkedFramework> GetLinkedFrameworksForCompetencyAssessment(int competencyAssessmentId)
231233
{
232234
return competencyAssessmentDataService.GetLinkedFrameworksForCompetencyAssessment(competencyAssessmentId);
233235
}
236+
237+
public int[] GetLinkedFrameworkCompetencyIds(int competencyAssessmentId, int frameworkId)
238+
{
239+
return competencyAssessmentDataService.GetLinkedFrameworkCompetencyIds(competencyAssessmentId, frameworkId);
240+
}
234241
}
235242
}

DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/AddCompetenciesViewModel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using System.Collections.Generic;
77
public class AddCompetenciesViewModel
88
{
9-
public AddCompetenciesViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<FrameworkCompetencyGroup> groupedCompetencies, IEnumerable<FrameworkCompetency> ungroupedCompetencies, int frameworkId, string? frameworkName)
9+
public AddCompetenciesViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<FrameworkCompetencyGroup> groupedCompetencies, IEnumerable<FrameworkCompetency> ungroupedCompetencies, int frameworkId, string? frameworkName, int[] selectedFrameworkCompetencies)
1010
{
1111
ID = competencyAssessmentBase.ID;
1212
CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
@@ -17,6 +17,7 @@ public AddCompetenciesViewModel(CompetencyAssessmentBase competencyAssessmentBas
1717
UngroupedCompetencies = ungroupedCompetencies;
1818
FrameworkId = frameworkId;
1919
FrameworkName = frameworkName;
20+
SelectedCompetencyIds = selectedFrameworkCompetencies;
2021
}
2122
public int ID { get; set; }
2223
public string CompetencyAssessmentName { get; set; }
@@ -25,7 +26,7 @@ public AddCompetenciesViewModel(CompetencyAssessmentBase competencyAssessmentBas
2526
public string VocabularyPlural { get; set; }
2627
public IEnumerable<FrameworkCompetencyGroup> GroupedCompetencies { get; set; }
2728
public IEnumerable<FrameworkCompetency> UngroupedCompetencies { get; set; }
28-
public List<int> SelectedCompetencyIds { get; set; }
29+
public int[] SelectedCompetencyIds { get; set; }
2930
public int FrameworkId { get; set; }
3031
public string? FrameworkName { get; set; }
3132
}
Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,46 @@
11
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
22
using DigitalLearningSolutions.Web.Helpers;
33
using System.Collections.Generic;
4+
using System.Linq;
45

56
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
67
{
8+
79
public class ViewSelectedCompetenciesViewModel
810
{
911
public ViewSelectedCompetenciesViewModel() { }
10-
public ViewSelectedCompetenciesViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<Competency> competencies)
12+
public ViewSelectedCompetenciesViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable<Competency> competencies, IEnumerable<LinkedFramework> linkedFrameworks)
1113
{
1214
ID = competencyAssessmentBase.ID;
1315
CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
1416
UserRole = competencyAssessmentBase.UserRole;
1517
Competencies = competencies;
1618
VocabularySingular = FrameworkVocabularyHelper.VocabularySingular(competencyAssessmentBase.Vocabulary);
1719
VocabularyPlural = FrameworkVocabularyHelper.VocabularyPlural(competencyAssessmentBase.Vocabulary);
20+
var competencyCounts = competencies
21+
.GroupBy(c => c.FrameworkId)
22+
.ToDictionary(g => g.Key, g => g.Count());
23+
// Populate LinkedFrameworks with the relevant count
24+
foreach (var framework in linkedFrameworks)
25+
{
26+
if (competencyCounts.TryGetValue(framework.ID, out var count))
27+
{
28+
framework.AssessmentFrameworkCompetencyCount = count;
29+
}
30+
else
31+
{
32+
framework.AssessmentFrameworkCompetencyCount = 0;
33+
}
34+
}
35+
LinkedFrameworks = linkedFrameworks;
1836
}
1937
public int ID { get; set; }
38+
2039
public string CompetencyAssessmentName { get; set; }
2140
public int UserRole { get; set; }
2241
public string VocabularySingular { get; set; }
2342
public string VocabularyPlural { get; set; }
24-
25-
public IEnumerable<Competency> Competencies;
43+
public IEnumerable<Competency> Competencies { get; set; }
44+
public IEnumerable<LinkedFramework> LinkedFrameworks { get; set; }
2645
}
2746
}

DigitalLearningSolutions.Web/Views/CompetencyAssessments/AddCompetencies.cshtml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@
2222
</nav>
2323
}
2424

25-
<h1>Add @Model.VocabularyPlural.ToLower() to assessment: @Model.CompetencyAssessmentName</h1>
2625
<form method="post">
2726
<nhs-form-group nhs-validation-for="SelectedCompetencyIds">
2827
<fieldset class="nhsuk-fieldset">
2928
<legend class="nhsuk-fieldset__legend">
30-
<h2>
29+
<h1>
3130
Select @Model.VocabularyPlural.ToLower() to include from @Model.FrameworkName
32-
</h2>
31+
</h1>
3332
</legend>
3433

3534
@if (Model.GroupedCompetencies.Count() > 0)

DigitalLearningSolutions.Web/Views/CompetencyAssessments/ViewSelectedCompetencies.cshtml

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,26 @@
2222
</nav>
2323
}
2424
<h1>@Model.VocabularyPlural to assess for @Model.CompetencyAssessmentName</h1>
25-
25+
<h2>Linked frameworks</h2>
26+
<dl class="nhsuk-summary-list">
27+
@foreach(var framework in Model.LinkedFrameworks)
28+
{
29+
<div class="nhsuk-summary-list__row">
30+
<dt class="nhsuk-summary-list__key">
31+
Framework
32+
</dt>
33+
<dd class="nhsuk-summary-list__value">
34+
@framework.FrameworkName (@framework.AssessmentFrameworkCompetencyCount @Model.VocabularyPlural.ToLower())
35+
</dd>
36+
<dd class="nhsuk-summary-list__actions">
37+
<a asp-action="AddCompetencies" asp-route-competencyAssessmentId="@Model.ID" asp-route-frameworkId="@framework.ID">
38+
Manage<span class="nhsuk-u-visually-hidden"> @Model.VocabularyPlural.ToLower()</span>
39+
</a>
40+
</dd>
41+
</div>
42+
}
43+
</dl>
44+
<h2>@Model.VocabularyPlural</h2>
2645
@foreach (var group in Model.Competencies
2746
.GroupBy(c => new { c.FrameworkId, c.FrameworkName, c.GroupId, c.GroupName }))
2847
{
@@ -53,14 +72,18 @@
5372
@* <partial name="_CompetencyFlags" model="Model.CompetencyFlags" /> *@
5473
@if (competency.CompetencyDescription != null)
5574
{
56-
@competency.CompetencyName
75+
<p class="nhsuk-lede-text">
76+
@competency.CompetencyName
77+
</p>
5778
<p class="nhsuk-body">
5879
@(Html.Raw(competency.CompetencyDescription))
5980
</p>
6081
}
6182
else
6283
{
63-
@competency.CompetencyName
84+
<p class="nhsuk-lede-text">
85+
@competency.CompetencyName
86+
</p>
6487
}
6588

6689
<div class="nhsuk-grid-row">

0 commit comments

Comments
 (0)