1717package controllers .organisation
1818
1919import controllers .actions .*
20+ import controllers .routes
2021import forms .organisation .HaveUTRFormProvider
21- import models .{Mode , UniqueTaxpayerReference }
22+ import models .{ChangeMode , Mode , NormalMode , ProvideMode , UserAnswers }
2223import navigation .Navigator
24+ import pages .orgWithoutId .OrgWithoutIdBusinessNamePage
2325import pages .organisation .HaveUTRPage
2426import play .api .Logging
27+ import play .api .data .Form
2528import play .api .i18n .{I18nSupport , MessagesApi }
26- import play .api .mvc .{Action , AnyContent , MessagesControllerComponents }
29+ import play .api .mvc .{Action , AnyContent , Call , MessagesControllerComponents }
2730import repositories .SessionRepository
28- import services .RegistrationService
2931import uk .gov .hmrc .play .bootstrap .frontend .controller .FrontendBaseController
32+ import utils .UserAnswersHelper
3033import views .html .organisation .HaveUTRView
3134
3235import javax .inject .Inject
@@ -40,17 +43,16 @@ class HaveUTRController @Inject() (
4043 getData : DataRetrievalAction ,
4144 submissionLock : SubmissionLockAction ,
4245 requireData : DataRequiredAction ,
43- service : RegistrationService ,
44- retrieveCtUTR : CtUtrRetrievalAction ,
4546 formProvider : HaveUTRFormProvider ,
4647 val controllerComponents : MessagesControllerComponents ,
4748 view : HaveUTRView
4849)(implicit ec : ExecutionContext )
4950 extends FrontendBaseController
5051 with I18nSupport
51- with Logging {
52+ with Logging
53+ with UserAnswersHelper {
5254
53- val form = formProvider()
55+ val form : Form [ Boolean ] = formProvider()
5456
5557 def onPageLoad (mode : Mode ): Action [AnyContent ] =
5658 (identify() andThen getData() andThen submissionLock andThen requireData) { implicit request =>
@@ -70,7 +72,45 @@ class HaveUTRController @Inject() (
7072 for {
7173 updatedAnswers <- Future .fromTry(request.userAnswers.set(HaveUTRPage , value))
7274 _ <- sessionRepository.set(updatedAnswers)
73- } yield Redirect (navigator.nextPage(HaveUTRPage , mode, updatedAnswers))
75+ } yield Redirect (
76+ handleRedirect(
77+ mode = mode,
78+ oldUserAnswers = request.userAnswers,
79+ newUserAnswers = updatedAnswers,
80+ newValue = value
81+ )
82+ )
7483 )
7584 }
85+
86+ private def handleRedirect (
87+ mode : Mode ,
88+ oldUserAnswers : UserAnswers ,
89+ newUserAnswers : UserAnswers ,
90+ newValue : Boolean
91+ ): Call =
92+ mode match {
93+ case NormalMode => navigator.nextPage(HaveUTRPage , mode, newUserAnswers)
94+ case _ =>
95+ val hasChanged = ! oldUserAnswers.get(HaveUTRPage ).contains(newValue)
96+ changeModeNavigation(newValue = newValue, hasChanged = hasChanged, newUserAnswers)
97+ }
98+
99+ private def changeModeNavigation (newValue : Boolean , hasChanged : Boolean , newUserAnswers : UserAnswers ): Call =
100+ if (newValue) {
101+ controllers.organisation.routes.YourUniqueTaxpayerReferenceController .onPageLoad(ChangeMode )
102+ } else {
103+ (hasChanged, isSoleTrader(newUserAnswers)) match {
104+ case (true , true ) => controllers.individual.routes.HaveNiNumberController .onPageLoad(NormalMode )
105+ case (true , false ) => controllers.orgWithoutId.routes.OrgWithoutIdBusinessNameController .onPageLoad(NormalMode )
106+ case (false , true ) => controllers.individual.routes.HaveNiNumberController .onPageLoad(ChangeMode )
107+ case (false , false ) =>
108+ if (newUserAnswers.get(OrgWithoutIdBusinessNamePage ).isDefined) {
109+ controllers.routes.CheckYourAnswersController .onPageLoad()
110+ } else {
111+ controllers.orgWithoutId.routes.OrgWithoutIdBusinessNameController .onPageLoad(NormalMode )
112+ }
113+ }
114+ }
115+
76116}
0 commit comments