Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 });
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Models.Common;
using DigitalLearningSolutions.Data.Models.CompetencyAssessments;
using System.Collections.Generic;

Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -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 {
<partial name="Shared/_NavMenuItems" />
}
@section NavBreadcrumbs {
<nav class="nhsuk-breadcrumb" aria-label="Breadcrumb">
<div class="nhsuk-width-container">
<ol class="nhsuk-breadcrumb__list">
<li class="nhsuk-breadcrumb__item"><a class="nhsuk-breadcrumb__link trigger-loader" asp-action="ViewCompetencyAssessments" asp-route-tabname="Mine">Competency Assessments</a></li>
<li class="nhsuk-breadcrumb__item"><a class="nhsuk-breadcrumb__link trigger-loader" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">Manage Competency Assessment</a></li>
<li class="nhsuk-breadcrumb__item">Brand and category</li>
</ol>
<p class="nhsuk-breadcrumb__back"><a class="nhsuk-breadcrumb__backlink" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">Back to competency assessment detail</a></p>
</div>
</nav>
}

<h1>Edit @Model.CompetencyAssessmentName vocabulary</h1>
<form method="post">
@if (!ViewData.ModelState.IsValid)
{
<partial name="_ErrorSummary" />
}
<nhs-form-group nhs-validation-for="Vocabulary">
<fieldset class="nhsuk-fieldset">
<legend class="nhsuk-fieldset__legend nhsuk-fieldset__legend--s">
<h2 class="nhsuk-fieldset__heading">
Choose assessment vocabulary - the name given to the building blocks of your assessment.
</h2>
</legend>
<div class="nhsuk-radios">
<div class="nhsuk-radios__item">
<input class="nhsuk-radios__input" asp-for="Vocabulary" type="radio" value="Capability" aria-describedby="vocabulary-item-1-hint">
<label class="nhsuk-label nhsuk-radios__label" for="Vocabulary">
Capability | Capabilities
</label>
<div class="nhsuk-hint nhsuk-radios__hint" id="vocabulary-item-1-hint">
The attributes (skills, knowledge and behaviours) which individuals bring to the workplace.
</div>
</div>

<div class="nhsuk-radios__item">
<input class="nhsuk-radios__input" asp-for="Vocabulary" type="radio" value="Competence" aria-describedby="vocabulary-item-3-hint">
<label class="nhsuk-label nhsuk-radios__label" for="Vocabulary">
Competence | Competences
</label>
<div class="nhsuk-hint nhsuk-radios__hint" id="vocabulary-item-3-hint">
Defined standards of performance, focused on the outputs of work and observable performance.
</div>
</div>
<div class="nhsuk-radios__item">
<input class="nhsuk-radios__input" asp-for="Vocabulary" type="radio" value="Proficiency" aria-describedby="vocabulary-item-4-hint">
<label class="nhsuk-label nhsuk-radios__label" for="Vocabulary">
Proficiency | Proficiencies
</label>
<div class="nhsuk-hint nhsuk-radios__hint" id="vocabulary-item-4-hint">
The knowledge and skills that registered nurses must demonstrate when caring for people of all ages and across all care settings.
</div>
</div>
<div class="nhsuk-radios__item">
<input class="nhsuk-radios__input" asp-for="Vocabulary" type="radio" value="Competency" aria-describedby="vocabulary-item-2-hint">
<label class="nhsuk-label nhsuk-radios__label" for="Vocabulary">
Competency | Competencies
</label>
<div class="nhsuk-hint nhsuk-radios__hint" id="vocabulary-item-2-hint">
The same as capability | capabilities.<br />
The term capabilities is recommended to make a clear distinction from competences.
</div>
</div>
</div>
</fieldset>
<span nhs-validation-for="Vocabulary"></span>
</nhs-form-group>
<nhs-form-group nhs-validation-for="TaskStatus">
<vc:single-checkbox asp-for="@nameof(Model.TaskStatus)" label="Mark this task as complete" hint-text="You will still be able to make changes after marking this task as complete."></vc:single-checkbox>
</nhs-form-group>
<input name="ID" type="hidden" asp-for="ID" />
<input name="CompetencyAssessmentName" type="hidden" asp-for="CompetencyAssessmentName" />
<input name="userRole" type="hidden" asp-for="UserRole" />
<button class="nhsuk-button" type="submit">
Save
</button>
<div class="nhsuk-back-link">
<a class="nhsuk-back-link__link" asp-action="ManageCompetencyAssessment" asp-route-competencyAssessmentId="@Model.ID">
<svg class="nhsuk-icon nhsuk-icon__chevron-left" focusable='false' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M13.41 12l5.3-5.29a1 1 0 1 0-1.42-1.42L12 10.59l-5.29-5.3a1 1 0 0 0-1.42 1.42l5.3 5.29-5.3 5.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l5.29-5.3 5.29 5.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z"></path>
</svg>
Cancel
</a>
</div>
</form>
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
</li>
<li class="nhsuk-task-list__item nhsuk-task-list__item--with-link">
<div class="nhsuk-task-list__name-and-hint" aria-describedby="vocabulary-status">
<a class="nhsuk-link nhsuk-task-list__link" asp-action="AssessmentVocabulary" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
<a class="nhsuk-link nhsuk-task-list__link" asp-action="EditVocabulary" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Select assessment vocabulary (@Model.Vocabulary)
</a>
</div>
Expand Down
Loading