Skip to content

Commit 2bf7965

Browse files
authored
Merge pull request #3095 from TechnologyEnhancedLearning/Develop/Features/TD-480-CreateAssessment
TD-480 create assessment flow
2 parents d977ddf + 877eb5c commit 2bf7965

File tree

27 files changed

+493
-413
lines changed

27 files changed

+493
-413
lines changed

DigitalLearningSolutions.Data.Migrations/202501280929_CreateCompetencyAssessmentTables.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ public override void Up()
1212
.WithColumn("SelfAssessmentId").AsInt32().NotNullable().ForeignKey("SelfAssessments", "ID")
1313
.WithColumn("FrameworkId").AsInt32().NotNullable().ForeignKey("Frameworks", "ID")
1414
.WithColumn("CreatedDate").AsDateTime().NotNullable().WithDefault(SystemMethods.CurrentDateTime)
15-
.WithColumn("CreatedByUserId").AsInt32().NotNullable().ForeignKey("Users", "ID")
15+
.WithColumn("CreatedByAdminId").AsInt32().NotNullable().ForeignKey("AdminAccounts", "ID")
1616
.WithColumn("RemovedDate").AsDateTime().Nullable()
17-
.WithColumn("RemovedByUserId").AsInt32().Nullable().ForeignKey("Users", "ID")
17+
.WithColumn("RemovedByAdminId").AsInt32().Nullable().ForeignKey("AdminAccounts", "ID")
1818
.WithColumn("AmendedDate").AsDateTime().Nullable()
19-
.WithColumn("AmendedByUserId").AsInt32().Nullable().ForeignKey("Users", "ID");
19+
.WithColumn("AmendedByAdminId").AsInt32().Nullable().ForeignKey("AdminAccounts", "ID");
2020
Create.Table("SelfAssessmentTaskStatus")
2121
.WithColumn("ID").AsInt32().NotNullable().PrimaryKey().Identity()
2222
.WithColumn("SelfAssessmentId").AsInt32().NotNullable().ForeignKey("SelfAssessments", "ID").Unique()
@@ -32,13 +32,13 @@ public override void Up()
3232
.WithColumn("SupervisorRolesTaskStatus").AsBoolean().Nullable()
3333
.WithColumn("SelfAssessmentOptionsTaskStatus").AsBoolean().Nullable()
3434
.WithColumn("ReviewTaskStatus").AsBoolean().Nullable();
35-
Execute.Sql($@"INSERT INTO SelfAssessmentFrameworks (SelfAssessmentId, FrameworkId, CreatedByUserId)
36-
SELECT sa.ID, fc.FrameworkID, aa.UserID
35+
Alter.Table("SelfAssessments").AlterColumn("Description").AsString(int.MaxValue).Nullable();
36+
Execute.Sql($@"INSERT INTO SelfAssessmentFrameworks (SelfAssessmentId, FrameworkId, CreatedByAdminId)
37+
SELECT sa.ID, fc.FrameworkID, sa.CreatedByAdminID
3738
FROM SelfAssessments AS sa INNER JOIN
3839
SelfAssessmentStructure AS sas ON sa.ID = sas.SelfAssessmentID INNER JOIN
39-
FrameworkCompetencies AS fc ON sas.CompetencyID = fc.CompetencyID INNER JOIN
40-
AdminAccounts AS aa ON sa.CreatedByAdminID = aa.ID
41-
GROUP BY sa.ID, fc.FrameworkID, aa.UserID
40+
FrameworkCompetencies AS fc ON sas.CompetencyID = fc.CompetencyID
41+
GROUP BY sa.ID, fc.FrameworkID, sa.CreatedByAdminID
4242
");
4343
Execute.Sql($@"INSERT INTO SelfAssessmentTaskStatus (SelfAssessmentId, IntroductoryTextTaskStatus, BrandingTaskStatus, VocabularyTaskStatus, WorkingGroupTaskStatus, NationalRoleProfileTaskStatus, FrameworkLinksTaskStatus, SelectCompetenciesTaskStatus, OptionalCompetenciesTaskStatus, RoleRequirementsTaskStatus, SupervisorRolesTaskStatus, SelfAssessmentOptionsTaskStatus)
4444
SELECT ID, 1,1,1,1,1,1,1,1,1,1,1
@@ -50,6 +50,7 @@ public override void Down()
5050
{
5151
Delete.Table("SelfAssessmentFrameworks");
5252
Delete.Table("SelfAssessmentTaskStatus");
53+
Alter.Table("SelfAssessments").AlterColumn("Description").AsString(int.MaxValue).NotNullable();
5354
}
5455

5556
}

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 114 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
namespace DigitalLearningSolutions.Data.DataServices
22
{
3+
using System;
34
using System.Collections.Generic;
45
using System.Data;
56
using System.Linq;
67
using Dapper;
8+
using DigitalLearningSolutions.Data.Models.Common;
79
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
10+
using DigitalLearningSolutions.Data.Models.Frameworks;
11+
using DocumentFormat.OpenXml.Wordprocessing;
812
using Microsoft.Extensions.Logging;
913

1014
public interface ICompetencyAssessmentDataService
@@ -24,8 +28,16 @@ public interface ICompetencyAssessmentDataService
2428
bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName);
2529

2630
bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID);
31+
bool UpdateCompetencyAssessmentBranding(
32+
int competencyAssessmentId,
33+
int brandId,
34+
int categoryId,
35+
int adminId
36+
);
37+
bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string competencyAssessmentDescription);
2738
//INSERT DATA
28-
39+
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName);
40+
bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId);
2941
//DELETE DATA
3042
}
3143

