Skip to content

Commit 0773de9

Browse files
Merge pull request #77 from hmrc/DTR-3147
DTR-3147 - Screen AS-C5 Do you know the UTR for [Company]?
2 parents 3563c9f + 40493c5 commit 0773de9

File tree

16 files changed

+498
-67
lines changed

16 files changed

+498
-67
lines changed

app/controllers/add/company/CompanyUtrYesNoController.scala

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import controllers.actions.*
2020
import forms.add.company.CompanyUtrYesNoFormProvider
2121
import models.Mode
2222
import navigation.Navigator
23-
import pages.add.company.CompanyUtrYesNoPage
23+
import pages.add.company.{CompanyNamePage, CompanyUtrYesNoPage}
2424
import play.api.i18n.{I18nSupport, MessagesApi}
2525
import play.api.mvc.{Action, AnyContent, MessagesControllerComponents}
2626
import repositories.SessionRepository
@@ -47,26 +47,35 @@ class CompanyUtrYesNoController @Inject() (
4747
val form = formProvider()
4848

4949
def onPageLoad(mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData) { implicit request =>
50+
request.userAnswers
51+
.get(CompanyNamePage)
52+
.map { companyName =>
53+
val preparedForm = request.userAnswers.get(CompanyUtrYesNoPage) match {
54+
case None => form
55+
case Some(value) => form.fill(value)
56+
}
5057

51-
val preparedForm = request.userAnswers.get(CompanyUtrYesNoPage) match {
52-
case None => form
53-
case Some(value) => form.fill(value)
54-
}
55-
56-
Ok(view(preparedForm, mode))
58+
Ok(view(preparedForm, mode, companyName))
59+
}
60+
.getOrElse(Redirect(controllers.routes.JourneyRecoveryController.onPageLoad()))
5761
}
5862

5963
def onSubmit(mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData).async {
6064
implicit request =>
61-
form
62-
.bindFromRequest()
63-
.fold(
64-
formWithErrors => Future.successful(BadRequest(view(formWithErrors, mode))),
65-
value =>
66-
for {
67-
updatedAnswers <- Future.fromTry(request.userAnswers.set(CompanyUtrYesNoPage, value))
68-
_ <- sessionRepository.set(updatedAnswers)
69-
} yield Redirect(navigator.nextPage(CompanyUtrYesNoPage, mode, updatedAnswers))
70-
)
65+
request.userAnswers
66+
.get(CompanyNamePage)
67+
.map { companyName =>
68+
form
69+
.bindFromRequest()
70+
.fold(
71+
formWithErrors => Future.successful(BadRequest(view(formWithErrors, mode, companyName))),
72+
value =>
73+
for {
74+
updatedAnswers <- Future.fromTry(request.userAnswers.set(CompanyUtrYesNoPage, value))
75+
_ <- sessionRepository.set(updatedAnswers)
76+
} yield Redirect(navigator.nextPage(CompanyUtrYesNoPage, mode, updatedAnswers))
77+
)
78+
}
79+
.getOrElse(Future.successful(Redirect(controllers.routes.JourneyRecoveryController.onPageLoad())))
7180
}
7281
}

app/forms/add/company/CompanyEmailAddressFormProvider.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ class CompanyEmailAddressFormProvider @Inject() extends Mappings {
3535
)
3636
)
3737
)
38-
38+
3939
}

