Skip to content

Commit

Permalink
Merge pull request #358 from hmrc/SASS-9185
Browse files Browse the repository at this point in the history
Rentals & RaR - Adjustments: Non-PIA: Create 'Unused residential cost…
  • Loading branch information
cmantzoukashmrc authored Sep 9, 2024
2 parents 6bff806 + 841f9a1 commit 8b0cb08
Show file tree
Hide file tree
Showing 13 changed files with 97 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class AdjustmentsCheckYourAnswersController @Inject() (
PropertyIncomeAllowanceSummary.row(taxYear, request.userAnswers, Rentals),
RenovationAllowanceBalancingChargeSummary.row(taxYear, request.userAnswers, Rentals),
ResidentialFinanceCostSummary.row(taxYear, request.userAnswers, Rentals),
UnusedResidentialFinanceCostSummary.row(taxYear, request.userAnswers)
UnusedResidentialFinanceCostSummary.row(taxYear, request.userAnswers, Rentals)
).flatten
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package controllers.adjustments

import controllers.actions._
import forms.adjustments.UnusedResidentialFinanceCostFormProvider
import models.{Mode, UserAnswers}
import models.{Mode, PropertyType, UserAnswers}
import navigation.Navigator
import pages.adjustments.UnusedResidentialFinanceCostPage
import play.api.i18n.{I18nSupport, MessagesApi}
Expand All @@ -31,46 +31,48 @@ import views.html.adjustments.UnusedResidentialFinanceCostView
import javax.inject.Inject
import scala.concurrent.{ExecutionContext, Future}

