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 { + +} +@section NavBreadcrumbs { + +} + +

Edit @Model.CompetencyAssessmentName vocabulary

+
+ @if (!ViewData.ModelState.IsValid) + { + + } + +
+ +

+ Choose assessment vocabulary - the name given to the building blocks of your assessment. +

+
+
+
+ + +
+ The attributes (skills, knowledge and behaviours) which individuals bring to the workplace. +
+
+ +
+ + +
+ Defined standards of performance, focused on the outputs of work and observable performance. +
+
+
+ + +
+ The knowledge and skills that registered nurses must demonstrate when caring for people of all ages and across all care settings. +
+
+
+ + +
+ The same as capability | capabilities.
+ The term capabilities is recommended to make a clear distinction from competences. +
+
+
+
+ +
+ + + + + + + + + diff --git a/DigitalLearningSolutions.Web/Views/CompetencyAssessments/ManageCompetencyAssessment.cshtml b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/ManageCompetencyAssessment.cshtml index b35a725942..92a8691086 100644 --- a/DigitalLearningSolutions.Web/Views/CompetencyAssessments/ManageCompetencyAssessment.cshtml +++ b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/ManageCompetencyAssessment.cshtml @@ -87,7 +87,7 @@