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 @@ -4,9 +4,14 @@
using DigitalLearningSolutions.Web.Models;
using DigitalLearningSolutions.Web.Services;
using DigitalLearningSolutions.Web.ViewModels.Frameworks.Import;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using GDS.MultiPageFormData.Enums;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.DotNet.Scaffolding.Shared.Project;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace DigitalLearningSolutions.Web.Controllers.FrameworksController
{
Expand Down Expand Up @@ -87,15 +92,69 @@ public IActionResult ImportCompleted()
catch (InvalidHeadersException)
{
FileHelper.DeleteFile(webHostEnvironment, data.CompetenciesFileName);
return View("ImportFailed");
return View("Developer/Import/ImportFailed");
}
}
[Route("/Framework/{frameworkId}/{tabname}/Import/AssessmentQuestions")]
public IActionResult AddAssessmentQuestions()
{
var data = GetBulkUploadData();

return View();
var adminId = GetAdminId();
var defaultQuestions = frameworkService.GetFrameworkDefaultQuestionsById(data.FrameworkId, adminId);
if (!data.DefaultQuestionIDs.Any() && defaultQuestions.Any() && data.AddDefaultAssessmentQuestions == true)
{
var defaultQuestionsList = new List<int>();
foreach (var question in defaultQuestions)
{
defaultQuestionsList.Add(question.ID);
}
data.DefaultQuestionIDs = defaultQuestionsList;
setBulkUploadData(data);
}
var questionList = frameworkService.GetAssessmentQuestions(data.FrameworkId, adminId).ToList();
var questionSelectList = new SelectList(questionList, "ID", "Label");
var model = new AddAssessmentQuestionsViewModel
(
data.FrameworkId,
data.FrameworkName,
data.FrameworkVocubulary,
data.PublishStatusID,
data.CompetenciesToAddCount,
data.CompetenciesToUpdateCount,
defaultQuestions,
questionSelectList
);
model.AddDefaultAssessmentQuestions = data.AddDefaultAssessmentQuestions;
model.AddCustomAssessmentQuestion = data.AddCustomAssessmentQuestion;
model.DefaultAssessmentQuestionIDs = data.DefaultQuestionIDs;
model.CustomAssessmentQuestionID = data.CustomAssessmentQuestionID;
return View("Developer/Import/AddAssessmentQuestions", model);
}
[HttpPost]
[Route("/Framework/{frameworkId}/{tabname}/Import/AssessmentQuestions")]
public IActionResult AddAssessmentQuestions(AddAssessmentQuestionsFormData model)
{
var data = GetBulkUploadData();
data.AddDefaultAssessmentQuestions = model.AddDefaultAssessmentQuestions;
if (model.AddDefaultAssessmentQuestions)
{
data.DefaultQuestionIDs = model.DefaultAssessmentQuestionIDs;
}
else
{
data.DefaultQuestionIDs = [];
}
data.AddCustomAssessmentQuestion = model.AddCustomAssessmentQuestion;
if (model.AddCustomAssessmentQuestion)
{
data.CustomAssessmentQuestionID = model.CustomAssessmentQuestionID;
}
else
{
data.CustomAssessmentQuestionID = null;
}
setBulkUploadData(data);
return RedirectToAction("AddQuestionsToWhichCompetencies");
}
private void setupBulkUploadData(int frameworkId, int adminUserID, string competenciessFileName, string tabName, bool isNotBlank)
{
Expand Down
6 changes: 4 additions & 2 deletions DigitalLearningSolutions.Web/Models/BulkCompetenciesData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ public BulkCompetenciesData(DetailFramework framework, int adminUserId, string c
public int AdminUserId { get; set; }
public bool IsNotBlank { get; set; }
public string CompetenciesFileName { get; set; }
public List<int> AssessmentQuestionIDs { get; set; }
public int? AddAssessmentQuestionOption { get; set; }
public List<int> DefaultQuestionIDs { get; set; } = [];
public int? CustomAssessmentQuestionID { get; set; }
public bool AddDefaultAssessmentQuestions { get; set; } = true;
public bool AddCustomAssessmentQuestion { get; set; } = false;
public int CompetenciesToProcessCount { get; set; }
public int CompetenciesToAddCount { get; set; }
public int CompetenciesToUpdateCount { get; set; }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Collections.Generic;

namespace DigitalLearningSolutions.Web.ViewModels.Frameworks.Import
{
public class AddAssessmentQuestionsFormData
{
public bool AddDefaultAssessmentQuestions { get; set; }
public bool AddCustomAssessmentQuestion { get; set; }
public List<int> DefaultAssessmentQuestionIDs { get; set; }
public int? CustomAssessmentQuestionID { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using DigitalLearningSolutions.Data.Models.Frameworks;
using DigitalLearningSolutions.Web.Helpers;
using Microsoft.AspNetCore.Mvc.Rendering;
using System.Collections.Generic;

namespace DigitalLearningSolutions.Web.ViewModels.Frameworks.Import
{
public class AddAssessmentQuestionsViewModel(
int frameworkId,
string frameworkName,
string frameworkVocabulary,
int publishStatusId,
int newCompetencies,
int existingCompetencies,
IEnumerable<AssessmentQuestion> defaultQuestions,
SelectList questionSelectList
) : AddAssessmentQuestionsFormData
{
public int FrameworkID { get; set; } = frameworkId;
public string FrameworkName { get; set; } = frameworkName;
public string FrameworkVocabularySingular { get; set; } = FrameworkVocabularyHelper.VocabularySingular(frameworkVocabulary);
public string FrameworkVocabularyPlural { get; set; } = FrameworkVocabularyHelper.VocabularyPlural(frameworkVocabulary);
public int PublishStatusID { get; set; } = publishStatusId;
public int NewCompetencies { get; set; } = newCompetencies;
public int ExistingCompetencies { get; set; } = existingCompetencies;
public IEnumerable<AssessmentQuestion>? DefaultQuestions { get; set; } = defaultQuestions;
public SelectList? QuestionSelectList { get; set; } = questionSelectList;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
@using DigitalLearningSolutions.Web.Extensions
@using DigitalLearningSolutions.Web.ViewModels.Frameworks.Import

@model AddAssessmentQuestionsViewModel

@{
ViewData["Application"] = "Framework Service";
ViewData["HeaderPathName"] = "Framework Service";
var errorHasOccurred = !ViewData.ModelState.IsValid;
var checkListErrorClass = !ViewData.ModelState.IsValid && Model.AddDefaultAssessmentQuestions == null ? "nhsuk-form-group nhsuk-form-group--error" : "nhsuk-form-group";
ViewData["Title"] = errorHasOccurred ? "Error: Add Assessment Questions" : "Add Assessment Questions";
var cancelLinkData = Html.GetRouteValues();
var hintTextString = Model.NewCompetencies != 0 && Model.ExistingCompetencies != 0 ? "new and/or updated " : (Model.NewCompetencies == 0 ? "updated " : "new ");
}
<link rel="stylesheet" href="@Url.Content("~/css/frameworks/frameworksShared.css")" asp-append-version="true">
@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="ViewFrameworks" asp-route-tabname="Mine">Frameworks</a></li>
<li class="nhsuk-breadcrumb__item"><a class="nhsuk-breadcrumb__link trigger-loader" asp-action="ViewFramework" asp-route-frameworkId="@ViewContext.RouteData.Values["frameworkId"]" asp-route-tabname="Structure">Framework Structure</a></li>
<li class="nhsuk-breadcrumb__item">Bulk upload</li>
</ol>
<p class="nhsuk-breadcrumb__back"><a class="nhsuk-breadcrumb__backlink" asp-action="ViewFramework" asp-route-frameworkId="@ViewContext.RouteData.Values["frameworkId"]" asp-route-tabname="Structure">Back to framework structure</a></p>
</div>
</nav>
}
<div class="nhsuk-grid-row">
<div class="nhsuk-grid-column-full">
<div class="nhsuk-u-reading-width">
@if (errorHasOccurred)
{
<vc:error-summary order-of-property-names="@(new []{ nameof(AddAssessmentQuestionsFormData.DefaultAssessmentQuestionIDs), nameof(AddAssessmentQuestionsFormData.CustomAssessmentQuestionID) })" />
}
<form enctype="multipart/form-data" method="post">
<div class="nhsuk-form-group">
<fieldset class="nhsuk-fieldset" aria-describedby="@(!ViewData.ModelState.IsValid && Model.AddDefaultAssessmentQuestions == true && !Model.DefaultAssessmentQuestionIDs.Any() ? "check-list-error" : "")">
<legend class="nhsuk-fieldset__legend nhsuk-fieldset__legend--l">
<h1 class="nhsuk-fieldset__heading">
@ViewData["Title"]
</h1>
</legend>
<div class="nhsuk-hint" id="contact-hint">
Which assessment questions would you like to attach to the @hintTextString @Model.FrameworkVocabularyPlural.ToLower()?
</div>
<div class="nhsuk-checkboxes nhsuk-checkboxes--conditional">
@if (Model.DefaultQuestions.Any())
{
<div class="nhsuk-checkboxes__item">
<input class="nhsuk-checkboxes__input" id="defaultQuestions" type="checkbox" asp-for="@Model.AddDefaultAssessmentQuestions" aria-controls="conditional-default-questions" aria-expanded="false">
<label class="nhsuk-label nhsuk-checkboxes__label" for="defaultQuestions">
Default framework questions
</label>
<div class="nhsuk-hint nhsuk-checkboxes__hint" id="custom-question-hint">
choose which default questions associated with this framework to add to the imported and/or updated @Model.FrameworkVocabularyPlural.ToLower()
</div>
<div class="nhsuk-checkboxes__conditional nhsuk-checkboxes__conditional--hidden" id="conditional-default-questions">

<div class="nhsuk-form-group">
<div class="nhsuk-checkboxes">
@foreach (var (defaultQuestion, index) in Model.DefaultQuestions.Select((t, i) => (t, i)))
{
<div class="nhsuk-checkboxes__item">
<input class="nhsuk-checkboxes__input default-question-checkbox"
type="checkbox"
name="DefaultAssessmentQuestionIDs"
id="[email protected]"
checked="@Model.DefaultAssessmentQuestionIDs.Contains(@defaultQuestion.ID)"
value="@defaultQuestion.ID" />
<label class="nhsuk-label nhsuk-checkboxes__label word-break" for="[email protected]">
@defaultQuestion.Question
</label>
</div>
}
</div>
</div>
</div>
</div>
}
<div class="nhsuk-checkboxes__item">
<input class="nhsuk-checkboxes__input" id="customQuestion" type="checkbox" asp-for="@Model.AddCustomAssessmentQuestion" aria-controls="conditional-custom-question" aria-expanded="false" aria-describedby="custom-question-hint">
<label class="nhsuk-label nhsuk-checkboxes__label" for="customQuestion">
Custom assessment question
</label>
</div>
<div class="nhsuk-checkboxes__conditional nhsuk-checkboxes__conditional--hidden" id="conditional-custom-question">

<label class="nhsuk-label" for="select-question">
Add an existing assessment question to the uploaded @Model.FrameworkVocabularyPlural.ToLower()
</label>
<select class="nhsuk-select nhsuk-u-width-three-quarters" id="select-question" asp-items="@Model.QuestionSelectList" asp-for="@Model.CustomAssessmentQuestionID"></select>
</div>
</div>
</fieldset>
</div>
<button class="nhsuk-button" type="submit">Next</button>
</form>
<vc:back-link asp-controller="Frameworks" asp-action="Index" asp-all-route-data="@null" link-text="Cancel" />
</div>
</div>
</div>
Loading
Loading