Skip to content

Commit 7b91511

Browse files
authored
Merge pull request #3381 from TechnologyEnhancedLearning/Develop/feature/TD-6149-Enrol-on-activity-retiring-self-assesment-Confirmation
TD-6149-Tracking System - Enrol on activity should display Warning message for retiring self-assessment
2 parents 327badd + 385f464 commit 7b91511

File tree

9 files changed

+209
-28
lines changed

9 files changed

+209
-28
lines changed

DigitalLearningSolutions.Data/Models/SessionData/Tracking/Delegate/Enrol/SessionEnrolDelegate.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ public class SessionEnrolDelegate
1717
public bool IsSelfAssessment { get; set; }
1818
public int AssessmentVersion { get; set; }
1919
public int? AssessmentCategoryID { get; set; }
20+
public bool ActionConfirmed { get; set; }
2021
}
2122
}

DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/Delegates/EnrolControllerTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class EnrolControllerTests
2222
private ISupervisorService supervisorService = null!;
2323
private ICourseService courseService = null!;
2424
private IEnrolService enrolService = null!;
25+
private ISelfAssessmentService selfAssessmentService = null!;
2526
private HttpRequest httpRequest = null!;
2627
private HttpResponse httpResponse = null!;
2728
private HttpContext httpContext = null!;
@@ -35,6 +36,7 @@ public void Setup()
3536
supervisorService = A.Fake<ISupervisorService>();
3637
enrolService = A.Fake<IEnrolService>();
3738
courseService = A.Fake<ICourseService>();
39+
selfAssessmentService = A.Fake<ISelfAssessmentService>();
3840
sessionEnrolDelegate = A.Fake<SessionEnrolDelegate>();
3941

4042
httpRequest = A.Fake<HttpRequest>();
@@ -46,7 +48,8 @@ public void Setup()
4648
multiPageFormService,
4749
supervisorService,
4850
enrolService,
49-
courseService)
51+
courseService,
52+
selfAssessmentService)
5053
.WithMockHttpContext(httpRequest, null, null, httpResponse)
5154
.WithMockTempData()
5255
.WithDefaultContext()

DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using DigitalLearningSolutions.Web.Extensions;
1313
using DigitalLearningSolutions.Web.Helpers;
1414
using DigitalLearningSolutions.Web.ServiceFilter;
15+
using DigitalLearningSolutions.Web.ViewModels.Common;
1516
using DigitalLearningSolutions.Web.ViewModels.Common.SearchablePage;
1617
using DigitalLearningSolutions.Web.ViewModels.Supervisor;
1718
using GDS.MultiPageFormData.Enums;
@@ -796,7 +797,7 @@ public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAsses
796797
);
797798

798799
var retirementDate = selfAssessmentService.GetSelfAssessmentById(selfAssessmentID).RetirementDate;
799-
if (CheckRetirementDate(retirementDate))
800+
if (SelfAssessmentHelper.CheckRetirementDate(retirementDate))
800801
{
801802
return RedirectToAction("ConfirmRetiringSelfAssessment", "Supervisor", new { supervisorDelegateId });
802803
}
@@ -817,14 +818,14 @@ public IActionResult ConfirmRetiringSelfAssessment(int supervisorDelegateId)
817818
).GetAwaiter().GetResult();
818819