app/navigation/Navigator.scala

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ class Navigator @Inject() () {
6060
_ => controllers.add.company.routes.CompanyAddressYesNoController.onPageLoad(NormalMode)
6161
case CompanyContactOptionsPage =>
6262
userAnswers => navigatorFromCompanyContactOptionsPage(NormalMode)(userAnswers)
63-
case CompanyEmailAddressPage => _ => controllers.add.company.routes.CompanyEmailAddressController.onPageLoad(NormalMode)
63+
case CompanyEmailAddressPage =>
64+
_ => controllers.add.company.routes.CompanyEmailAddressController.onPageLoad(NormalMode)
6465
case PartnershipNamePage =>
6566
_ => controllers.add.partnership.routes.PartnershipHasUtrYesNoController.onPageLoad(NormalMode)
6667
case PartnershipHasUtrYesNoPage => userAnswers => navigatorFromPartnershipHasUtrYesNoPage(NormalMode)(userAnswers)
@@ -94,6 +95,8 @@ class Navigator @Inject() () {
9495
userAnswers => navigatorFromPartnershipNominatedPartnerUtrYesNoPage(NormalMode)(userAnswers)
9596
case CompanyAddressPage =>
9697
_ => controllers.add.company.routes.CompanyAddressController.onPageLoad(NormalMode)
98+
case CompanyUtrYesNoPage =>
99+
userAnswers => navigatorFromCompanyUtrYesNoPage(NormalMode)(userAnswers)
97100
case PartnershipMobileNumberPage =>
98101
_ => controllers.add.partnership.routes.PartnershipMobileNumberController.onPageLoad(NormalMode)
99102
case PartnershipPhoneNumberPage =>
@@ -129,13 +132,15 @@ class Navigator @Inject() () {
129132
userAnswers => navigatorFromPartnershipNominatedPartnerUtrYesNoPage(CheckMode)(userAnswers)
130133
case CompanyAddressPage =>
131134
_ => controllers.add.company.routes.CompanyAddressController.onPageLoad(CheckMode)
132-
case CompanyEmailAddressPage =>
135+
case CompanyEmailAddressPage =>
133136
_ => controllers.add.company.routes.CompanyEmailAddressController.onPageLoad(CheckMode)
134137
case PartnershipMobileNumberPage =>
135138
_ => controllers.add.partnership.routes.PartnershipMobileNumberController.onPageLoad(CheckMode)
136139
case PartnershipPhoneNumberPage => _ => controllers.add.routes.CheckYourAnswersController.onPageLoad()
137140
case CompanyAddressYesNoPage =>
138141
_ => controllers.add.company.routes.CompanyAddressYesNoController.onPageLoad(CheckMode)
142+
case CompanyUtrYesNoPage =>
143+
userAnswers => navigatorFromCompanyUtrYesNoPage(CheckMode)(userAnswers)
139144
case CompanyPhoneNumberPage =>
140145
_ => controllers.add.company.routes.CompanyPhoneNumberController.onPageLoad(CheckMode)
141146
case _ => _ => controllers.add.routes.CheckYourAnswersController.onPageLoad()
@@ -325,6 +330,15 @@ class Navigator @Inject() () {
325330
case (Some(false), CheckMode) => controllers.add.routes.CheckYourAnswersController.onPageLoad()
326331
case (None, _) => routes.JourneyRecoveryController.onPageLoad()
327332
}
333+
private def navigatorFromCompanyUtrYesNoPage(mode: Mode)(userAnswers: UserAnswers): Call =
334+
(userAnswers.get(CompanyUtrYesNoPage), mode) match {
335+
case (Some(true), _) =>
336+
controllers.add.company.routes.CompanyUtrController.onPageLoad(mode)
337+
case (Some(false), NormalMode) =>
338+
controllers.add.company.routes.CompanyCrnYesNoController.onPageLoad(NormalMode)
339+
case (Some(false), CheckMode) => controllers.add.routes.CheckYourAnswersController.onPageLoad()
340+
case (None, _) => routes.JourneyRecoveryController.onPageLoad()
341+
}
328342

329343
private def navigatorFromPartnershipNominatedPartnerCrnYesNoPage(mode: Mode)(userAnswers: UserAnswers): Call =
330344
(userAnswers.get(PartnershipNominatedPartnerCrnYesNoPage), mode) match {

app/pages/add/company/CompanyUtrYesNoPage.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,23 @@
1616

1717
package pages.add.company
1818

19+
import models.UserAnswers
1920
import pages.QuestionPage
2021
import play.api.libs.json.JsPath
2122

23+
import scala.util.Try
24+
2225
case object CompanyUtrYesNoPage extends QuestionPage[Boolean] {
2326

2427
override def path: JsPath = JsPath \ toString
2528

2629
override def toString: String = "companyUtrYesNo"
30+
31+
override def cleanup(value: Option[Boolean], userAnswers: UserAnswers): Try[UserAnswers] =
32+
if value.contains(false) then {
33+
userAnswers
34+
.remove(CompanyUtrPage)
35+
} else {
36+
super.cleanup(value, userAnswers)
37+
}
2738
}

app/views/add/company/CompanyUtrYesNoView.scala.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
govukButton: GovukButton
2323
)
2424

25-
@(form: Form[_], mode: Mode)(implicit request: Request[_], messages: Messages)
25+
@(form: Form[_], mode: Mode, name: String)(implicit request: Request[_], messages: Messages)
2626

2727
@layout(pageTitle = title(form, messages("companyUtrYesNo.title"))) {
2828

@@ -35,8 +35,9 @@
3535
@govukRadios(
3636
RadiosViewModel.yesNo(
3737
field = form("value"),
38-
legend = LegendViewModel(messages("companyUtrYesNo.heading")).asPageHeading()
39-
)
38+
legend = LegendViewModel(messages("companyUtrYesNo.heading", name)).asPageHeading().withCssClass("govuk-fieldset__legend--l")
39+
).withHint(Hint(
40+
content = Messages("companyUtrYesNo.hint")))
4041
)
4142

4243
@govukButton(

conf/app.routes

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,10 @@ POST /companyMobileNumber controllers.add.company.
235235
GET /changeCompanyMobileNumber controllers.add.company.CompanyMobileNumberController.onPageLoad(mode: Mode = CheckMode)
236236
POST /changeCompanyMobileNumber controllers.add.company.CompanyMobileNumberController.onSubmit(mode: Mode = CheckMode)
237237

238-
GET /companyUtrYesNo controllers.add.company.CompanyUtrYesNoController.onPageLoad(mode: Mode = NormalMode)
239-
POST /companyUtrYesNo controllers.add.company.CompanyUtrYesNoController.onSubmit(mode: Mode = NormalMode)
240-
GET /changeCompanyUtrYesNo controllers.add.company.CompanyUtrYesNoController.onPageLoad(mode: Mode = CheckMode)
241-
POST /changeCompanyUtrYesNo controllers.add.company.CompanyUtrYesNoController.onSubmit(mode: Mode = CheckMode)
238+
GET /add/company/company-has-utr controllers.add.company.CompanyUtrYesNoController.onPageLoad(mode: Mode = NormalMode)
239+
POST /add/company/company-has-utr controllers.add.company.CompanyUtrYesNoController.onSubmit(mode: Mode = NormalMode)
240+
GET /add/company/change-company-has-utr controllers.add.company.CompanyUtrYesNoController.onPageLoad(mode: Mode = CheckMode)
241+
POST /add/company/change-company-has-utr controllers.add.company.CompanyUtrYesNoController.onSubmit(mode: Mode = CheckMode)
242242

243243
GET /companyUtr controllers.add.company.CompanyUtrController.onPageLoad(mode: Mode = NormalMode)
244244
POST /companyUtr controllers.add.company.CompanyUtrController.onSubmit(mode: Mode = NormalMode)

conf/messages.en

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -551,11 +551,12 @@ companyMobileNumber.error.required = Enter companyMobileNumber
551551
companyMobileNumber.error.length = CompanyMobileNumber must be 100 characters or less
552552
companyMobileNumber.change.hidden = CompanyMobileNumber
553553

554-
companyUtrYesNo.title = companyUtrYesNo
555-
companyUtrYesNo.heading = companyUtrYesNo
556-
companyUtrYesNo.checkYourAnswersLabel = companyUtrYesNo
557-
companyUtrYesNo.error.required = Select yes if companyUtrYesNo
558-
companyUtrYesNo.change.hidden = CompanyUtrYesNo
554+
companyUtrYesNo.title = Do you know the Unique Taxpayer Reference for this company?
555+
companyUtrYesNo.heading = Do you know the Unique Taxpayer Reference for {0}?
556+
companyUtrYesNo.hint = This information will be used to verify the company as a subcontractor
557+
companyUtrYesNo.checkYourAnswersLabel = Add UTR?
558+
companyUtrYesNo.error.required = Select whether you know the Unique Taxpayer Reference (UTR) for this company
559+
companyUtrYesNo.change.hidden = UTR
559560

560561
companyUtr.title = companyUtr
561562
companyUtr.heading = companyUtr

test/controllers/add/company/CompanyEmailAddressControllerSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class CompanyEmailAddressControllerSpec extends SpecBase with MockitoSugar {
127127

128128
val view = application.injector.instanceOf[CompanyEmailAddressView]
129129

130-
val result = route(application, request).value
130+
val result = route(application, request).value
131131

132132
status(result) mustEqual BAD_REQUEST
133133
contentAsString(result) mustEqual view(boundForm, NormalMode, companyName)(
@@ -173,7 +173,7 @@ class CompanyEmailAddressControllerSpec extends SpecBase with MockitoSugar {
173173

174174
running(application) {
175175
val request = FakeRequest(GET, companyEmailAddressRoute)
176-
val result = route(application, request).value
176+
val result = route(application, request).value
177177

178178
status(result) mustEqual SEE_OTHER
179179
redirectLocation(result).value mustEqual

0 commit comments

Comments
 (0)