Skip to content

Commit 17ee3c4

Browse files
authored
Merge pull request #3119 from TechnologyEnhancedLearning/Develop/Features/TD-481-CreateAssessmentTaskList
TD-481 create assessment task list
2 parents 54949e0 + 9ae33a7 commit 17ee3c4

File tree

16 files changed

+475
-103
lines changed

16 files changed

+475
-103
lines changed

DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public interface ICompetencyAssessmentDataService
2424

2525
IEnumerable<NRPProfessionalGroups> GetNRPProfessionalGroups();
2626

27+
CompetencyAssessmentTaskStatus GetOrInsertAndReturnAssessmentTaskStatus(int assessmentId, bool frameworkBased);
28+
2729
//UPDATE DATA
2830
bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName);
2931

@@ -34,6 +36,7 @@ bool UpdateCompetencyAssessmentBranding(
3436
int categoryId,
3537
int adminId
3638
);
39+
bool UpdateCompetencyAssessmentVocabulary(int competencyAssessmentId, int adminId, string vocabulary);
3740
bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string competencyAssessmentDescription);
3841
//INSERT DATA
3942
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName);
@@ -49,7 +52,7 @@ public class CompetencyAssessmentDataService : ICompetencyAssessmentDataService
4952
sa.NRPProfessionalGroupID,
5053
sa.NRPSubGroupID,
5154
sa.NRPRoleID,
52-
sa.PublishStatusID, CASE WHEN sa.CreatedByAdminID = @adminId THEN 3 WHEN sac.CanModify = 1 THEN 2 WHEN sac.CanModify = 0 THEN 1 ELSE 0 END AS UserRole";
55+
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";
5356

5457
private const string SelfAssessmentFields =
5558
@", sa.CreatedDate,
@@ -265,7 +268,7 @@ int adminId
265268
if (numberOfAffectedRows < 1)
266269
{
267270
logger.LogWarning(
268-
"Not updating competency assessment as db update failed. " +
271+
"Not updating competency assessment branding as db update failed. " +
269272
$"frameworkId: {competencyAssessmentId}, brandId: {brandId}, categoryId: {categoryId}, AdminId: {adminId}"
270273
);
271274
return false;
@@ -284,14 +287,32 @@ public bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, in
284287
if (numberOfAffectedRows < 1)
285288
{
286289
logger.LogWarning(
287-
"Not updating competency assessment as db update failed. " +
290+
"Not updating competency assessment Description as db update failed. " +
288291
$"frameworkId: {competencyAssessmentId}, competencyAssessmentDescription: {competencyAssessmentDescription}, AdminId: {adminId}"
289292
);
290293
return false;
291294
}
292295
return true;
293296
}
294297

