Skip to content

Commit d212eae

Browse files
authored
[JB][OPS-13147] add alcohol duty origins (#24)
1 parent fd863b0 commit d212eae

32 files changed

+731
-970
lines changed

app/uk/gov/hmrc/cardpaymentfrontend/controllers/CheckYourAnswersController.scala

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616

1717
package uk.gov.hmrc.cardpaymentfrontend.controllers
1818

19-
import payapi.corcommon.model.Origin
2019
import play.api.mvc.{Action, AnyContent, MessagesControllerComponents}
2120
import uk.gov.hmrc.cardpaymentfrontend.actions.{Actions, JourneyRequest}
2221
import uk.gov.hmrc.cardpaymentfrontend.models.CheckYourAnswersRow
2322
import uk.gov.hmrc.cardpaymentfrontend.models.CheckYourAnswersRow.summarise
23+
import uk.gov.hmrc.cardpaymentfrontend.models.extendedorigins.ExtendedOrigin
24+
import uk.gov.hmrc.cardpaymentfrontend.models.extendedorigins.ExtendedOrigin.OriginExtended
2425
import uk.gov.hmrc.cardpaymentfrontend.requests.RequestSupport
25-
import uk.gov.hmrc.cardpaymentfrontend.utils.OriginExtraInfo
2626
import uk.gov.hmrc.cardpaymentfrontend.views.html.CheckYourAnswersPage
2727
import uk.gov.hmrc.govukfrontend.views.Aliases.SummaryList
2828
import uk.gov.hmrc.govukfrontend.views.viewmodels.summarylist.SummaryListRow
@@ -34,23 +34,29 @@ import javax.inject.{Inject, Singleton}
3434
class CheckYourAnswersController @Inject() (
3535
actions: Actions,
3636
mcc: MessagesControllerComponents,
37-
originExtraInfo: OriginExtraInfo,
3837
checkYourAnswersPage: CheckYourAnswersPage,
3938
requestSupport: RequestSupport
4039
) extends FrontendController(mcc) {
4140
import requestSupport._
4241

4342
def renderPage: Action[AnyContent] = actions.journeyAction { implicit journeyRequest: JourneyRequest[AnyContent] =>
44-
val origin: Origin = journeyRequest.journey.origin
45-
val liftedOrigin = originExtraInfo.lift(origin)
43+
val extendedOrigin: ExtendedOrigin = journeyRequest.journey.origin.lift
4644

47-
val paymentDate: Option[CheckYourAnswersRow] = liftedOrigin.checkYourAnswersPaymentDateRow(journeyRequest)
48-
val referenceRow: Option[CheckYourAnswersRow] = liftedOrigin.checkYourAnswersReferenceRow(journeyRequest)
49-
val amountRow: Option[CheckYourAnswersRow] = liftedOrigin.checkYourAnswersAmountSummaryRow(journeyRequest)
50-
val maybeEmailRow: Option[CheckYourAnswersRow] = liftedOrigin.checkYourAnswersEmailAddressRow(journeyRequest)
51-
val cardBillingAddressRow: Option[CheckYourAnswersRow] = liftedOrigin.checkYourAnswersCardBillingAddressRow(journeyRequest)
45+
val paymentDate: Option[CheckYourAnswersRow] = extendedOrigin.checkYourAnswersPaymentDateRow(journeyRequest)
46+
val referenceRow: Option[CheckYourAnswersRow] = extendedOrigin.checkYourAnswersReferenceRow(journeyRequest)
47+
val additionalReferenceRow: Option[CheckYourAnswersRow] = extendedOrigin.checkYourAnswersAdditionalReferenceRow(journeyRequest)
48+
val amountRow: Option[CheckYourAnswersRow] = extendedOrigin.checkYourAnswersAmountSummaryRow(journeyRequest)
49+
val maybeEmailRow: Option[CheckYourAnswersRow] = extendedOrigin.checkYourAnswersEmailAddressRow(journeyRequest)
50+
val cardBillingAddressRow: Option[CheckYourAnswersRow] = extendedOrigin.checkYourAnswersCardBillingAddressRow(journeyRequest)
5251

53-
val summaryListRows: Seq[SummaryListRow] = Seq(paymentDate, referenceRow, amountRow, maybeEmailRow, cardBillingAddressRow).flatten.map(summarise)
52+
val summaryListRows: Seq[SummaryListRow] = Seq(
53+
paymentDate,
54+
referenceRow,
55+
additionalReferenceRow,
56+
amountRow,
57+
maybeEmailRow,
58+
cardBillingAddressRow
59+
).flatten.map(summarise)
5460

5561
Ok(checkYourAnswersPage(SummaryList(summaryListRows)))
5662
}

app/uk/gov/hmrc/cardpaymentfrontend/controllers/FeesController.scala

Lines changed: 13 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -16,128 +16,30 @@
1616

1717
package uk.gov.hmrc.cardpaymentfrontend.controllers
1818

19-
import payapi.corcommon.model.{Origin, Origins}
19+
import payapi.corcommon.model.Origin
2020
import play.api.mvc.{Action, AnyContent, Call, MessagesControllerComponents}
2121
import uk.gov.hmrc.cardpaymentfrontend.actions.{Actions, JourneyRequest}
2222
import uk.gov.hmrc.cardpaymentfrontend.config.AppConfig
23-
import uk.gov.hmrc.cardpaymentfrontend.models.Link
23+
import uk.gov.hmrc.cardpaymentfrontend.models.extendedorigins.ExtendedOrigin.OriginExtended
24+
import uk.gov.hmrc.cardpaymentfrontend.models.{Link, PaymentMethod}
2425
import uk.gov.hmrc.cardpaymentfrontend.requests.RequestSupport
25-
import uk.gov.hmrc.cardpaymentfrontend.utils.{OriginExtraInfo, PaymentMethod, PaymentMethods}
2626
import uk.gov.hmrc.cardpaymentfrontend.views.html.FeesPage
2727
import uk.gov.hmrc.play.bootstrap.frontend.controller.FrontendController
2828

2929
import javax.inject.{Inject, Singleton}
3030

3131
@Singleton
3232
class FeesController @Inject() (
33-
actions: Actions,
34-
appConfig: AppConfig,
35-
feesPage: FeesPage,
36-
mcc: MessagesControllerComponents,
37-
originExtraInfo: OriginExtraInfo,
38-
requestSupport: RequestSupport
33+
actions: Actions,
34+
appConfig: AppConfig,
35+
feesPage: FeesPage,
36+
mcc: MessagesControllerComponents,
37+
requestSupport: RequestSupport
3938
) extends FrontendController(mcc) {
4039

41-
private[controllers] def twoDirectDebitsPrimaryLink(origin: Origin): Option[Link] = {
42-
origin match {
43-
case Origins.BtaEpayeBill => Some(Link(
44-
href = Call("GET", "http://SomeDDUrl"),
45-
linkId = "direct-debit-link-both-primary",
46-
messageKey = "card-fees.para2.direct-debit"
47-
))
48-
case Origins.PfMgd => Some(Link(
49-
href = Call("GET", "http://SomeDDUrl"),
50-
linkId = "direct-debit-link-both-primary",
51-
messageKey = "card-fees.para2.direct-debit"
52-
))
53-
case _ => None
54-
}
55-
}
56-
57-
private[controllers] def twoDirectDebitsSecondaryLink(origin: Origin): Option[Link] = {
58-
origin match {
59-
case Origins.BtaEpayeBill => Some(Link(
60-
href = Call("GET", "http://SomeDDUrl"),
61-
linkId = "direct-debit-link-both-secondary",
62-
messageKey = "card-fees.para2.direct-debit"
63-
))
64-
case Origins.PfMgd => Some(Link(
65-
href = Call("GET", "http://SomeDDUrl"),
66-
linkId = "direct-debit-link-both-secondary",
67-
messageKey = "card-fees.para2.direct-debit"
68-
))
69-
case _ => None
70-
}
71-
}
72-
private[controllers] def altPaymentLinks(origin: Origin): Seq[Link] = {
73-
val bacsLink = Seq(
74-
Link(
75-
href = Call("GET", "http://SomeURL"),
76-
linkId = "bank-account-link-primary",
77-
messageKey = "card-fees.para2.bank-account"
78-
)
79-
)
80-
81-
val openBankingLink = if (originExtraInfo.openBankingAllowed(origin)) {
82-
Seq(Link(
83-
href = Call("GET", "http://SomeURLOpenBankingUrl"),
84-
linkId = "open-banking-link",
85-
messageKey = "card-fees.para2.open-banking"
86-
))
87-
} else Seq.empty[Link]
88-
89-
val oneKindOfDDCondition: Boolean =
90-
(originExtraInfo.variableDirectDebitAllowed(origin) && !originExtraInfo.oneOffDirectDebitAllowed(origin)) ||
91-
(!originExtraInfo.variableDirectDebitAllowed(origin) && originExtraInfo.oneOffDirectDebitAllowed(origin))
92-
93-
val oneKindOfDDlink = if (oneKindOfDDCondition) {
94-
Seq(Link(
95-
href = Call("GET", "http://SomeDDUrl"),
96-
linkId = "direct-debit-link",
97-
messageKey = "card-fees.para2.direct-debit"
98-
))
99-
} else Seq.empty[Link]
100-
101-
val twoKindsOfDDPrimary = twoDirectDebitsPrimaryLink(origin) match {
102-
case Some(link) => Seq(link)
103-
case None => Seq.empty[Link]
104-
}
105-
106-
val twoKindsOfDDSecondary = twoDirectDebitsSecondaryLink(origin) match {
107-
case Some(link) => Seq(link)
108-
case None => Seq.empty[Link]
109-
}
110-
111-
bacsLink ++ openBankingLink ++ oneKindOfDDlink ++ twoKindsOfDDSecondary ++ twoKindsOfDDPrimary
112-
}
113-
114-
//Note that when the Origin system is available this will be replaced with something more sensible
115-
def renderPage(origin: Origin): Action[AnyContent] = Action { implicit request =>
116-
val altPayments = altPaymentLinks(origin)
117-
if (altPayments.isEmpty) Redirect("http://nextpage.html")
118-
else Ok(feesPage(altPayments))
119-
}
120-
121-
def renderPage0(): Action[AnyContent] = renderPage(Origins.AppSimpleAssessment)
122-
123-
//Show open banking link
124-
def renderPage1(): Action[AnyContent] = renderPage(Origins.PfChildBenefitRepayments)
125-
126-
//Show Variable Direct Debit link
127-
def renderPage2(): Action[AnyContent] = renderPage(Origins.PfSdil)
128-
129-
//Show one off direct debit link
130-
def renderPage3(): Action[AnyContent] = renderPage(Origins.PfTpes)
131-
132-
//Two kinds of DD with a primary link
133-
def renderPage4(): Action[AnyContent] = renderPage(Origins.BtaEpayeBill)
134-
135-
// Two kinds of DD with secondary link
136-
def renderPage5(): Action[AnyContent] = renderPage(Origins.PfMgd)
137-
13840
import requestSupport._
13941

140-
def renderPageNew(): Action[AnyContent] = actions.journeyAction { implicit journeyRequest: JourneyRequest[AnyContent] =>
42+
def renderPage: Action[AnyContent] = actions.journeyAction { implicit journeyRequest: JourneyRequest[AnyContent] =>
14143
val altPayments = linksAvailableOnFeesPage(journeyRequest.journey.origin)
14244
if (altPayments.isEmpty) Redirect("http://nextpage.html")
14345
else Ok(feesPage(altPayments))
@@ -150,12 +52,11 @@ class FeesController @Inject() (
15052
private[controllers] def paymentMethodToBeShown(paymentMethod: PaymentMethod, paymentMethods: Set[PaymentMethod]): Boolean = paymentMethods.contains(paymentMethod)
15153

15254
private[controllers] def linksAvailableOnFeesPage(origin: Origin): Seq[Link] = {
153-
154-
val extendedOrigin = originExtraInfo.lift(origin)
55+
val extendedOrigin = origin.lift
15556
val paymentMethodsToShow: Set[PaymentMethod] = extendedOrigin.cardFeesPagePaymentMethods
156-
val showOpenBankingLink: Boolean = paymentMethodToBeShown(PaymentMethods.OpenBanking, paymentMethodsToShow)
157-
val showBankTransferLink: Boolean = paymentMethodToBeShown(PaymentMethods.Bacs, paymentMethodsToShow)
158-
val showOneOffDirectDebitLink: Boolean = paymentMethodToBeShown(PaymentMethods.OneOffDirectDebit, paymentMethodsToShow)
57+
val showOpenBankingLink: Boolean = paymentMethodToBeShown(PaymentMethod.OpenBanking, paymentMethodsToShow)
58+
val showBankTransferLink: Boolean = paymentMethodToBeShown(PaymentMethod.Bacs, paymentMethodsToShow)
59+
val showOneOffDirectDebitLink: Boolean = paymentMethodToBeShown(PaymentMethod.OneOffDirectDebit, paymentMethodsToShow)
15960

16061
val maybeOpenBankingLink = if (showOpenBankingLink) {
16162
Seq(Link(

app/uk/gov/hmrc/cardpaymentfrontend/controllers/OpenBankingController.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import play.api.mvc.Results.Redirect
2121
import play.api.mvc.{Action, AnyContent}
2222
import uk.gov.hmrc.cardpaymentfrontend.actions.{Actions, JourneyRequest}
2323
import uk.gov.hmrc.cardpaymentfrontend.connectors.OpenBankingConnector
24+
import uk.gov.hmrc.cardpaymentfrontend.models.extendedorigins.ExtendedOrigin.OriginExtended
2425
import uk.gov.hmrc.cardpaymentfrontend.models.openbanking.CreateSessionDataRequest
2526
import uk.gov.hmrc.cardpaymentfrontend.requests.RequestSupport
26-
import uk.gov.hmrc.cardpaymentfrontend.utils.OriginExtraInfo
2727

2828
import javax.inject.{Inject, Singleton}
2929
import scala.concurrent.ExecutionContext
@@ -32,20 +32,21 @@ import scala.concurrent.ExecutionContext
3232
class OpenBankingController @Inject() (
3333
actions: Actions,
3434
openBankingConnector: OpenBankingConnector,
35-
originExtraInfo: OriginExtraInfo,
3635
requestSupport: RequestSupport
3736
)(implicit executionContext: ExecutionContext) {
3837

3938
import requestSupport._
4039

4140
def startOpenBankingJourney: Action[AnyContent] = actions.journeyAction.async { implicit journeyRequest: JourneyRequest[AnyContent] =>
4241
val journey: Journey[JourneySpecificData] = journeyRequest.journey
43-
val createSessionDataRequest: CreateSessionDataRequest =
44-
originExtraInfo
45-
.lift(journey.origin)
42+
val createSessionDataRequest: CreateSessionDataRequest = {
43+
journey
44+
.origin
45+
.lift
4646
.openBankingOriginSpecificSessionData(journey.journeySpecificData)
4747
.map(originSpecificSessionData => CreateSessionDataRequest(journeyRequest.journey.getAmountInPence, originSpecificSessionData, journeyRequest.journey.futureDatedPayment))
4848
.getOrElse(throw new RuntimeException("Unable to build createSessionDataRequest, so cannot start an OB journey"))
49+
}
4950

5051
openBankingConnector.startOpenBankingJourney(createSessionDataRequest)
5152
.map(createSessionDataResponse => Redirect(createSessionDataResponse.nextUrl))

app/uk/gov/hmrc/cardpaymentfrontend/controllers/PaymentCompleteController.scala

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,19 @@
1616

1717
package uk.gov.hmrc.cardpaymentfrontend.controllers
1818

19-
import payapi.cardpaymentjourney.model.journey.{Journey, JourneySpecificData}
19+
import payapi.cardpaymentjourney.model.journey.{Journey, JourneySpecificData, JsdAlcoholDuty}
2020
import payapi.corcommon.model.barclays.CardCategories
2121
import play.api.i18n.Messages
2222
import play.api.mvc.{Action, AnyContent, MessagesControllerComponents}
2323
import play.twirl.api.Html
2424
import uk.gov.hmrc.cardpaymentfrontend.actions.{Actions, JourneyRequest}
25+
import uk.gov.hmrc.cardpaymentfrontend.models.extendedorigins.ExtendedOrigin.OriginExtended
2526
import uk.gov.hmrc.cardpaymentfrontend.models.{EmailAddress, creditCardCommissionRate}
2627
import uk.gov.hmrc.cardpaymentfrontend.requests.RequestSupport
2728
import uk.gov.hmrc.cardpaymentfrontend.services.EmailService
2829
import uk.gov.hmrc.cardpaymentfrontend.session.JourneySessionSupport._
2930
import uk.gov.hmrc.cardpaymentfrontend.util.SafeEquals.EqualsOps
30-
import uk.gov.hmrc.cardpaymentfrontend.utils.{DateStringBuilder, OriginExtraInfo}
31+
import uk.gov.hmrc.cardpaymentfrontend.utils.DateStringBuilder
3132
import uk.gov.hmrc.cardpaymentfrontend.views.html.PaymentCompletePage
3233
import uk.gov.hmrc.govukfrontend.views.Aliases.{HtmlContent, Text, Value}
3334
import uk.gov.hmrc.govukfrontend.views.viewmodels.summarylist.{Key, SummaryListRow}
@@ -39,7 +40,6 @@ import scala.concurrent.{ExecutionContext, Future}
3940
class PaymentCompleteController @Inject() (
4041
actions: Actions,
4142
emailService: EmailService,
42-
originExtraInfo: OriginExtraInfo,
4343
mcc: MessagesControllerComponents,
4444
paymentCompletePage: PaymentCompletePage,
4545
requestSupport: RequestSupport
@@ -67,7 +67,7 @@ class PaymentCompleteController @Inject() (
6767
taxReference = journeyRequest.journey.getReference,
6868
summaryListRows = PaymentCompleteController.buildSummaryListRows(
6969
journey = journeyRequest.journey,
70-
taxType = originExtraInfo.lift(journeyRequest.journey.origin).taxNameMessageKey
70+
taxType = journeyRequest.journey.origin.lift.taxNameMessageKey
7171
),
7272
maybeEmailAddress = maybeEmailFromSession,
7373
maybeReturnUrl = journeyRequest.journey.navigation.flatMap(_.returnUrl.map(_.value))
@@ -78,7 +78,7 @@ class PaymentCompleteController @Inject() (
7878
object PaymentCompleteController {
7979

8080
def buildSummaryListRows(journey: Journey[JourneySpecificData], taxType: String)(implicit messages: Messages): Seq[SummaryListRow] = {
81-
Seq(
81+
val consistentRows = Seq(
8282
SummaryListRow(
8383
key = Key(Text(messages("payment-complete.summary-list.tax"))),
8484
value = Value(Text(messages(taxType)))
@@ -87,7 +87,25 @@ object PaymentCompleteController {
8787
key = Key(Text(messages("payment-complete.summary-list.date"))),
8888
value = Value(Text(messages(DateStringBuilder.getDateAsString(journey.getPaidOn))))
8989
)
90-
) ++ buildAmountsSummaryListRow(journey)
90+
)
91+
92+
val taxSpecificRows: Seq[SummaryListRow] = journey.journeySpecificData match {
93+
case JsdAlcoholDuty(_, alcoholDutyChargeReference, _) =>
94+
alcoholDutyChargeReference.fold[Seq[SummaryListRow]](Seq.empty[SummaryListRow]) { alcoholDutyChargeReference =>
95+
Seq(
96+
SummaryListRow(
97+
key = Key(Text(messages("check-your-details.AlcoholDuty.charge-reference"))),
98+
value = Value(Text(alcoholDutyChargeReference.canonicalizedValue))
99+
)
100+
)
101+
}
102+
103+
case _ => Seq.empty[SummaryListRow]
104+
}
105+
106+
val amountRows = buildAmountsSummaryListRow(journey)
107+
108+
consistentRows ++ taxSpecificRows ++ amountRows
91109
}
92110

93111
def buildAmountsSummaryListRow(journey: Journey[JourneySpecificData])(implicit messages: Messages): Seq[SummaryListRow] = {

app/uk/gov/hmrc/cardpaymentfrontend/controllers/PaymentFailedController.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ import payapi.corcommon.model.{Origin, Origins}
2020
import play.api.data.Form
2121
import play.api.mvc.{Action, AnyContent, MessagesControllerComponents}
2222
import uk.gov.hmrc.cardpaymentfrontend.forms.ChooseAPaymentMethodForm
23-
import uk.gov.hmrc.cardpaymentfrontend.utils.PaymentMethods.OpenBanking
24-
import uk.gov.hmrc.cardpaymentfrontend.utils.{OriginExtraInfo, PaymentMethod}
23+
import uk.gov.hmrc.cardpaymentfrontend.models.PaymentMethod
24+
import uk.gov.hmrc.cardpaymentfrontend.models.PaymentMethod.OpenBanking
25+
import uk.gov.hmrc.cardpaymentfrontend.models.extendedorigins.ExtendedOrigin.OriginExtended
2526
import uk.gov.hmrc.cardpaymentfrontend.views.html.PaymentFailedPage
2627
import uk.gov.hmrc.play.bootstrap.frontend.controller.FrontendController
2728

@@ -30,12 +31,11 @@ import javax.inject.{Inject, Singleton}
3031
@Singleton
3132
class PaymentFailedController @Inject() (
3233
mcc: MessagesControllerComponents,
33-
paymentFailedPage: PaymentFailedPage,
34-
originExtraInfo: OriginExtraInfo
34+
paymentFailedPage: PaymentFailedPage
3535
) extends FrontendController(mcc) {
3636

3737
def renderPage(origin: Origin): Action[AnyContent] = Action { implicit request =>
38-
val liftedOrigin = originExtraInfo.lift(origin)
38+
val liftedOrigin = origin.lift
3939
val paymentMethods: Set[PaymentMethod] = liftedOrigin.paymentMethods()
4040
Ok(paymentFailedPage(origin.toTaxType.toString, paymentMethods.contains(OpenBanking), ChooseAPaymentMethodForm.form))
4141
}

app/uk/gov/hmrc/cardpaymentfrontend/forms/ChooseAPaymentMethodForm.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package uk.gov.hmrc.cardpaymentfrontend.forms
1919
import play.api.data.Form
2020
import play.api.data.Forms.{mapping, optional, text}
2121

22+
//todo use enum/adt instead of string.
2223
final case class ChooseAPaymentMethodForm(chosenMethod: Option[String])
2324

2425
object ChooseAPaymentMethodForm {

app/uk/gov/hmrc/cardpaymentfrontend/models/CheckYourAnswersRow.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,3 @@ object CheckYourAnswersRow {
5454
}
5555
}
5656
}
57-
58-
//No Json as this is not going over the wire
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright 2024 HM Revenue & Customs
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package uk.gov.hmrc.cardpaymentfrontend.models
18+
19+
sealed trait PaymentMethod
20+
21+
object PaymentMethod {
22+
23+
case object Card extends PaymentMethod
24+
25+
case object OpenBanking extends PaymentMethod
26+
27+
case object OneOffDirectDebit extends PaymentMethod
28+
29+
case object VariableDirectDebit extends PaymentMethod
30+
31+
case object PrintableDirectDebit extends PaymentMethod
32+
33+
case object Bacs extends PaymentMethod
34+
}

0 commit comments

Comments
 (0)