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