Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions app/controllers/verify/VerifyCheckYourAnswersController.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright 2026 HM Revenue & Customs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package controllers.verify

import controllers.actions.*
import play.api.i18n.{I18nSupport, MessagesApi}
import play.api.mvc.{Action, AnyContent, MessagesControllerComponents}
import uk.gov.hmrc.play.bootstrap.frontend.controller.FrontendBaseController
import viewmodels.checkAnswers.verify.*
import viewmodels.govuk.summarylist.*
import views.html.verify.VerifyCheckYourAnswersView

import javax.inject.Inject

class VerifyCheckYourAnswersController @Inject() (
override val messagesApi: MessagesApi,
identify: IdentifierAction,
getData: DataRetrievalAction,
requireData: DataRequiredAction,
val controllerComponents: MessagesControllerComponents,
view: VerifyCheckYourAnswersView
) extends FrontendBaseController
with I18nSupport {

def onPageLoad(): Action[AnyContent] = (identify andThen getData andThen requireData) { implicit request =>
val ua = request.userAnswers
val list = SummaryListViewModel(
rows = Seq(
SelectSubcontractorSummary.row(ua),
ReverifyExistingSubcontractorsYesNoSummary.row(ua),
ContractorEmailConfirmationStoredSummary.row(ua),
ContractorEmailConfirmationNotStoredSummary.row(ua),
EmailAddressSummary.row(ua)
).flatten
)
Ok(view(list))
}

def onSubmit(): Action[AnyContent] = (identify andThen getData andThen requireData) { implicit request =>
Redirect(controllers.verify.routes.SubmissionSendingController.onPageLoad())
}
}
65 changes: 35 additions & 30 deletions app/navigation/verify/VerifyNavigator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,14 @@ class VerifyNavigator @Inject() () extends NavigatorForJourney {
userAnswers => navigatorFromContractorEmailConfirmationNotStoredPage(NormalMode)(userAnswers)
case SelectSubcontractorPage =>
userAnswers => navigatorFromSelectSubcontractorPage(NormalMode)(userAnswers)
case ReverifyExistingSubcontractorsYesNoPage =>
userAnswers => navigatorFromReverifyExistingSubcontractorsYesNoPage(NormalMode)(userAnswers)
case ContractorEmailConfirmationStoredPage =>
userAnswers => navigatorFromContractorEmailConfirmationStoredPage(NormalMode)(userAnswers)
case SelectSubcontractorsToReverifyPage =>
_ => controllers.verify.routes.ContractorEmailConfirmationStoredController.onPageLoad(NormalMode)
case EmailAddressPage =>
_ => controllers.verify.routes.EmailAddressController.onPageLoad(NormalMode)
_ => controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
case _ => _ => controllers.routes.JourneyRecoveryController.onPageLoad()
}

Expand All @@ -57,54 +59,57 @@ class VerifyNavigator @Inject() () extends NavigatorForJourney {
userAnswers => navigatorFromContractorEmailConfirmationNotStoredPage(CheckMode)(userAnswers)
case SelectSubcontractorPage =>
userAnswers => navigatorFromSelectSubcontractorPage(CheckMode)(userAnswers)
case ReverifyExistingSubcontractorsYesNoPage =>
userAnswers => navigatorFromReverifyExistingSubcontractorsYesNoPage(CheckMode)(userAnswers)
case ContractorEmailConfirmationStoredPage =>
userAnswers => navigatorFromContractorEmailConfirmationStoredPage(CheckMode)(userAnswers)
case SelectSubcontractorsToReverifyPage =>
_ => controllers.verify.routes.ContractorEmailConfirmationStoredController.onPageLoad(CheckMode)
case EmailAddressPage =>
_ => controllers.verify.routes.EmailAddressController.onPageLoad(CheckMode)
_ => controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
case _ => _ => controllers.routes.JourneyRecoveryController.onPageLoad()

}

private def navigatorFromContractorEmailConfirmationNotStoredPage(mode: Mode)(ua: UserAnswers): Call =
(ua.get(ContractorEmailConfirmationNotStoredPage), mode) match {
case (Some(true), _) =>
// ToDo: navigate to next page after the page is implemented
controllers.verify.routes.ContractorEmailConfirmationNotStoredController.onPageLoad(NormalMode)

case (Some(false), NormalMode) =>
// ToDo: navigate to next page after the page is implemented
controllers.verify.routes.ContractorEmailConfirmationNotStoredController.onPageLoad(NormalMode)
case (Some(false), CheckMode) =>
// ToDo: navigate CYA page after the page is implemented and implement the logic to handle dependent pages
routes.IndexController.onPageLoad()

case _ =>
routes.IndexController.onPageLoad()
case (Some(true), _) => controllers.verify.routes.EmailAddressController.onPageLoad(NormalMode)
case (Some(false), _) => controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
case _ => controllers.routes.JourneyRecoveryController.onPageLoad()
}

