Skip to content

Commit b5d1f4c

Browse files
committed
Fixes loading of data into add competencies from framework view and updates task status on post
1 parent 42f12df commit b5d1f4c

File tree

5 files changed

+77
-18
lines changed

5 files changed

+77
-18
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
namespace DigitalLearningSolutions.Data.DataServices
22
{
3-
using System;
4-
using System.Collections.Generic;
5-
using System.Data;
6-
using System.Linq;
73
using Dapper;
84
using DigitalLearningSolutions.Data.Models.Common;
95
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
106
using DigitalLearningSolutions.Data.Models.Frameworks;
117
using DigitalLearningSolutions.Data.Models.Frameworks.Import;
128
using DocumentFormat.OpenXml.Wordprocessing;
139
using Microsoft.Extensions.Logging;
10+
using System;
11+
using System.Collections.Generic;
12+
using System.Data;
13+
using System.Linq;
14+
using System.Threading.Tasks;
1415

1516
public interface ICompetencyAssessmentDataService
1617
{
@@ -64,11 +65,12 @@ int categoryId
6465
//INSERT DATA
6566
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName);
6667
bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId);
68+
bool InsertCompetenciesIntoAssessmentFromFramework(int[] selectedCompetencyIds, int frameworkId, int competencyAssessmentId);
6769

6870
//DELETE DATA
6971
bool RemoveFrameworkCompetenciesFromAssessment(int competencyAssessmentId, int frameworkId);
70-
71-
}
72+
bool RemoveCompetencyFromAssessment(int competencyAssessmentId, int competencyId);
73+
}
7274

7375
public class CompetencyAssessmentDataService : ICompetencyAssessmentDataService
7476
{
@@ -683,5 +685,52 @@ FROM SelfAssessmentStructure AS sas INNER JOIN
683685
new { competencyAssessmentId, frameworkId}
684686
)];
685687
}
688+
689+
public bool InsertCompetenciesIntoAssessmentFromFramework(int[] selectedCompetencyIds, int frameworkId, int competencyAssessmentId)
690+
{
691+
var currentMaxOrdering = connection.ExecuteScalar<int>(
692+
@"SELECT ISNULL(MAX(Ordering), 0) FROM SelfAssessmentStructure WHERE SelfAssessmentID = @competencyAssessmentId",
693+
new { competencyAssessmentId }
694+
);
695+
var numberOfAffectedRows = connection.Execute(
696+
@"INSERT INTO SelfAssessmentStructure (SelfAssessmentID, CompetencyID, Ordering, CompetencyGroupID)
697+
SELECT
698+
@competencyAssessmentId,
699+
FC.CompetencyID,
700+
ROW_NUMBER() OVER (ORDER BY FCG.Ordering, FC.Ordering) + @currentMaxOrdering,
701+
FCG.CompetencyGroupID
702+
FROM FrameworkCompetencies AS FC
703+
INNER JOIN FrameworkCompetencyGroups AS FCG ON FC.FrameworkCompetencyGroupID = FCG.ID
704+
WHERE FC.FrameworkID = @frameworkId
705+
AND FC.CompetencyID IN @selectedCompetencyIds AND FC.CompetencyID NOT IN (SELECT CompetencyID FROM SelfAssessmentStructure WHERE SelfAssessmentID = @competencyAssessmentId)",
706+
new { selectedCompetencyIds, frameworkId, competencyAssessmentId, currentMaxOrdering }
707+
);
708+
if (numberOfAffectedRows < 1)
709+
{
710+
logger.LogWarning(
711+
"Not inserting competencies into assessment as db update failed. " +
712+
$"assessmentId: {competencyAssessmentId}, frameworkId: {frameworkId}, selectedCompetencyIds: {selectedCompetencyIds}"
713+
);
714+
return false;
715+
}
716+
return true;
717+
}
718+
public bool RemoveCompetencyFromAssessment(int competencyAssessmentId, int competencyId)
719+
{
720+
var numberOfAffectedRows = connection.Execute(
721+
@"DELETE FROM SelfAssessmentStructure
722+
WHERE SelfAssessmentID = @competencyAssessmentId AND CompetencyID = @competencyId",
723+
new { competencyAssessmentId, competencyId }
724+
);
725+
if (numberOfAffectedRows < 1)
726+
{
727+
logger.LogWarning(
728+
"Not removing competency from assessment as db update failed. " +
729+
$"assessmentId: {competencyAssessmentId}, competencyId: {competencyId}"
730+
);
731+
return false;
732+
}
733+
return true;
734+
}
686735
}
687736
}

DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -868,13 +868,13 @@ FROM SelfAssessmentStructure
868868
WHERE (SelfAssessmentID = {assessmentId}))"
869869
: string.Empty;
870870
var result = connection.Query<FrameworkCompetencyGroup, FrameworkCompetency, FrameworkCompetencyGroup>(
871-
@$"SELECT fcg.ID, fcg.CompetencyGroupID, cg.Name, fcg.Ordering, fc.ID, c.ID AS CompetencyID, c.Name, c.Description, fc.Ordering, COUNT(caq.AssessmentQuestionID) AS AssessmentQuestions
871+
@$"SELECT fcg.ID, fcg.CompetencyGroupID, cg.Name, fcg.Ordering, fc.ID, c.ID AS CompetencyID, c.Name, c.Description, fc.Ordering,
872+
(SELECT COUNT(*) FROM CompetencyAssessmentQuestions caq WHERE caq.CompetencyID = c.ID) AS AssessmentQuestions
872873
,(SELECT COUNT(*) FROM CompetencyLearningResources clr WHERE clr.CompetencyID = c.ID AND clr.RemovedDate IS NULL) AS CompetencyLearningResourcesCount
873874
FROM FrameworkCompetencyGroups AS fcg INNER JOIN
874875
CompetencyGroups AS cg ON fcg.CompetencyGroupID = cg.ID LEFT OUTER JOIN
875876
FrameworkCompetencies AS fc ON fcg.ID = fc.FrameworkCompetencyGroupID LEFT OUTER JOIN
876-
Competencies AS c ON fc.CompetencyID = c.ID LEFT OUTER JOIN
877-
CompetencyAssessmentQuestions AS caq ON c.ID = caq.CompetencyID
877+
Competencies AS c ON fc.CompetencyID = c.ID
878878
WHERE (fcg.FrameworkID = @frameworkId) {assessmentFilter}
879879
GROUP BY fcg.ID, fcg.CompetencyGroupID, cg.Name, fcg.Ordering, fc.ID, c.ID, c.Name, c.Description, fc.Ordering
880880
ORDER BY fcg.Ordering, fc.Ordering",
@@ -895,8 +895,8 @@ FROM FrameworkCompetencyGroups AS fcg INNER JOIN
895895
// Flatten all FrameworkCompetencies from all instances in this group
896896
groupedFrameworkCompetencyGroup.FrameworkCompetencies = group
897897
.SelectMany(g => g.FrameworkCompetencies)
898-
.Where(fc => fc != null)
899-
.ToList();
898+
.Where(fc => fc != null).
899+
Distinct().ToList();
900900

901901
return groupedFrameworkCompetencyGroup;
902902
});
@@ -910,11 +910,10 @@ FROM SelfAssessmentStructure
910910
WHERE (SelfAssessmentID = {assessmentId}))"
911911
: string.Empty;
912912
return connection.Query<FrameworkCompetency>(
913-
@$"SELECT fc.ID, c.ID AS CompetencyID, c.Name, c.Description, fc.Ordering, COUNT(caq.AssessmentQuestionID) AS AssessmentQuestions,(select COUNT(CompetencyId) from CompetencyLearningResources where CompetencyID=c.ID) AS CompetencyLearningResourcesCount
913+
@$"SELECT fc.ID, c.ID AS CompetencyID, c.Name, c.Description, fc.Ordering,
914+
(SELECT COUNT(*) FROM CompetencyAssessmentQuestions caq WHERE caq.CompetencyID = c.ID) AS AssessmentQuestions,(select COUNT(CompetencyId) from CompetencyLearningResources where CompetencyID=c.ID) AS CompetencyLearningResourcesCount
914915
FROM FrameworkCompetencies AS fc
915916
INNER JOIN Competencies AS c ON fc.CompetencyID = c.ID
916-
LEFT OUTER JOIN
917-
CompetencyAssessmentQuestions AS caq ON c.ID = caq.CompetencyID
918917
WHERE fc.FrameworkID = @frameworkId
919918
AND fc.FrameworkCompetencyGroupID IS NULL {assessmentFilter}
920919
GROUP BY fc.ID, c.ID, c.Name, c.Description, fc.Ordering

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,12 @@ public IActionResult AddComptencies(AddCompetenciesFormData model, int competenc
582582

583583
//reload model and view
584584
}
585-
return View(model);
585+
if (model.SelectedCompetencyIds.Count() > 0)
586+
{
587+
competencyAssessmentService.InsertCompetenciesIntoAssessmentFromFramework(model.SelectedCompetencyIds, frameworkId, competencyAssessmentId);
588+
}
589+
competencyAssessmentService.UpdateSelectCompetenciesTaskStatus(competencyAssessmentId, false, null);
590+
return RedirectToAction("ViewSelectedCompetencies", new { competencyAssessmentId });
586591
}
587592
}
588593
}

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ public interface ICompetencyAssessmentService
5050
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName, int? frameworkId);
5151
bool InsertSelfAssessmentFramework(int adminId, int assessmentId, int frameworkId);
5252
int GetCompetencyCountByFrameworkId(int competencyAssessmentId, int frameworkId);
53+
bool InsertCompetenciesIntoAssessmentFromFramework(int[] selectedCompetencyIds, int frameworkId, int competencyAssessmentId);
5354