819820
var retirementDate = selfAssessmentService.GetSelfAssessmentById((int)sessionEnrolOnRoleProfile.SelfAssessmentID).RetirementDate;
820-
if (!CheckRetirementDate((retirementDate)))
821+
if (!SelfAssessmentHelper.CheckRetirementDate((retirementDate)))
821822
{
822823
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 410 });
823824
}
824825
var model = new RetiringSelfAssessmentViewModel()
825826
{
826827
SelfAssessmentID = (int)sessionEnrolOnRoleProfile.SelfAssessmentID,
827-
SupervisorDelegateID = supervisorDelegateId,
828+
RouteID = supervisorDelegateId,
828829
RetirementDate = retirementDate,
829830
ActionConfirmed = sessionEnrolOnRoleProfile.ActionConfirmed
830831
};
@@ -853,7 +854,7 @@ public IActionResult ConfirmRetiringSelfAssessment(RetiringSelfAssessmentViewMod
853854
return RedirectToAction(
854855
"EnrolDelegateCompleteBy",
855856
"Supervisor",
856-
new { supervisorDelegateId = retiringSelfAssessment.SupervisorDelegateID }
857+
new { supervisorDelegateId = retiringSelfAssessment.RouteID }
857858
);
858859
}
859860
else
@@ -876,7 +877,7 @@ public IActionResult EnrolDelegateCompleteBy(int supervisorDelegateId, int? day,
876877
).GetAwaiter().GetResult();
877878

878879
var retirementDate = selfAssessmentService.GetSelfAssessmentById((int)sessionEnrolOnRoleProfile.SelfAssessmentID).RetirementDate;
879-
if (CheckRetirementDate(retirementDate) && !sessionEnrolOnRoleProfile.ActionConfirmed)
880+
if (SelfAssessmentHelper.CheckRetirementDate(retirementDate) && !sessionEnrolOnRoleProfile.ActionConfirmed)
880881
{
881882
return RedirectToAction("ConfirmRetiringSelfAssessment", "Supervisor", new { supervisorDelegateId });
882883
}
@@ -1030,7 +1031,7 @@ public IActionResult EnrolDelegateSummary(int supervisorDelegateId)
10301031
);
10311032

10321033
var retirementDate = selfAssessmentService.GetSelfAssessmentById((int)sessionEnrolOnRoleProfile.SelfAssessmentID).RetirementDate;
1033-
if (CheckRetirementDate(retirementDate) && !sessionEnrolOnRoleProfile.ActionConfirmed)
1034+
if (SelfAssessmentHelper.CheckRetirementDate(retirementDate) && !sessionEnrolOnRoleProfile.ActionConfirmed)
10341035
{
10351036
return RedirectToAction("ConfirmRetiringSelfAssessment", "Supervisor", new { supervisorDelegateId });
10361037
}
@@ -1586,15 +1587,5 @@ private static string RenderRazorViewToString(Controller controller, string view
15861587
return sw.GetStringBuilder().ToString();
15871588
}
15881589
}
1589-
1590-
private bool CheckRetirementDate(DateTime? date)
1591-
{
1592-
if (date == null)
1593-
return false;
1594-
1595-
DateTime retirementOffsetDate = DateTime.Today.AddDays(14);
1596-
DateTime today = DateTime.Today;
1597-
return (date >= today && date <= retirementOffsetDate);
1598-
}
15991590
}
16001591
}

DigitalLearningSolutions.Web/Controllers/TrackingSystem/Delegates/EnrolController.cs

Lines changed: 107 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@
1616

