1616
1717namespace 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}
0 commit comments