5455
//DELETE DATA
5556
bool RemoveFrameworkCompetenciesFromAssessment(int competencyAssessmentId, int frameworkId);
56-
}
57+
}
5758
public class CompetencyAssessmentService : ICompetencyAssessmentService
5859
{
5960
private readonly ICompetencyAssessmentDataService competencyAssessmentDataService;
@@ -234,5 +235,10 @@ public int[] GetLinkedFrameworkCompetencyIds(int competencyAssessmentId, int fra
234235
{
235236
return competencyAssessmentDataService.GetLinkedFrameworkCompetencyIds(competencyAssessmentId, frameworkId);
236237
}
238+
239+
public bool InsertCompetenciesIntoAssessmentFromFramework(int[] selectedCompetencyIds, int frameworkId, int competencyAssessmentId)
240+
{
241+
return competencyAssessmentDataService.InsertCompetenciesIntoAssessmentFromFramework(selectedCompetencyIds, frameworkId, competencyAssessmentId);
242+
}
237243
}
238244
}

DigitalLearningSolutions.Web/Views/CompetencyAssessments/AddCompetencies.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<fieldset class="nhsuk-fieldset">
2828
<legend class="nhsuk-fieldset__legend">
2929
<h1>
30-
Select @Model.VocabularyPlural.ToLower() to include from @Model.FrameworkName
30+
Add @Model.VocabularyPlural.ToLower() to assessment from @Model.FrameworkName
3131
</h1>
3232
</legend>
3333

@@ -94,5 +94,5 @@
9494

9595
</fieldset>
9696
</nhs-form-group>
97-
<button class="nhsuk-button" type="submit">Submit</button>
97+
<button class="nhsuk-button" type="submit">Add selected @Model.VocabularyPlural.ToLower() to assessment</button>
9898
</form>

0 commit comments

Comments
 (0)