@@ -22,12 +22,13 @@ import play.api.mvc.AnyContent
2222import play .api .mvc .MessagesControllerComponents
2323import uk .gov .hmrc .agentregistration .shared .AgentApplication
2424import uk .gov .hmrc .agentregistration .shared .ApplicationState
25- import uk .gov .hmrc .agentregistration .shared .StateOfAgreement
26- import uk .gov .hmrc .agentregistration .shared .util .SafeEquals .===
25+ import uk .gov .hmrc .agentregistration .shared .individual .IndividualProvidedDetails
26+ import uk .gov .hmrc .agentregistration .shared .risking .SubmitForRiskingRequest
27+ import uk .gov .hmrc .agentregistrationfrontend .model .taskListStatus
2728import uk .gov .hmrc .agentregistrationfrontend .action .applicant .ApplicantActions
28- import uk .gov .hmrc .agentregistrationfrontend .model .TaskListStatus
29- import uk .gov .hmrc .agentregistrationfrontend .model .TaskStatus
3029import uk .gov .hmrc .agentregistrationfrontend .services .applicant .AgentApplicationService
30+ import uk .gov .hmrc .agentregistrationfrontend .services .applicant .AgentRegistrationRiskingService
31+ import uk .gov .hmrc .agentregistrationfrontend .services .individual .IndividualProvideDetailsService
3132import uk .gov .hmrc .agentregistrationfrontend .views .html .applicant .DeclarationPage
3233
3334import javax .inject .Inject
@@ -38,14 +39,30 @@ class DeclarationController @Inject() (
3839 mcc : MessagesControllerComponents ,
3940 actions : ApplicantActions ,
4041 view : DeclarationPage ,
41- agentApplicationService : AgentApplicationService
42+ agentApplicationService : AgentApplicationService ,
43+ individualProvideDetailsService : IndividualProvideDetailsService ,
44+ agentRegistrationRiskingService : AgentRegistrationRiskingService
4245)
4346extends FrontendController (mcc, actions):
4447
45- private val baseAction : ActionBuilderWithData [DataWithApplication ] = actions
48+ private type DataWithIndividuals = List [IndividualProvidedDetails ] *: AgentApplication *: DataWithAuth
49+
50+ private val baseAction : ActionBuilderWithData [DataWithIndividuals ] = actions
4651 .getApplicationInProgress
52+ .refine:
53+ implicit request =>
54+ val agentApplication : AgentApplication = request.get
55+ individualProvideDetailsService
56+ .findAllByApplicationId(agentApplication.agentApplicationId)
57+ .map: individualsList =>
58+ request.add[List [IndividualProvidedDetails ]](individualsList)
4759 .ensure(
48- _.agentApplication.taskListStatus.declaration.canStart,
60+ condition =
61+ implicit request =>
62+ request.agentApplication
63+ .taskListStatus(request.get[List [IndividualProvidedDetails ]])
64+ .declaration
65+ .canStart,
4966 implicit request =>
5067 logger.warn(" Cannot start declaration whilst tasks are outstanding, redirecting to task list" )
5168 Redirect (AppRoutes .apply.TaskListController .show)
@@ -62,57 +79,17 @@ extends FrontendController(mcc, actions):
6279 def submit : Action [AnyContent ] = baseAction
6380 .async:
6481 implicit request =>
65- agentApplicationService
66- .upsert(
67- request.agentApplication
68- .modify(_.applicationState)
69- .setTo(ApplicationState .Submitted )
70- ).map: _ =>
71- Redirect (AppRoutes .apply.AgentApplicationController .applicationSubmitted)
72-
73- extension (agentApplication : AgentApplication )
74-
75- def taskListStatus : TaskListStatus = {
76- val contactIsComplete = agentApplication.applicantContactDetails.exists(_.isComplete)
77- val amlsDetailsCompleted = agentApplication.amlsDetails.exists(_.isComplete)
78- val agentDetailsIsComplete = agentApplication.agentDetails.exists(_.isComplete)
79- val hmrcStandardForAgentsAgreed = agentApplication.hmrcStandardForAgentsAgreed === StateOfAgreement .Agreed
80- TaskListStatus (
81- contactDetails = TaskStatus (
82- canStart = true , // Contact details can be started at any time
83- isComplete = contactIsComplete
84- ),
85- amlsDetails = TaskStatus (
86- canStart = true , // AMLS details can be started at any time
87- isComplete = amlsDetailsCompleted
88- ),
89- agentDetails = TaskStatus (
90- canStart = contactIsComplete, // Agent details can be started only when contact details are complete
91- isComplete = agentDetailsIsComplete
92- ),
93- hmrcStandardForAgents = TaskStatus (
94- canStart = true , // HMRC Standard for Agents can be started at any time
95- isComplete = hmrcStandardForAgentsAgreed
96- ),
97- listDetails = TaskStatus (
98- canStart = true , // List details can be started any time
99- isComplete = false // TODO: implement list details so completion check can be done
100- ),
101- listShare = TaskStatus (
102- canStart = false , // List sharing cannot be started until list details are completed
103- isComplete = false // TODO: implement list share so completion check can be done
104- ),
105- listTracking = TaskStatus (
106- canStart = false , // List tracking cannot be started until list share is complete
107- isComplete = false // TODO: implement list details so completion check can be done
108- ),
109- declaration = TaskStatus (
110- canStart =
111- contactIsComplete
112- && amlsDetailsCompleted
113- && agentDetailsIsComplete
114- && hmrcStandardForAgentsAgreed, // Declaration can be started only when all prior tasks are complete
115- isComplete = false // Declaration is never "complete" until submission
116- )
117- )
118- }
82+ for
83+ _ <- agentRegistrationRiskingService.submitForRisking(
84+ SubmitForRiskingRequest (
85+ agentApplication = request.agentApplication,
86+ individuals = request.get[List [IndividualProvidedDetails ]]
87+ )
88+ )
89+ _ <- agentApplicationService
90+ .upsert(
91+ request.agentApplication
92+ .modify(_.applicationState)
93+ .setTo(ApplicationState .SentForRisking )
94+ )
95+ yield Redirect (AppRoutes .apply.AgentApplicationController .applicationSubmitted)
0 commit comments