Skip to content

Commit 833fe0a

Browse files
committed
TD-5308 Implements assessment provider and category page
1 parent 0e9d1cf commit 833fe0a

File tree

9 files changed

+238
-19
lines changed

9 files changed

+238
-19
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public interface ICompetencyAssessmentDataService
2020

2121
CompetencyAssessmentBase? GetCompetencyAssessmentBaseById(int competencyAssessmentId, int adminId);
2222

23-
CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId);
24-
23+
CompetencyAssessmentBase? GetCompetencyAssessmentBaseByName(string competencyAssessmentName, int adminId);
24+
CompetencyAssessment? GetCompetencyAssessmentById(int competencyAssessmentId, int adminId);
2525
IEnumerable<NRPProfessionalGroups> GetNRPProfessionalGroups();
2626

2727
CompetencyAssessmentTaskStatus GetOrInsertAndReturnAssessmentTaskStatus(int assessmentId, bool frameworkBased);
@@ -32,13 +32,14 @@ public interface ICompetencyAssessmentDataService
3232
bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID);
3333
bool UpdateCompetencyAssessmentBranding(
3434
int competencyAssessmentId,
35+
int adminId,
3536
int brandId,
36-
int categoryId,
37-
int adminId
37+
int categoryId
3838
);
3939
bool UpdateCompetencyAssessmentVocabulary(int competencyAssessmentId, int adminId, string vocabulary);
4040
bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string competencyAssessmentDescription);
4141
bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus);
42+
bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus);
4243
//INSERT DATA
4344
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName);
4445
bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId);
@@ -56,10 +57,13 @@ public class CompetencyAssessmentDataService : ICompetencyAssessmentDataService
5657
sa.PublishStatusID, sa.Vocabulary, CASE WHEN sa.CreatedByAdminID = @adminId THEN 3 WHEN sac.CanModify = 1 THEN 2 WHEN sac.CanModify = 0 THEN 1 ELSE 0 END AS UserRole";
5758

5859
private const string SelfAssessmentFields =
59-
@", sa.CreatedDate,
60+
@", sa.CategoryID, sa.CreatedDate,
6061
(SELECT BrandName
6162
FROM Brands
6263
WHERE (BrandID = sa.BrandID)) AS Brand,
64+
(SELECT CategoryName
65+
FROM CourseCategories
66+
WHERE (CourseCategoryID = sa.CategoryID)) AS Category,
6367
(SELECT [Name]
6468
FROM SelfAssessments AS sa2
6569
WHERE (ID = sa.ParentSelfAssessmentID)) AS ParentSelfAssessment,
@@ -210,7 +214,7 @@ ORDER BY ProfessionalGroup"
210214
);
211215
}
212216

213-
public CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId)
217+
public CompetencyAssessmentBase? GetCompetencyAssessmentBaseByName(string competencyAssessmentName, int adminId)
214218
{
215219
return connection.Query<CompetencyAssessmentBase>(
216220
$@"SELECT {SelfAssessmentBaseFields}
@@ -248,9 +252,9 @@ public bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessment
248252
}
249253
public bool UpdateCompetencyAssessmentBranding(
250254
int competencyAssessmentId,
255+
int adminId,
251256
int brandId,
252-
int categoryId,
253-
int adminId
257+
int categoryId
254258
)
255259
{
256260
if ((competencyAssessmentId < 1) | (brandId < 1) | (categoryId < 1) | (adminId < 1))
@@ -367,5 +371,33 @@ public bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus)
367371
}
368372
return true;
369373
}
374+
375+
public CompetencyAssessment? GetCompetencyAssessmentById(int competencyAssessmentId, int adminId)
376+
{
377+
return connection.Query<CompetencyAssessment>(
378+
$@"SELECT {SelfAssessmentBaseFields} {SelfAssessmentFields}
379+
FROM {SelfAssessmentBaseTables} {SelfAssessmentTables}
380+
WHERE (sa.ID = @competencyAssessmentId)",
381+
new { competencyAssessmentId, adminId }
382+
).FirstOrDefault();
383+
}
384+
385+
public bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus)
386+
{
387+
var numberOfAffectedRows = connection.Execute(
388+
@"UPDATE SelfAssessmentTaskStatus SET BrandingTaskStatus = @taskStatus
389+
WHERE SelfAssessmentId = @assessmentId",
390+
new { assessmentId, taskStatus }
391+
);
392+
if (numberOfAffectedRows < 1)
393+
{
394+
logger.LogWarning(
395+
"Not updating BrandingTaskStatus as db update failed. " +
396+
$"assessmentId: {assessmentId}, taskStatus: {taskStatus}"
397+
);
398+
return false;
399+
}
400+
return true;
401+
}
370402
}
371403
}

DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessment.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ public string? Brand
99
get => brand;
1010
set => brand = GetValidOrNull(value);
1111
}
12+
public string? Category
13+
{
14+
get => category;
15+
set => category = GetValidOrNull(value);
16+
}
1217
public string? ParentCompetencyAssessment { get; set; }
1318
public string? Owner { get; set; }
1419
public DateTime? Archived { get; set; }
@@ -19,6 +24,7 @@ public string? Brand
1924
public string? NRPRole { get; set; }
2025
public int? CompetencyAssessmentReviewID { get; set; }
2126
private string? brand;
27+
private string? category;
2228
private static string? GetValidOrNull(string? toValidate)
2329
{
2430
return toValidate != null && toValidate.ToLower() == "undefined" ? null : toValidate;

DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessmentBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments
22
{
3-
using System;
43
using System.ComponentModel.DataAnnotations;
54
public class CompetencyAssessmentBase
65
{
@@ -10,6 +9,7 @@ public class CompetencyAssessmentBase
109
public string CompetencyAssessmentName { get; set; } = string.Empty;
1110
public string? Description { get; set; }
1211
public int BrandID { get; set; }
12+
public int CategoryID { get; set; }
1313
public int? ParentCompetencyAssessmentID { get; set; }
1414
public bool National { get; set; }
1515
public bool Public { get; set; }

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments;
55
using Microsoft.AspNetCore.Mvc;
66
using Microsoft.Extensions.Logging;
7-
using DigitalLearningSolutions.Web.Extensions;
87
using System.Collections.Generic;
98
using DigitalLearningSolutions.Data.Enums;
109
using DigitalLearningSolutions.Web.Attributes;
1110
using DigitalLearningSolutions.Web.Models.Enums;
11+
using DigitalLearningSolutions.Web.Helpers;
12+
using System.Linq;
13+
using AspNetCoreGeneratedDocument;
14+
using Microsoft.AspNetCore.Mvc.Rendering;
15+
using DigitalLearningSolutions.Data.Models.Centres;
16+
using DigitalLearningSolutions.Data.Models.Frameworks;
1217

1318
public partial class CompetencyAssessmentsController
1419
{
@@ -140,7 +145,7 @@ public IActionResult SaveProfileName(CompetencyAssessmentBase competencyAssessme
140145
var adminId = GetAdminID();
141146
if (actionName == "New")
142147
{
143-
var sameItems = competencyAssessmentService.GetCompetencyAssessmentByName(competencyAssessmentBase.CompetencyAssessmentName, GetAdminID());
148+
var sameItems = competencyAssessmentService.GetCompetencyAssessmentBaseByName(competencyAssessmentBase.CompetencyAssessmentName, GetAdminID());
144149
if (sameItems != null)
145150
{
146151
ModelState.Remove(nameof(CompetencyAssessmentBase.CompetencyAssessmentName));
@@ -284,9 +289,51 @@ public IActionResult SaveDescription(EditDescriptionViewModel model)
284289
return View("EditDescription", model);
285290
}
286291
var adminId = GetAdminID();
287-
var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentDescription(model.ID, adminId, model.Description);
292+
var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentDescription(model.ID, adminId, SanitizerHelper.SanitizeHtmlData(model.Description));
288293
competencyAssessmentService.UpdateIntroductoryTextTaskStatus(model.ID, model.TaskStatus ?? false);
289294
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
290295
}
296+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Branding/")]
297+
public IActionResult EditBranding(int competencyAssessmentId)
298+
{
299+
var centreId = GetCentreId();
300+
var adminId = GetAdminID();
301+
var brandsList = commonService.GetBrandListForCentre((int)centreId).Select(b => new { b.BrandID, b.BrandName }).ToList();
302+
var categoryList = commonService.GetCategoryListForCentre((int)centreId).Select(c => new { c.CourseCategoryID, c.CategoryName }).ToList();
303+
var brandSelectList = new SelectList(brandsList, "BrandID", "BrandName");
304+
var categorySelectList = new SelectList(categoryList, "CourseCategoryID", "CategoryName");
305+
var competencyAssessment = competencyAssessmentService.GetCompetencyAssessmentById(competencyAssessmentId, adminId);
306+
var competencyAssessmentTaskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, null);
307+
var model = new EditBrandingViewModel(competencyAssessment, brandSelectList, categorySelectList, competencyAssessmentTaskStatus.BrandingTaskStatus);
308+
return View(model);
309+
}
310+
[HttpPost]
311+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Branding/")]
312+
public IActionResult EditBranding(EditBrandingViewModel model)
313+
{
314+
var adminId = GetAdminID();
315+
var centreId = GetCentreId();
316+
if (!ModelState.IsValid)
317+
{
318+
var brandsList = commonService.GetBrandListForCentre((int)centreId).Select(b => new { b.BrandID, b.BrandName }).ToList();
319+
var categoryList = commonService.GetCategoryListForCentre((int)centreId).Select(c => new { c.CourseCategoryID, c.CategoryName }).ToList();
320+
var brandSelectList = new SelectList(brandsList, "BrandID", "BrandName");
321+
var categorySelectList = new SelectList(categoryList, "CourseCategoryID", "CategoryName");
322+
model.BrandSelectList = brandSelectList;
323+
model.CategorySelectList = categorySelectList;
324+
return View("EditBranding", model);
325+
}
326+
if(model.BrandID == 0)
327+
{
328+
model.BrandID = commonService.InsertBrandAndReturnId(model.Brand, (int)centreId);
329+
}
330+
if(model.CategoryID == 0)
331+
{
332+
model.CategoryID = commonService.InsertCategoryAndReturnId(model.Category, (int)centreId);
333+
}
334+
var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentBranding(model.ID, adminId, model.BrandID, model.CategoryID);
335+
competencyAssessmentService.UpdateBrandingTaskStatus(model.ID, model.TaskStatus ?? false);
336+
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
337+
}
291338
}
292339
}

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ public interface ICompetencyAssessmentService
1313

1414
CompetencyAssessmentBase? GetCompetencyAssessmentBaseById(int competencyAssessmentId, int adminId);
1515

16-
CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId);
16+
CompetencyAssessmentBase? GetCompetencyAssessmentBaseByName(string competencyAssessmentName, int adminId);
17+
CompetencyAssessment? GetCompetencyAssessmentById(int competencyAssessmentId, int adminId);
1718

1819
IEnumerable<NRPProfessionalGroups> GetNRPProfessionalGroups();
1920

@@ -24,10 +25,13 @@ public interface ICompetencyAssessmentService
2425

2526
bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID);
2627
bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus);
28+
bool UpdateCompetencyAssessmentDescription(int assessmentId, int adminId, string description);
29+
bool UpdateCompetencyAssessmentBranding(int assessmentId, int adminId, int brandID, int categoryID);
30+
bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus);
2731