@@ -121,6 +133,33 @@ FROM SelfAssessmentCollaborators
121133
).FirstOrDefault();
122134
}
123135

136+
public int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName)
137+
{
138+
if ((competencyAssessmentName.Length == 0) | (adminId < 1))
139+
{
140+
logger.LogWarning(
141+
$"Not inserting competency assessmente as it failed server side validation. AdminId: {adminId}, competencyAssessmentName: {competencyAssessmentName}"
142+
);
143+
return -1;
144+
}
145+
var result = connection.ExecuteScalar(
146+
@"SELECT COUNT(*) FROM SelfAssessments WHERE [Name] = @competencyAssessmentName",
147+
new { competencyAssessmentName }
148+
);
149+
int existingSelfAssessments = Convert.ToInt32(result);
150+
if (existingSelfAssessments > 0)
151+
{
152+
return -1;
153+
}
154+
var assessmentId = connection.QuerySingle<int>(
155+
@"INSERT INTO SelfAssessments ([Name], CreatedByCentreID, CreatedByAdminID)
156+
OUTPUT INSERTED.Id
157+
VALUES (@competencyAssessmentName, @centreId, @adminId)"
158+
,
159+
new { competencyAssessmentName, centreId, adminId }
160+
);
161+
return assessmentId;
162+
}
124163
public bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName)
125164
{
126165
if ((competencyAssessmentName.Length == 0) | (adminId < 1) | (competencyAssessmentId < 1))
@@ -130,11 +169,11 @@ public bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int admin
130169
);
131170
return false;
132171
}
133-
134-
var existingSelfAssessments = (int)connection.ExecuteScalar(
172+
var result = connection.ExecuteScalar(
135173
@"SELECT COUNT(*) FROM SelfAssessments WHERE [Name] = @competencyAssessmentName AND ID <> @competencyAssessmentId",
136174
new { competencyAssessmentName, competencyAssessmentId }
137175
);
176+
int existingSelfAssessments = Convert.ToInt32(result);
138177
if (existingSelfAssessments > 0)
139178
{
140179
return false;
@@ -179,10 +218,11 @@ ORDER BY ProfessionalGroup"
179218

180219
public bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID)
181220
{
182-
var sameCount = (int)connection.ExecuteScalar(
221+
var result = connection.ExecuteScalar(
183222
@"SELECT COUNT(*) FROM CompetencyAssessments WHERE ID = @competencyAssessmentId AND NRPProfessionalGroupID = @nrpProfessionalGroupID",
184223
new { competencyAssessmentId, nrpProfessionalGroupID }
185224
);
225+
int sameCount = Convert.ToInt32(result);
186226
if (sameCount > 0)
187227
{
188228
//same so don't update:
@@ -202,5 +242,75 @@ public bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessment
202242

203243
return false;
204244
}
245+
public bool UpdateCompetencyAssessmentBranding(
246+
int competencyAssessmentId,
247+
int brandId,
248+
int categoryId,
249+
int adminId
250+
)
251+
{
252+
if ((competencyAssessmentId < 1) | (brandId < 1) | (categoryId < 1) | (adminId < 1))
253+
{
254+
logger.LogWarning(
255+
$"Not updating competency assessment as it failed server side validation. competencyAssessmentId: {competencyAssessmentId}, brandId: {brandId}, categoryId: {categoryId}, AdminId: {adminId}"
256+
);
257+
return false;
258+
}
259+
260+
var numberOfAffectedRows = connection.Execute(
261+
@"UPDATE SelfAssessments SET BrandID = @brandId, CategoryID = @categoryId, UpdatedByAdminID = @adminId
262+
WHERE ID = @competencyAssessmentId",
263+
new { brandId, categoryId, adminId, competencyAssessmentId }
264+
);
265+
if (numberOfAffectedRows < 1)
266+
{
267+
logger.LogWarning(
268+
"Not updating competency assessment as db update failed. " +
269+
$"frameworkId: {competencyAssessmentId}, brandId: {brandId}, categoryId: {categoryId}, AdminId: {adminId}"
270+
);
271+
return false;
272+
}
273+
274+
return true;
275+
}
276+
277+
public bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string competencyAssessmentDescription)
278+
{
279+
var numberOfAffectedRows = connection.Execute(
280+
@"UPDATE SelfAssessments SET Description = @competencyAssessmentDescription, UpdatedByAdminID = @adminId
281+
WHERE ID = @competencyAssessmentId",
282+
new { adminId, competencyAssessmentId, competencyAssessmentDescription }
283+
);
284+
if (numberOfAffectedRows < 1)
285+
{
286+
logger.LogWarning(
287+
"Not updating competency assessment as db update failed. " +
288+
$"frameworkId: {competencyAssessmentId}, competencyAssessmentDescription: {competencyAssessmentDescription}, AdminId: {adminId}"
289+
);
290+
return false;
291+
}
292+
return true;
293+
}
294+
295+
public bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId)
296+
{
297+
var numberOfAffectedRows = connection.Execute(
298+
@"INSERT INTO SelfAssessmentFrameworks (SelfAssessmentId, FrameworkId, CreatedByAdminId)
299+
SELECT @selfAssessmentId, @frameworkId, @adminId
300+
WHERE NOT EXISTS (SELECT 1 FROM SelfAssessmentFrameworks WHERE SelfAssessmentId = @selfAssessmentId AND FrameworkId = @frameworkId)"
301+
,
302+
new { adminId, selfAssessmentId, frameworkId }
303+
);
304+
if (numberOfAffectedRows < 1)
305+
{
306+
logger.LogWarning(
307+
"Not inserting SelfAssessmentFrameworks record as db insert failed. " +
308+
$"selfAssessmentId: {selfAssessmentId}, frameworkId: {frameworkId}, AdminId: {adminId}"
309+
);
310+
return false;
311+
}
312+
313+
return true;
314+
}
205315
}
206316
}

DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ public class FrameworkDataService : IFrameworkDataService
284284
fwr.ID AS FrameworkReviewID";
285285

286286
private const string BrandedFrameworkFields =
287-
@",(SELECT BrandName
287+
@", FW.Description, (SELECT BrandName
288288
FROM Brands
289289
WHERE (BrandID = FW.BrandID)) AS Brand,
290290
(SELECT CategoryName

DigitalLearningSolutions.Data/Models/Frameworks/BrandedFramework.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
public class BrandedFramework : BaseFramework
44
{
5+
public string? Description { get; set; }
56
public string? Brand
67
{
78
get => brand;

0 commit comments

Comments
 (0)