class UnusedResidentialFinanceCostController @Inject()(
override val messagesApi: MessagesApi,
sessionRepository: SessionRepository,
navigator: Navigator,
identify: IdentifierAction,
getData: DataRetrievalAction,
requireData: DataRequiredAction,
formProvider: UnusedResidentialFinanceCostFormProvider,
val controllerComponents: MessagesControllerComponents,
view: UnusedResidentialFinanceCostView,
sessionService: SessionService
)(implicit ec: ExecutionContext) extends FrontendBaseController with I18nSupport {
class UnusedResidentialFinanceCostController @Inject() (
override val messagesApi: MessagesApi,
sessionRepository: SessionRepository,
navigator: Navigator,
identify: IdentifierAction,
getData: DataRetrievalAction,
requireData: DataRequiredAction,
formProvider: UnusedResidentialFinanceCostFormProvider,
val controllerComponents: MessagesControllerComponents,
view: UnusedResidentialFinanceCostView,
sessionService: SessionService
)(implicit ec: ExecutionContext)
extends FrontendBaseController with I18nSupport {


def onPageLoad(taxYear: Int, mode: Mode): Action[AnyContent] = (identify andThen getData) {
implicit request =>
val form = formProvider(request.user.isAgentMessageKey)
if (request.userAnswers.isEmpty) {
sessionService.createNewEmptySession(request.userId)
}
val preparedForm = request.userAnswers.getOrElse(UserAnswers(request.userId)).get(UnusedResidentialFinanceCostPage) match {
case None => form
def onPageLoad(taxYear: Int, mode: Mode, propertyType: PropertyType): Action[AnyContent] = (identify andThen getData) { implicit request =>
val form = formProvider(request.user.isAgentMessageKey)
if (request.userAnswers.isEmpty) {
sessionService.createNewEmptySession(request.userId)
}
val preparedForm =
request.userAnswers.getOrElse(UserAnswers(request.userId)).get(UnusedResidentialFinanceCostPage(propertyType)) match {
case None => form
case Some(value) => form.fill(value)
}

Ok(view(preparedForm, taxYear, mode))
Ok(view(preparedForm, taxYear, mode, propertyType))
}

def onSubmit(taxYear: Int, mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData).async {
def onSubmit(taxYear: Int, mode: Mode, propertyType: PropertyType): Action[AnyContent] = (identify andThen getData andThen requireData).async {
implicit request =>
val form = formProvider(request.user.isAgentMessageKey)
form.bindFromRequest().fold(
formWithErrors =>
Future.successful(BadRequest(view(formWithErrors, taxYear, mode))),

value =>
for {
updatedAnswers <- Future.fromTry(request.userAnswers.set(UnusedResidentialFinanceCostPage, value))
_ <- sessionRepository.set(updatedAnswers)
} yield Redirect(navigator.nextPage(UnusedResidentialFinanceCostPage, taxYear, mode, request.userAnswers, updatedAnswers))
)
form
.bindFromRequest()
.fold(
formWithErrors => Future.successful(BadRequest(view(formWithErrors, taxYear, mode, propertyType))),
value =>
for {
updatedAnswers <- Future.fromTry(request.userAnswers.set(UnusedResidentialFinanceCostPage(propertyType), value))
_ <- sessionRepository.set(updatedAnswers)
} yield Redirect(
navigator.nextPage(UnusedResidentialFinanceCostPage(propertyType), taxYear, mode, request.userAnswers, updatedAnswers)
)
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ object PropertyPeriodSessionRecoveryExtensions {
ua3 <- ua2.set(PropertyIncomeAllowancePage(Rentals), adjustments.propertyIncomeAllowance)
ua4 <- ua3.set(RenovationAllowanceBalancingChargePage(Rentals), adjustments.renovationAllowanceBalancingCharge)
ua5 <- ua4.set(ResidentialFinanceCostPage(Rentals), adjustments.residentialFinanceCost)
ua6 <- ua5.set(UnusedResidentialFinanceCostPage, adjustments.unusedResidentialFinanceCost)
ua6 <- ua5.set(UnusedResidentialFinanceCostPage(Rentals), adjustments.unusedResidentialFinanceCost)
} yield ua6
}

Expand Down
6 changes: 3 additions & 3 deletions app/navigation/Navigator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,8 @@ class Navigator @Inject() () {
case RenovationAllowanceBalancingChargePage(Rentals) =>
taxYear => _ => _ => ResidentialFinanceCostController.onPageLoad(taxYear, NormalMode, Rentals)
case ResidentialFinanceCostPage(Rentals) =>
taxYear => _ => _ => UnusedResidentialFinanceCostController.onPageLoad(taxYear, NormalMode)
case UnusedResidentialFinanceCostPage =>
taxYear => _ => _ => UnusedResidentialFinanceCostController.onPageLoad(taxYear, NormalMode, Rentals)
case UnusedResidentialFinanceCostPage(Rentals) =>
taxYear =>
_ =>
_ =>
Expand Down Expand Up @@ -487,7 +487,7 @@ class Navigator @Inject() () {
// Adjustments
case PrivateUseAdjustmentPage(Rentals) | PropertyIncomeAllowancePage(Rentals) | RenovationAllowanceBalancingChargePage(
Rentals
) | ResidentialFinanceCostPage(Rentals) | UnusedResidentialFinanceCostPage =>
) | ResidentialFinanceCostPage(Rentals) | UnusedResidentialFinanceCostPage(Rentals) =>
taxYear => _ => _ => AdjustmentsCheckYourAnswersController.onPageLoad(taxYear)
case BalancingChargePage(Rentals) =>
taxYear =>
Expand Down
6 changes: 3 additions & 3 deletions app/pages/adjustments/UnusedResidentialFinanceCostPage.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@

package pages.adjustments

import models.Rentals
import models.{PropertyType, Rentals}
import pages.PageConstants.adjustmentsPath
import pages.QuestionPage
import play.api.libs.json.JsPath

case object UnusedResidentialFinanceCostPage extends QuestionPage[BigDecimal] {
case class UnusedResidentialFinanceCostPage(propertyType: PropertyType) extends QuestionPage[BigDecimal] {

override def path: JsPath = JsPath \ adjustmentsPath(Rentals) \ toString
override def path: JsPath = JsPath \ adjustmentsPath(propertyType) \ toString

override def toString: String = "unusedResidentialFinanceCost"
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
package viewmodels.checkAnswers.adjustments

import controllers.adjustments.routes
import models.{CheckMode, UserAnswers}
import models.{CheckMode, PropertyType, UserAnswers}
import pages.adjustments.UnusedResidentialFinanceCostPage
import play.api.i18n.Messages
import uk.gov.hmrc.govukfrontend.views.viewmodels.summarylist.SummaryListRow
Expand All @@ -27,15 +27,15 @@ import viewmodels.implicits._

object UnusedResidentialFinanceCostSummary {

def row(taxYear: Int, answers: UserAnswers)(implicit messages: Messages): Option[SummaryListRow] =
answers.get(UnusedResidentialFinanceCostPage).map {
def row(taxYear: Int, answers: UserAnswers, propertyType: PropertyType)(implicit messages: Messages): Option[SummaryListRow] =
answers.get(UnusedResidentialFinanceCostPage(propertyType)).map {
answer =>

SummaryListRowViewModel(
key = KeyViewModel("unusedResidentialFinanceCost.checkYourAnswersLabel")withCssClass(keyCssClass),
value = ValueViewModel(bigDecimalCurrency(answer)).withCssClass(valueCssClass),
actions = Seq(
ActionItemViewModel("site.change", routes.UnusedResidentialFinanceCostController.onPageLoad(taxYear, CheckMode).url)
ActionItemViewModel("site.change", routes.UnusedResidentialFinanceCostController.onPageLoad(taxYear, CheckMode, propertyType).url)
.withVisuallyHiddenText(messages("unusedResidentialFinanceCost.change.hidden"))
)
)
Expand Down
15 changes: 4 additions & 11 deletions app/views/adjustments/UnusedResidentialFinanceCostView.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,33 +27,26 @@
)


@(form: Form[_], taxYear: Int, mode: Mode)(implicit request: Request[_], messages: Messages)
@(form: Form[_], taxYear: Int, mode: Mode, propertyType: PropertyType )(implicit request: Request[_], messages: Messages)

@layout(pageTitle = title(form, messages("unusedResidentialFinanceCost.title"))) {

<h1 class="govuk-heading-l">@messages("unusedResidentialFinanceCost.heading")</h1>

@formHelper(action = routes.UnusedResidentialFinanceCostController.onSubmit(taxYear, mode), Symbol("autoComplete") -> "off") {
@formHelper(action = routes.UnusedResidentialFinanceCostController.onSubmit(taxYear, mode, propertyType), Symbol("autoComplete") -> "off") {

@if(form.errors.nonEmpty) {
@govukErrorSummary(ErrorSummaryViewModel(form))
}

<details class="govuk-details" data-module="govuk-details">
<summary class="govuk-details__summary">
<span class="govuk-details__summary-text">
@messages("unusedResidentialFinanceCost.details.content.text")
</span>
</summary>
<div class="govuk-details__text">

<p class="govuk-body">@messages("unusedResidentialFinanceCost.details.content.link.content")</p>
<p class="govuk-body">@messages("unusedResidentialFinanceCost.details.content.link.intro")
<a href="@messages("unusedResidentialFinanceCost.details.content.link.href")" class="govuk-link" target="_blank" rel="noreferrer noopener">
@messages("unusedResidentialFinanceCost.details.content.link.text")
</a>
</p>
</div>
</details>


@govukInput(
InputViewModel(
Expand Down
13 changes: 9 additions & 4 deletions conf/app.routes
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,10 @@ POST /:taxYear/rentals/adjustments/residential-finance-cost
GET /:taxYear/rentals/adjustments/change-residential-finance-cost controllers.adjustments.ResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = Rentals)
POST /:taxYear/rentals/adjustments/change-residential-finance-cost controllers.adjustments.ResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = Rentals)

GET /:taxYear/rentals/adjustments/unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = NormalMode)
POST /:taxYear/rentals/adjustments/unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = NormalMode)
GET /:taxYear/rentals/adjustments/change-unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = CheckMode)
POST /:taxYear/rentals/adjustments/change-unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = CheckMode)
GET /:taxYear/rentals/adjustments/unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = NormalMode, propertyType: PropertyType = Rentals)
POST /:taxYear/rentals/adjustments/unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = NormalMode, propertyType: PropertyType = Rentals)
GET /:taxYear/rentals/adjustments/change-unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = Rentals)
POST /:taxYear/rentals/adjustments/change-unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = Rentals)

GET /:taxYear/rentals/adjustments/check-your-answers controllers.adjustments.AdjustmentsCheckYourAnswersController.onPageLoad(taxYear : Int)
POST /:taxYear/rentals/adjustments/check-your-answers controllers.adjustments.AdjustmentsCheckYourAnswersController.onSubmit(taxYear : Int)
Expand Down Expand Up @@ -744,3 +744,8 @@ POST /:taxYear/rentals-rent-a-room/adjustments/private-use-adjustment
GET /:taxYear/rentals-rent-a-room/adjustments/change-private-use-adjustment controllers.adjustments.PrivateUseAdjustmentController.onPageLoad(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = RentalsRentARoom)
POST /:taxYear/rentals-rent-a-room/adjustments/change-private-use-adjustment controllers.adjustments.PrivateUseAdjustmentController.onSubmit(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = RentalsRentARoom)

GET /:taxYear/rentals-rent-a-room/adjustments/unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = NormalMode, propertyType: PropertyType = RentalsRentARoom)
POST /:taxYear/rentals-rent-a-room/adjustments/unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = NormalMode, propertyType: PropertyType = RentalsRentARoom)
GET /:taxYear/rentals-rent-a-room/adjustments/change-unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onPageLoad(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = RentalsRentARoom)
POST /:taxYear/rentals-rent-a-room/adjustments/change-unused-residential-finance-cost controllers.adjustments.UnusedResidentialFinanceCostController.onSubmit(taxYear: Int, mode: Mode = CheckMode, propertyType: PropertyType = RentalsRentARoom)

1 change: 0 additions & 1 deletion conf/messages.cy
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,6 @@ balancingCharge.label = Nodwch y ffigur

unusedResidentialFinanceCost.title = Costau ariannol preswyl sydd heb eu defnyddio a ddygwyd ymlaen
unusedResidentialFinanceCost.heading = Costau ariannol preswyl sydd heb eu defnyddio a ddygwyd ymlaen
unusedResidentialFinanceCost.details.content.text = Deall costau ariannol preswyl sydd heb eu defnyddio a ddygwyd ymlaen
unusedResidentialFinanceCost.details.content.link.content = Gallwch ddwyn unrhyw falans o gostau ariannol preswyl sydd heb eu defnyddio o hyd ymlaen i flynyddoedd yn y dyfodol ar gyfer yr un eiddo wedi’i rentu.
unusedResidentialFinanceCost.details.content.link.intro = Darllenwch ragor am
unusedResidentialFinanceCost.details.content.link.text = ryddhad treth i landlordiaid preswyl, ar GOV.UK (yn agor tab newydd)
Expand Down
1 change: 0 additions & 1 deletion conf/messages.en
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,6 @@ balancingCharge.amount.error.outOfRange = Enter an amount between £{0} and £{1

unusedResidentialFinanceCost.title = Unused residential costs brought forward
unusedResidentialFinanceCost.heading = Unused residential costs brought forward
unusedResidentialFinanceCost.details.content.text = Understanding residential financial costs carried forward
unusedResidentialFinanceCost.details.content.link.content = You can bring forward any balance of residential finance costs which are still unused to future years of the same property rental.
unusedResidentialFinanceCost.details.content.link.intro = Read more about
unusedResidentialFinanceCost.details.content.link.text = tax relief for residential landlords at GOV.UK (opens in new tab)
Expand Down
Loading

0 comments on commit 8b0cb08

Please sign in to comment.