private def navigatorFromSelectSubcontractorPage(mode: Mode)(ua: UserAnswers): Call = {
val _ = ua
controllers.verify.routes.SelectSubcontractorController.onPageLoad(mode)
mode match {
case NormalMode => controllers.verify.routes.ReverifyExistingSubcontractorsYesNoController.onPageLoad(NormalMode)
case CheckMode => controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
}
}

private def navigatorFromContractorEmailConfirmationStoredPage(mode: Mode)(ua: UserAnswers): Call =
(ua.get(ContractorEmailConfirmationStoredPage), mode) match {
case (Some(CurrentEmail), _) =>
// TODO: navigate to VF-06 Verify declaration once implemented
private def navigatorFromReverifyExistingSubcontractorsYesNoPage(mode: Mode)(ua: UserAnswers): Call =
(ua.get(ReverifyExistingSubcontractorsYesNoPage), mode) match {
case (Some(true), _) =>
// TODO: navigate to VF-03c Subcontractors to reverify once implemented
controllers.routes.JourneyRecoveryController.onPageLoad()

case (Some(DifferentEmail), _) =>
// TODO: navigate to SM-01b Enter alternate email once implemented
controllers.routes.JourneyRecoveryController.onPageLoad()

case (Some(DoNotSend), _) =>
// TODO: navigate to VF-06 Verify declaration once implemented
case (Some(false), NormalMode) =>
val hasStoredEmail = ua
.get(NewestVerificationBatchResponsePage)
.flatMap(_.scheme.headOption)
.flatMap(_.emailAddress)
.isDefined
if (hasStoredEmail) controllers.verify.routes.ContractorEmailConfirmationStoredController.onPageLoad(NormalMode)
else controllers.verify.routes.ContractorEmailConfirmationNotStoredController.onPageLoad(NormalMode)
case (Some(false), CheckMode) =>
controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
case _ =>
controllers.routes.JourneyRecoveryController.onPageLoad()
}

case _ =>
controllers.routes.JourneyRecoveryController.onPageLoad()
private def navigatorFromContractorEmailConfirmationStoredPage(mode: Mode)(ua: UserAnswers): Call =
(ua.get(ContractorEmailConfirmationStoredPage), mode) match {
case (Some(CurrentEmail), _) => controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
case (Some(DifferentEmail), _) => controllers.verify.routes.EmailAddressController.onPageLoad(NormalMode)
case (Some(DoNotSend), _) => controllers.verify.routes.VerifyCheckYourAnswersController.onPageLoad()
case _ => controllers.routes.JourneyRecoveryController.onPageLoad()
}

}
41 changes: 41 additions & 0 deletions app/views/verify/VerifyCheckYourAnswersView.scala.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
@*
* Copyright 2026 HM Revenue & Customs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*@

@import views.html.components._

@this(
layout: templates.Layout,
govukSummaryList: GovukSummaryList,
h1: H1,
h2: H2,
govukButton: GovukButton,
formHelper: FormWithCSRF
)

@(list: SummaryList)(implicit request: Request[_], messages: Messages)

@layout(pageTitle = titleNoForm(messages("verify.verifyCheckYourAnswers.title"))) {

@formHelper(action = controllers.verify.routes.VerifyCheckYourAnswersController.onSubmit(), Symbol("autoComplete") -> "off") {

@h1("verify.verifyCheckYourAnswers.heading")
@h2("verify.verifyCheckYourAnswers.subHeading")

@govukSummaryList(list)

@govukButton(ButtonViewModel(messages("verify.verifyCheckYourAnswers.confirm")))
}
}
64 changes: 33 additions & 31 deletions conf/app.routes
Original file line number Diff line number Diff line change
Expand Up @@ -350,51 +350,53 @@ POST /add/trust/check-your-answers controllers.add.trust.TrustCh
GET /add/trust/subcontractor-added controllers.add.SubcontractorAddedController.trustSubcontractorAdded()

# Verify
GET /verify/confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onPageLoad(mode: Mode = NormalMode)
POST /verify/confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onSubmit(mode: Mode = CheckMode)
GET /verify/confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onPageLoad(mode: Mode = NormalMode)
POST /verify/confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-confirmation-email-not-stored controllers.verify.ContractorEmailConfirmationNotStoredController.onSubmit(mode: Mode = CheckMode)

GET /verify/verification-declaration controllers.verify.VerificationDeclarationController.onPageLoad(mode: Mode = NormalMode)
POST /verify/verification-declaration controllers.verify.VerificationDeclarationController.onSubmit(mode: Mode = NormalMode)
GET /verify/verification-declaration controllers.verify.VerificationDeclarationController.onPageLoad(mode: Mode = NormalMode)
POST /verify/verification-declaration controllers.verify.VerificationDeclarationController.onSubmit(mode: Mode = NormalMode)

GET /verify/submitting-verification-request controllers.verify.SubmissionSendingController.onPageLoad()
GET /verify/submitting-verification-request controllers.verify.SubmissionSendingController.onPageLoad()

GET /verify/no-subcontractors-added controllers.verify.NoSubcontractorsAddedController.onPageLoad()
GET /verify/no-subcontractors-added controllers.verify.NoSubcontractorsAddedController.onPageLoad()