2832
//INSERT DATA
2933
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName, int? frameworkId);
30-
bool UpdateCompetencyAssessmentDescription(int iD, int adminId, string description);
34+
3135
}
3236
public class CompetencyAssessmentService : ICompetencyAssessmentService
3337
{
@@ -53,9 +57,9 @@ public IEnumerable<NRPProfessionalGroups> GetNRPProfessionalGroups()
5357
return competencyAssessmentDataService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
5458
}
5559

56-
public CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId)
60+
public CompetencyAssessmentBase? GetCompetencyAssessmentBaseByName(string competencyAssessmentName, int adminId)
5761
{
58-
return competencyAssessmentDataService.GetCompetencyAssessmentByName(competencyAssessmentName, adminId);
62+
return competencyAssessmentDataService.GetCompetencyAssessmentBaseByName(competencyAssessmentName, adminId);
5963
}
6064

6165
public IEnumerable<CompetencyAssessment> GetCompetencyAssessmentsForAdminId(int adminId)
@@ -100,5 +104,20 @@ public bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus)
100104
{
101105
return competencyAssessmentDataService.UpdateIntroductoryTextTaskStatus(assessmentId, taskStatus);
102106
}
107+
108+
public CompetencyAssessment? GetCompetencyAssessmentById(int competencyAssessmentId, int adminId)
109+
{
110+
return competencyAssessmentDataService.GetCompetencyAssessmentById(competencyAssessmentId, adminId);
111+
}
112+
113+
public bool UpdateCompetencyAssessmentBranding(int assessmentId, int adminId, int brandID, int categoryID)
114+
{
115+
return competencyAssessmentDataService.UpdateCompetencyAssessmentBranding(assessmentId, adminId, brandID, categoryID);
116+
}
117+
118+
public bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus)
119+
{
120+
return competencyAssessmentDataService.UpdateBrandingTaskStatus(assessmentId, taskStatus);
121+
}
103122
}
104123
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
2+
using Microsoft.AspNetCore.Mvc.Rendering;
3+
4+
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
5+
{
6+
public class EditBrandingViewModel
7+
{
8+
public EditBrandingViewModel() { }
9+
public EditBrandingViewModel(CompetencyAssessment competencyAssessment, SelectList brandSelectList, SelectList categorySelectList, bool? taskStatus)
10+
{
11+
ID = competencyAssessment.ID;
12+
CompetencyAssessmentName = competencyAssessment.CompetencyAssessmentName;
13+
BrandID = competencyAssessment.BrandID;
14+
CategoryID = competencyAssessment.CategoryID;
15+
Brand = competencyAssessment.Brand;
16+
Category = competencyAssessment.Category;
17+
UserRole = competencyAssessment.UserRole;
18+
BrandSelectList = brandSelectList;
19+
CategorySelectList = categorySelectList;
20+
TaskStatus = taskStatus;
21+
}
22+
public int ID { get; set; }
23+
public string CompetencyAssessmentName { get; set; }
24+
public int BrandID { get; set; }
25+
public int CategoryID { get; set; }
26+
public string? Brand { get; set; }
27+
public string? Category { get; set; }
28+
public int UserRole { get; set; }
29+
public bool? TaskStatus { get; set; }
30+
public SelectList? BrandSelectList { get; set; }
31+
public SelectList? CategorySelectList { get; set; }
32+
}
33+
}

0 commit comments

Comments
 (0)