298+
public bool UpdateCompetencyAssessmentVocabulary(int competencyAssessmentId, int adminId, string vocabulary)
299+
{
300+
var numberOfAffectedRows = connection.Execute(
301+
@"UPDATE SelfAssessments SET Vocabulary = @vocabulary, UpdatedByAdminID = @adminId
302+
WHERE ID = @competencyAssessmentId",
303+
new { adminId, competencyAssessmentId, vocabulary }
304+
);
305+
if (numberOfAffectedRows < 1)
306+
{
307+
logger.LogWarning(
308+
"Not updating competency assessment vocabulary as db update failed. " +
309+
$"frameworkId: {competencyAssessmentId}, vocabulary: {vocabulary}, AdminId: {adminId}"
310+
);
311+
return false;
312+
}
313+
return true;
314+
}
315+
295316
public bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId)
296317
{
297318
var numberOfAffectedRows = connection.Execute(
@@ -312,5 +333,21 @@ WHERE NOT EXISTS (SELECT 1 FROM SelfAssessmentFrameworks WHERE SelfAssessmentId
312333

313334
return true;
314335
}
336+
337+
public CompetencyAssessmentTaskStatus GetOrInsertAndReturnAssessmentTaskStatus(int assessmentId, bool frameworkBased)
338+
{
339+
bool? frameworkItemBool = frameworkBased ? false : null;
340+
connection.Execute(
341+
@"INSERT INTO SelfAssessmentTaskStatus (SelfAssessmentId, IntroductoryTextTaskStatus, BrandingTaskStatus, VocabularyTaskStatus, FrameworkLinksTaskStatus)
342+
SELECT @assessmentId, @frameworkItemBool, @frameworkItemBool, @frameworkItemBool, @frameworkItemBool
343+
WHERE NOT EXISTS (SELECT 1 FROM SelfAssessmentTaskStatus WHERE SelfAssessmentId = @assessmentId)", new { assessmentId, frameworkItemBool });
344+
return connection.Query<CompetencyAssessmentTaskStatus>(
345+
$@"SELECT *
346+
FROM SelfAssessmentTaskStatus
347+
WHERE (SelfAssessmentId = @assessmentId)",
348+
new { assessmentId }
349+
).Single();
350+
351+
}
315352
}
316353
}

DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ public class FrameworkDataService : IFrameworkDataService
285285
fwr.ID AS FrameworkReviewID";
286286

287287
private const string BrandedFrameworkFields =
288-
@", FW.Description, (SELECT BrandName
288+
@", FW.Description, FW.FrameworkConfig AS Vocabulary, (SELECT BrandName
289289
FROM Brands
290290
WHERE (BrandID = FW.BrandID)) AS Brand,
291291
(SELECT CategoryName
@@ -2193,7 +2193,7 @@ public IEnumerable<DashboardToDoItem> GetDashboardToDoItems(int adminId)
21932193
return connection.Query<DashboardToDoItem>(
21942194
@"SELECT
21952195
FW.ID AS FrameworkID,
2196-
0 AS CompetencyAssessmentID,
2196+
0 AS SelfAssessmentID,
21972197
FW.FrameworkName AS ItemName,
21982198
AU.Forename + ' ' + AU.Surname + (CASE WHEN AU.Active = 1 THEN '' ELSE ' (Inactive)' END) AS RequestorName,
21992199
FWR.SignOffRequired,
@@ -2205,8 +2205,8 @@ FROM FrameworkReviews AS FWR
22052205
WHERE (FWC.AdminID = @adminId) AND (FWR.ReviewComplete IS NULL) AND (FWR.Archived IS NULL)
22062206
UNION ALL
22072207
SELECT
2208-
0 AS SelfAssessmentID,
2209-
RP.ID AS SelfAssessmentID,
2208+
0 AS FrameworkID,
2209+
RP.ID AS CompetencyAssessmentID,
22102210
RP.Name AS ItemName,
22112211
AU.Forename + ' ' + AU.Surname + (CASE WHEN AU.Active = 1 THEN '' ELSE ' (Inactive)' END) AS RequestorName,
22122212
RPR.SignOffRequired,

DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessment.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments
22
{
33
using System;
4-
using System.ComponentModel.DataAnnotations;
54
public class CompetencyAssessment : CompetencyAssessmentBase
65
{
76
public DateTime CreatedDate { get; set; }

DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessmentBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class CompetencyAssessmentBase
1919
public int? NRPRoleID { get; set; }
2020
public int PublishStatusID { get; set; }
2121
public int UserRole { get; set; }
22+
public string? Vocabulary { get; set; }
2223

2324
}
2425
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments
2+
{
3+
public class CompetencyAssessmentTaskStatus
4+
{
5+
public int Id { get; set; }
6+
public bool? IntroductoryTextTaskStatus { get; set; }
7+
public bool? BrandingTaskStatus { get; set; }
8+
public bool? VocabularyTaskStatus { get; set; }
9+
public bool? WorkingGroupTaskStatus { get; set; }
10+
public bool? NationalRoleProfileTaskStatus { get; set; }
11+
public bool? FrameworkLinksTaskStatus { get; set; }
12+
public bool? SelectCompetenciesTaskStatus { get; set; }
13+
public bool? OptionalCompetenciesTaskStatus { get; set; }
14+
public bool? RoleRequirementsTaskStatus { get; set; }
15+
public bool? SupervisorRolesTaskStatus { get; set; }
16+
public bool? SelfAssessmentOptionsTaskStatus { get; set; }
17+
public bool? ReviewTaskStatus { get; set; }
18+
19+
}
20+
}

DigitalLearningSolutions.Data/Models/Frameworks/BrandedFramework.cs

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

DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ public IActionResult CompetencyAssessmentName(string actionName, int competencyA
114114
return StatusCode(403);
115115
}
116116
}
117-
else if( frameworkId != null )
117+
else if (frameworkId != null)
118118
{
119119
var framework = frameworkService.GetBaseFrameworkByFrameworkId((int)frameworkId, adminId);
120-
if ( framework != null )
120+
if (framework != null)
121121
{
122122
competencyAssessmentBase.CompetencyAssessmentName = framework.FrameworkName;
123123
}
@@ -151,20 +151,39 @@ public IActionResult SaveProfileName(CompetencyAssessmentBase competencyAssessme
151151
ModelState.AddModelError(nameof(CompetencyAssessmentBase.CompetencyAssessmentName), "Another competency assessment exists with that name. Please choose a different name.");
152152
return View("Name", competencyAssessmentBase);
153153
}
154-
competencyAssessmentService.InsertCompetencyAssessment(adminId, userCentreId, competencyAssessmentBase.CompetencyAssessmentName, frameworkId);
154+
competencyAssessmentId = competencyAssessmentService.InsertCompetencyAssessment(adminId, userCentreId, competencyAssessmentBase.CompetencyAssessmentName, frameworkId);
155155
}
156156
else
157-
{
158-
157+
{
158+
159159
var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentName(competencyAssessmentBase.ID, adminId, competencyAssessmentBase.CompetencyAssessmentName);
160160
if (!isUpdated)
161161
{
162162
ModelState.AddModelError(nameof(CompetencyAssessmentBase.CompetencyAssessmentName), "Another competency assessment exists with that name. Please choose a different name.");
163163
return View("Name", competencyAssessmentBase);
164164
}
165165
}
166-
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId });
166+
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId, frameworkId });
167+
}
168+
}
169+
[Route("/CompetencyAssessments/Framework/{frameworkId}/{competencyAssessmentId}/Manage")]
170+
[Route("/CompetencyAssessments/{competencyAssessmentId}/Manage")]
171+
public IActionResult ManageCompetencyAssessment(int competencyAssessmentId, int? frameworkId = null)
172+
{
173+
var adminId = GetAdminID();
174+
var competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
175+
if (competencyAssessmentBase == null)
176+
{
177+
logger.LogWarning($"Failed to load name page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}");
178+
return StatusCode(500);
179+
}
180+
if (competencyAssessmentBase.UserRole < 2)
181+
{
182+
return StatusCode(403);
167183
}
184+
var competencyAssessmentTaskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, frameworkId);
185+
var model = new ManageCompetencyAssessmentViewModel(competencyAssessmentBase, competencyAssessmentTaskStatus);
186+
return View("ManageCompetencyAssessment", model);
168187
}
169188