GET /verify/newest controllers.verify.NewestVerificationBatchController.onPageLoad()
GET /verify/newest controllers.verify.NewestVerificationBatchController.onPageLoad()

GET /verify/current controllers.verify.CurrentVerificationBatchController.onPageLoad()
GET /verify/current controllers.verify.CurrentVerificationBatchController.onPageLoad()

GET /verify/verification-request-in-progress controllers.verify.VerificationRequestInProgressController.onPageLoad()
GET /verify/verification-request-in-progress controllers.verify.VerificationRequestInProgressController.onPageLoad()

GET /verify/confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onPageLoad(mode: Mode = NormalMode)
POST /verify/confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onSubmit(mode: Mode = CheckMode)
GET /verify/confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onPageLoad(mode: Mode = NormalMode)
POST /verify/confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-confirmation-email-stored controllers.verify.ContractorEmailConfirmationStoredController.onSubmit(mode: Mode = CheckMode)

GET /verify/select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onPageLoad(mode: Mode = NormalMode, page: Int ?= 1)
POST /verify/select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onSubmit(mode: Mode = NormalMode, page: Int ?= 1)
GET /verify/change-select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onPageLoad(mode: Mode = CheckMode, page: Int ?= 1)
POST /verify/change-select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onSubmit(mode: Mode = CheckMode, page: Int ?= 1)

GET /verify/select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onPageLoad(mode: Mode = NormalMode, page: Int ?= 1)
POST /verify/select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onSubmit(mode: Mode = NormalMode, page: Int ?= 1)
GET /verify/change-select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onPageLoad(mode: Mode = CheckMode, page: Int ?= 1)
POST /verify/change-select-subcontractors-to-reverify controllers.verify.SelectSubcontractorsToReverifyController.onSubmit(mode: Mode = CheckMode, page: Int ?= 1)
GET /verify/select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onPageLoad(mode: Mode = NormalMode, page: Int ?= 1)
POST /verify/select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onSubmit(mode: Mode = NormalMode, page: Int ?= 1)
GET /verify/change-select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onPageLoad(mode: Mode = CheckMode, page: Int ?= 1)
POST /verify/change-select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onSubmit(mode: Mode = CheckMode, page: Int ?= 1)

GET /verify/select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onPageLoad(mode: Mode = NormalMode, page: Int ?= 1)
POST /verify/select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onSubmit(mode: Mode = NormalMode, page: Int ?= 1)
GET /verify/change-select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onPageLoad(mode: Mode = CheckMode, page: Int ?= 1)
POST /verify/change-select-subcontractors-to-verify controllers.verify.SelectSubcontractorController.onSubmit(mode: Mode = CheckMode, page: Int ?= 1)

GET /verify/enter-confirmation-email controllers.verify.EmailAddressController.onPageLoad(mode: Mode = NormalMode)
POST /verify/enter-confirmation-email controllers.verify.EmailAddressController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-enter-confirmation-email controllers.verify.EmailAddressController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-enter-confirmation-email controllers.verify.EmailAddressController.onSubmit(mode: Mode = CheckMode)
GET /verify/enter-confirmation-email controllers.verify.EmailAddressController.onPageLoad(mode: Mode = NormalMode)
POST /verify/enter-confirmation-email controllers.verify.EmailAddressController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-enter-confirmation-email controllers.verify.EmailAddressController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-enter-confirmation-email controllers.verify.EmailAddressController.onSubmit(mode: Mode = CheckMode)

GET /verify/reverify-existing-subcontractors controllers.verify.ReverifyExistingSubcontractorsYesNoController.onPageLoad(mode: Mode = NormalMode)
POST /verify/reverify-existing-subcontractors controllers.verify.ReverifyExistingSubcontractorsYesNoController.onSubmit(mode: Mode = NormalMode)
GET /verify/change-reverify-existing-subcontractors controllers.verify.ReverifyExistingSubcontractorsYesNoController.onPageLoad(mode: Mode = CheckMode)
POST /verify/change-reverify-existing-subcontractors controllers.verify.ReverifyExistingSubcontractorsYesNoController.onSubmit(mode: Mode = CheckMode)

GET /verify/no-new-subcontractors-to-verify controllers.verify.VerifyYourSubcontractorsYesNoController.onPageLoad
POST /verify/no-new-subcontractors-to-verify controllers.verify.VerifyYourSubcontractorsYesNoController.onSubmit
GET /verify/no-new-subcontractors-to-verify controllers.verify.VerifyYourSubcontractorsYesNoController.onPageLoad
POST /verify/no-new-subcontractors-to-verify controllers.verify.VerifyYourSubcontractorsYesNoController.onSubmit

GET /verify/problem-with-verification-warning controllers.verify.VerifyDepartmentalErrorController.onPageLoad()

GET /verify/problem-with-verification-warning controllers.verify.VerifyDepartmentalErrorController.onPageLoad()
GET /verify/check-your-answers controllers.verify.VerifyCheckYourAnswersController.onPageLoad()
POST /verify/check-your-answers controllers.verify.VerifyCheckYourAnswersController.onSubmit()
Loading