1717
namespace DigitalLearningSolutions.Web.Controllers.TrackingSystem.Delegates
1818
{
19+
using DigitalLearningSolutions.Data.Models.SessionData.Supervisor;
20+
using DigitalLearningSolutions.Data.Models.Supervisor;
1921
using DigitalLearningSolutions.Data.Utilities;
2022
using DigitalLearningSolutions.Web.ServiceFilter;
23+
using DigitalLearningSolutions.Web.ViewModels.Common;
24+
using Pipelines.Sockets.Unofficial;
2125

2226
[FeatureGate(FeatureFlags.RefactoredTrackingSystem)]
2327
[Authorize(Policy = CustomPolicies.UserCentreAdmin)]
@@ -29,18 +33,21 @@ public partial class EnrolController : Controller
2933
private readonly ISupervisorService supervisorService;
3034
private readonly IEnrolService enrolService;
3135
private readonly ICourseService courseService;
36+
private readonly ISelfAssessmentService selfAssessmentService;
3237

3338
public EnrolController(
3439
IMultiPageFormService multiPageFormService,
3540
ISupervisorService supervisorService,
3641
IEnrolService enrolService,
37-
ICourseService courseService
42+
ICourseService courseService,
43+
ISelfAssessmentService selfAssessmentService
3844
)
3945
{
4046
this.multiPageFormService = multiPageFormService;
4147
this.supervisorService = supervisorService;
4248
this.enrolService = enrolService;
4349
this.courseService = courseService;
50+
this.selfAssessmentService = selfAssessmentService;
4451
}
4552

4653
public IActionResult StartEnrolProcess(int delegateId, int delegateUserId, string delegateName)
@@ -116,6 +123,15 @@ public IActionResult Index(int delegateId, EnrolCurrentLearningViewModel enrolCu
116123
return View(model);
117124
}
118125

126+
if (sessionEnrol.AssessmentID.HasValue && sessionEnrol.AssessmentID != enrolCurrentLearningViewModel.SelectedActivity)
127+
{
128+
var delegateUserID = sessionEnrol.DelegateUserID;
129+
var userName = sessionEnrol.DelegateName;
130+
sessionEnrol = new SessionEnrolDelegate();
131+
sessionEnrol.DelegateID = delegateId;
132+
sessionEnrol.DelegateName = userName;
133+
sessionEnrol.DelegateUserID = delegateUserID;
134+
}
119135
sessionEnrol.AssessmentID = enrolCurrentLearningViewModel.SelectedActivity;
120136
var availableCourse = selfAssessments as List<AvailableCourse>;
121137
var selectedCourse = availableCourse.Find(x => x.Id == enrolCurrentLearningViewModel.SelectedActivity);
@@ -126,17 +142,74 @@ public IActionResult Index(int delegateId, EnrolCurrentLearningViewModel enrolCu
126142

127143
multiPageFormService.SetMultiPageFormData(
128144
sessionEnrol,
129-
MultiPageFormDataFeature.EnrolDelegateInActivity,
145+
MultiPageFormDataFeature.EnrolDelegateInActivity,
130146
TempData
131147
);
132148

149+
if (HasNotConfirmedRetiring(sessionEnrol.IsSelfAssessment, (int)sessionEnrol.AssessmentID, delegateId, sessionEnrol.ActionConfirmed))
150+
{
151+
return RedirectToAction("ConfirmRetiring", "Enrol", new { delegateId });
152+
}
153+
133154
return RedirectToAction(
134155
"EnrolCompleteBy",
135156
"Enrol",
136157
new { delegateId }
137158
);
138159
}
139160

161+
public IActionResult ConfirmRetiring(int delegateId)
162+
{
163+
var sessionEnrol = multiPageFormService.GetMultiPageFormData<SessionEnrolDelegate>(
164+
MultiPageFormDataFeature.EnrolDelegateInActivity,
165+
TempData
166+
).GetAwaiter().GetResult();
167+
168+
var retirementDate = selfAssessmentService.GetSelfAssessmentById((int)sessionEnrol.AssessmentID).RetirementDate;
169+
if (!SelfAssessmentHelper.CheckRetirementDate((retirementDate)))
170+
{
171+
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 410 });
172+
}
173+
var model = new RetiringSelfAssessmentViewModel()
174+
{
175+
SelfAssessmentID = (int)sessionEnrol.AssessmentID,
176+
RouteID = (int)sessionEnrol.DelegateID,
177+
RetirementDate = retirementDate,
178+
ActionConfirmed = sessionEnrol.ActionConfirmed
179+
};
180+
return View("ConfirmRetiring", model);
181+
}
182+
183+
[HttpPost]
184+
public IActionResult ConfirmRetiring(RetiringSelfAssessmentViewModel retiringSelfAssessment)
185+
{
186+
var sessionEnrol = multiPageFormService.GetMultiPageFormData<SessionEnrolDelegate>(
187+
MultiPageFormDataFeature.EnrolDelegateInActivity,
188+
TempData
189+
).GetAwaiter().GetResult();
190+
191+
sessionEnrol.AssessmentID = retiringSelfAssessment.SelfAssessmentID;
192+
sessionEnrol.ActionConfirmed = retiringSelfAssessment.ActionConfirmed;
193+
multiPageFormService.SetMultiPageFormData(
194+
sessionEnrol,
195+
MultiPageFormDataFeature.EnrolDelegateInActivity,
196+
TempData
197+
);
198+
199+
if (ModelState.IsValid && retiringSelfAssessment.ActionConfirmed)
200+
{
201+
return RedirectToAction(
202+
"EnrolCompleteBy",
203+
"Enrol",
204+
new { delegateId = retiringSelfAssessment.RouteID }
205+
);
206+
}
207+
else
208+
{
209+
return View("ConfirmRetiring", retiringSelfAssessment);
210+
}
211+
}
212+
140213
[HttpGet]
141214
[TypeFilter(
142215
typeof(RedirectToErrorEmptySessionData),
@@ -145,9 +218,15 @@ public IActionResult Index(int delegateId, EnrolCurrentLearningViewModel enrolCu
145218
public IActionResult EnrolCompleteBy(int delegateId)
146219
{
147220
var sessionEnrol = multiPageFormService.GetMultiPageFormData<SessionEnrolDelegate>(
148-
MultiPageFormDataFeature.EnrolDelegateInActivity,
149-
TempData
150-
).GetAwaiter().GetResult();
221+
MultiPageFormDataFeature.EnrolDelegateInActivity,
222+
TempData
223+
).GetAwaiter().GetResult();
224+
225+
if (HasNotConfirmedRetiring(sessionEnrol.IsSelfAssessment, (int)sessionEnrol.AssessmentID, delegateId, sessionEnrol.ActionConfirmed))
226+
{
227+
return RedirectToAction("ConfirmRetiring", "Enrol", new { delegateId });
228+
}
229+
151230
multiPageFormService.SetMultiPageFormData(
152231
sessionEnrol,
153232
MultiPageFormDataFeature.EnrolDelegateInActivity,
@@ -202,6 +281,12 @@ public IActionResult EnrolDelegateSupervisor(int delegateId)
202281
var sessionEnrol = multiPageFormService.GetMultiPageFormData<SessionEnrolDelegate>(
203282
MultiPageFormDataFeature.EnrolDelegateInActivity,
204283
TempData).GetAwaiter().GetResult();
284+
285+
if (HasNotConfirmedRetiring(sessionEnrol.IsSelfAssessment, (int)sessionEnrol.AssessmentID, delegateId, sessionEnrol.ActionConfirmed))
286+
{
287+
return RedirectToAction("ConfirmRetiring", "Enrol", new { delegateId });
288+
}
289+
205290
var supervisorList = supervisorService.GetSupervisorForEnrolDelegate(centreId.Value, sessionEnrol.AssessmentCategoryID.Value);
206291
if (!sessionEnrol.IsSelfAssessment)
207292
{
@@ -283,6 +368,12 @@ public IActionResult EnrolDelegateSupervisor(int delegateId, EnrolSupervisorView
283368
public IActionResult EnrolDelegateSummary(int delegateId)
284369
{
285370
var sessionEnrol = multiPageFormService.GetMultiPageFormData<SessionEnrolDelegate>(MultiPageFormDataFeature.EnrolDelegateInActivity, TempData).GetAwaiter().GetResult();
371+
372+
if (HasNotConfirmedRetiring(sessionEnrol.IsSelfAssessment, (int)sessionEnrol.AssessmentID, delegateId, sessionEnrol.ActionConfirmed))
373+
{
374+
return RedirectToAction("ConfirmRetiring", "Enrol", new { delegateId });
375+
}
376+
286377
var roles = supervisorService.GetSupervisorRolesBySelfAssessmentIdForSupervisor(sessionEnrol.AssessmentID.GetValueOrDefault()).ToArray();
287378
var clockUtility = new ClockUtility();
288379
var monthDiffrence = "";
@@ -303,6 +394,7 @@ public IActionResult EnrolDelegateSummary(int delegateId)
303394
model.IsSelfAssessment = sessionEnrol.IsSelfAssessment;
304395
model.SupervisorRoleName = sessionEnrol.SelfAssessmentSupervisorRoleName;
305396
model.RoleCount = roles.Count();
397+
ViewBag.actionConfirmed = sessionEnrol.ActionConfirmed;
306398
return View(model);
307399
}
308400

@@ -345,5 +437,15 @@ private int GetAdminID()
345437
{
346438
return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserAdminId);
347439
}
440+
441+
private bool HasNotConfirmedRetiring(bool IsSelfAssessment, int selfAssessmentId, int delegateId, bool actionConfirmed)
442+
{
443+
if (IsSelfAssessment)
444+
{
445+
var retirementDate = selfAssessmentService.GetSelfAssessmentById(selfAssessmentId).RetirementDate;
446+
return SelfAssessmentHelper.CheckRetirementDate(retirementDate) && !actionConfirmed;
447+
}
448+
return false;
449+
}
348450
}
349451
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace DigitalLearningSolutions.Web.Helpers
2+
{
3+
using System;
4+
5+
public static class SelfAssessmentHelper
6+
{
7+
public static bool CheckRetirementDate(DateTime? date)
8+
{
9+
if (date == null)
10+
return false;
11+
12+
DateTime retirementOffsetDate = DateTime.Today.AddDays(14);
13+
DateTime today = DateTime.Today;
14+
return (date >= today && date <= retirementOffsetDate);
15+
}
16+
}
17+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
namespace DigitalLearningSolutions.Web.ViewModels.Supervisor
1+
namespace DigitalLearningSolutions.Web.ViewModels.Common
22
{
33
using DigitalLearningSolutions.Web.Attributes;
44
using System;
55

66
public class RetiringSelfAssessmentViewModel
77
{
88
public int SelfAssessmentID { get; set; }
9-
public int SupervisorDelegateID { get; set; }
9+
public int RouteID { get; set; }
1010
public DateTime? RetirementDate { get; set; }
1111
[BooleanMustBeTrue(ErrorMessage = "Please tick the checkbox to confirm you wish to perform this action")]
1212
public bool ActionConfirmed { get; set; }

DigitalLearningSolutions.Web/Views/Supervisor/ConfirmRetiringSelfAssessment.cshtml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@using DigitalLearningSolutions.Web.Extensions
2-
@using DigitalLearningSolutions.Web.ViewModels.Supervisor
2+
@using DigitalLearningSolutions.Web.ViewModels.Common
33
@using Microsoft.Extensions.Configuration
44
@model RetiringSelfAssessmentViewModel;
55
@inject IConfiguration Configuration;
@@ -40,12 +40,12 @@
4040
Continue
4141
</button>
4242
@Html.HiddenFor(m => m.SelfAssessmentID)
43-
@Html.HiddenFor(m => m.SupervisorDelegateID)
43+
@Html.HiddenFor(m => m.RouteID)
4444
@Html.HiddenFor(m => m.RetirementDate)
4545
</form>
4646
<div class="nhsuk-back-link">
4747
<a class="nhsuk-back-link__link" asp-controller="Supervisor"
48-
asp-action="DelegateProfileAssessments" asp-route-supervisorDelegateId="@Model.SupervisorDelegateID">
48+
asp-action="DelegateProfileAssessments" asp-route-supervisorDelegateId="@Model.RouteID">
4949
<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">
5050
<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>
5151
</svg>

0 commit comments

Comments
 (0)