170189
[Route("/CompetencyAssessments/ProfessionalGroup/{actionName}/{competencyAssessmentId}")]

DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs

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

1818
IEnumerable<NRPProfessionalGroups> GetNRPProfessionalGroups();
1919

20+
CompetencyAssessmentTaskStatus GetCompetencyAssessmentTaskStatus(int assessmentId, int? frameworkId);
21+
2022
//UPDATE DATA
2123
bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName);
2224

@@ -69,6 +71,7 @@ public int InsertCompetencyAssessment(int adminId, int centreId, string competen
6971
competencyAssessmentDataService.InsertSelfAssessmentFramework(adminId, assessmentId, framework.ID);
7072
competencyAssessmentDataService.UpdateCompetencyAssessmentDescription(adminId, assessmentId, framework.Description);
7173
competencyAssessmentDataService.UpdateCompetencyAssessmentBranding(assessmentId, (int)framework.BrandID, (int)framework.CategoryID, adminId);
74+
competencyAssessmentDataService.UpdateCompetencyAssessmentVocabulary(assessmentId, adminId, framework.Vocabulary);
7275
}
7376
}
7477
return assessmentId;
@@ -83,5 +86,9 @@ public bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessment
8386
{
8487
return competencyAssessmentDataService.UpdateCompetencyAssessmentProfessionalGroup(competencyAssessmentId, adminId, nrpProfessionalGroupID);
8588
}
89+
public CompetencyAssessmentTaskStatus GetCompetencyAssessmentTaskStatus(int assessmentId, int? frameworkId)
90+
{
91+
return competencyAssessmentDataService.GetOrInsertAndReturnAssessmentTaskStatus(assessmentId, (frameworkId != null));
92+
}
8693
}
8794
}

DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ CompetencyTableRow competencyRow
175175
int? frameworkCompetencyGroupId = null;
176176
if (competencyRow.CompetencyGroup != null)
177177
{
178-
int newCompetencyGroupId = frameworkService.InsertCompetencyGroup(competencyRow.CompetencyGroup, competencyRow.GroupDescription, adminUserId, frameworkId);
178+
var newCompetencyGroupId = frameworkService.InsertCompetencyGroup(competencyRow.CompetencyGroup, competencyRow.GroupDescription, adminUserId);
179179
if (newCompetencyGroupId > 0)
180180
{
181181
frameworkCompetencyGroupId = frameworkService.InsertFrameworkCompetencyGroup(newCompetencyGroupId, frameworkId, adminUserId);
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
2+
3+
namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
4+
{
5+
public class ManageCompetencyAssessmentViewModel
6+
{
7+
public ManageCompetencyAssessmentViewModel(
8+
CompetencyAssessmentBase competencyAssessmentBase,
9+
CompetencyAssessmentTaskStatus competencyAssessmentTaskStatus
10+
)
11+
{
12+
CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
13+
PublishStatusID = competencyAssessmentBase.PublishStatusID;
14+
UserRole = competencyAssessmentBase.UserRole;
15+
CompetencyAssessmentTaskStatus = competencyAssessmentTaskStatus;
16+
Vocabulary = competencyAssessmentBase.Vocabulary;
17+
}
18+
public string CompetencyAssessmentName { get; set; }
19+
public int PublishStatusID { get; set; }
20+
public int UserRole { get; set; }
21+
public string? Vocabulary { get; set; }
22+
public CompetencyAssessmentTaskStatus CompetencyAssessmentTaskStatus { get; set; }
23+
}
24+
}

0 commit comments

Comments
 (0)