diff --git a/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs b/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs
index 2a3347a146..2a7fc8723b 100644
--- a/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs
+++ b/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs
@@ -40,6 +40,7 @@ int categoryId
bool UpdateCompetencyAssessmentDescription(int competencyAssessmentId, int adminId, string competencyAssessmentDescription);
bool UpdateIntroductoryTextTaskStatus(int assessmentId, bool taskStatus);
bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus);
+ bool UpdateVocabularyTaskStatus(int assessmentId, bool taskStatus);
//INSERT DATA
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName);
bool InsertSelfAssessmentFramework(int adminId, int selfAssessmentId, int frameworkId);
@@ -399,5 +400,23 @@ public bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus)
}
return true;
}
+
+ public bool UpdateVocabularyTaskStatus(int assessmentId, bool taskStatus)
+ {
+ var numberOfAffectedRows = connection.Execute(
+ @"UPDATE SelfAssessmentTaskStatus SET VocabularyTaskStatus = @taskStatus
+ WHERE SelfAssessmentId = @assessmentId",
+ new { assessmentId, taskStatus }
+ );
+ if (numberOfAffectedRows < 1)
+ {
+ logger.LogWarning(
+ "Not updating VocabularyTaskStatus as db update failed. " +
+ $"assessmentId: {assessmentId}, taskStatus: {taskStatus}"
+ );
+ return false;
+ }
+ return true;
+ }
}
}
diff --git a/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs
index 3e0571783b..652f2e087e 100644
--- a/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs
+++ b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs
@@ -335,5 +335,36 @@ public IActionResult EditBranding(EditBrandingViewModel model)
competencyAssessmentService.UpdateBrandingTaskStatus(model.ID, model.TaskStatus ?? false);
return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
}
+ [Route("/CompetencyAssessments/{competencyAssessmentId}/Vocabulary/")]
+ public IActionResult EditVocabulary(int competencyAssessmentId)
+ {
+ var adminId = GetAdminID();
+ CompetencyAssessmentBase? competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
+ if (competencyAssessmentBase == null)
+ {
+ logger.LogWarning($"Failed to load Vocabulary page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}");
+ return StatusCode(500);
+ }
+ if (competencyAssessmentBase.UserRole < 2)
+ {
+ return StatusCode(403);
+ }
+ var competencyAssessmentTaskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, null);
+ var model = new EditVocabularyViewModel(competencyAssessmentBase, competencyAssessmentTaskStatus.VocabularyTaskStatus);
+ return View(model);
+ }
+ [HttpPost]
+ [Route("/CompetencyAssessments/{competencyAssessmentId}/Vocabulary/")]
+ public IActionResult SaveVocabulary(EditVocabularyViewModel model)
+ {
+ if (!ModelState.IsValid)
+ {
+ return View("EditVocabulary", model);
+ }
+ var adminId = GetAdminID();
+ var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentVocabulary(model.ID, adminId, model.Vocabulary);
+ competencyAssessmentService.UpdateVocabularyTaskStatus(model.ID, model.TaskStatus ?? false);
+ return RedirectToAction("ManageCompetencyAssessment", new { competencyAssessmentId = model.ID });
+ }
}
}
diff --git a/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs b/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs
index c2b516313e..3b19d98920 100644
--- a/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs
+++ b/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs
@@ -1,4 +1,5 @@
using DigitalLearningSolutions.Data.DataServices;
+using DigitalLearningSolutions.Data.Models.Common;
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
using System.Collections.Generic;
@@ -28,10 +29,12 @@ public interface ICompetencyAssessmentService
bool UpdateCompetencyAssessmentDescription(int assessmentId, int adminId, string description);
bool UpdateCompetencyAssessmentBranding(int assessmentId, int adminId, int brandID, int categoryID);
bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus);
+ bool UpdateCompetencyAssessmentVocabulary(int assessmentId, int adminId, string vocabulary);
+ bool UpdateVocabularyTaskStatus(int assessmentId, bool taskStatus);
//INSERT DATA
int InsertCompetencyAssessment(int adminId, int centreId, string competencyAssessmentName, int? frameworkId);
-
+
}
public class CompetencyAssessmentService : ICompetencyAssessmentService
{
@@ -119,5 +122,15 @@ public bool UpdateBrandingTaskStatus(int assessmentId, bool taskStatus)
{
return competencyAssessmentDataService.UpdateBrandingTaskStatus(assessmentId, taskStatus);
}
+
+ bool ICompetencyAssessmentService.UpdateCompetencyAssessmentVocabulary(int assessmentId, int adminId, string vocabulary)
+ {
+ return competencyAssessmentDataService.UpdateCompetencyAssessmentVocabulary(assessmentId, adminId, vocabulary);
+ }
+
+ bool ICompetencyAssessmentService.UpdateVocabularyTaskStatus(int assessmentId, bool taskStatus)
+ {
+ return competencyAssessmentDataService.UpdateVocabularyTaskStatus(assessmentId, taskStatus);
+ }
}
}
diff --git a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/EditVocabularyViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/EditVocabularyViewModel.cs
new file mode 100644
index 0000000000..c68c90f85e
--- /dev/null
+++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/EditVocabularyViewModel.cs
@@ -0,0 +1,24 @@
+using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
+using System.ComponentModel.DataAnnotations;
+
+namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
+{
+ public class EditVocabularyViewModel
+ {
+ public EditVocabularyViewModel() { }
+ public EditVocabularyViewModel(CompetencyAssessmentBase competencyAssessmentBase, bool? taskStatus)
+ {
+ ID = competencyAssessmentBase.ID;
+ CompetencyAssessmentName = competencyAssessmentBase.CompetencyAssessmentName;
+ Vocabulary = competencyAssessmentBase.Vocabulary;
+ UserRole = competencyAssessmentBase.UserRole;
+ TaskStatus = taskStatus;
+ }
+ public int ID { get; set; }
+ public string CompetencyAssessmentName { get; set; } = string.Empty;
+ [Required(ErrorMessage = "Select a vocabulary option")]
+ public string Vocabulary { get; set; }
+ public int UserRole { get; set; }
+ public bool? TaskStatus { get; set; }
+ }
+}
diff --git a/DigitalLearningSolutions.Web/Views/CompetencyAssessments/EditVocabulary.cshtml b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/EditVocabulary.cshtml
new file mode 100644
index 0000000000..3b32db2a58
--- /dev/null
+++ b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/EditVocabulary.cshtml
@@ -0,0 +1,98 @@
+@using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments
+@model EditVocabularyViewModel
+@{
+ ViewData["Title"] = "Assessment Branding";
+ ViewData["Application"] = "Framework Service";
+ ViewData["HeaderPathName"] = "Framework Service";
+}
+
+@section NavMenuItems {
+