@@ -32,6 +32,8 @@ import utils.Constants
3232import viewmodels .checkAnswers .*
3333import views .html .PaymentPlanDetailsView
3434
35+ import java .time .LocalDate
36+ import java .time .format .DateTimeFormatter
3537import javax .inject .Inject
3638import scala .concurrent .duration .*
3739import scala .concurrent .{Await , ExecutionContext , Future }
@@ -59,28 +61,52 @@ class PaymentPlanDetailsController @Inject() (
5961 updatedAnswers <- Future .fromTry(updatedAnswers.set(ManagePaymentPlanTypePage , planDetail.planType))
6062 updatedAnswers <- planDetail.scheduledPaymentAmount match {
6163 case Some (amount) => Future .fromTry(updatedAnswers.set(AmendPaymentAmountPage , amount))
62- case None => Future .successful(updatedAnswers)
64+ case _ => Future .successful(updatedAnswers)
6365 }
6466 updatedAnswers <- (planDetail.suspensionStartDate, planDetail.suspensionEndDate) match {
6567 case (Some (startDate), Some (endDate)) =>
6668 Future .fromTry(updatedAnswers.set(SuspensionPeriodRangeDatePage , SuspensionPeriodRange (startDate, endDate)))
6769 case _ => Future .successful(updatedAnswers)
6870 }
69- updatedAnswers <- planDetail.scheduledPaymentEndDate match {
70- case Some (endDate ) => Future .fromTry(updatedAnswers.set(AmendPlanEndDatePage , endDate ))
71- case None => Future .successful(updatedAnswers)
71+ updatedAnswers <- planDetail.scheduledPaymentStartDate match {
72+ case Some (paymentStartDate ) => Future .fromTry(updatedAnswers.set(AmendPlanEndDatePage , paymentStartDate ))
73+ case _ => Future .successful(updatedAnswers)
7274 }
7375 updatedAnswers <- planDetail.scheduledPaymentEndDate match {
74- case Some (endDate ) => Future .fromTry(updatedAnswers.set(AmendPlanEndDatePage , endDate ))
75- case None => Future .successful(updatedAnswers)
76+ case Some (paymentEndDate ) => Future .fromTry(updatedAnswers.set(AmendPlanEndDatePage , paymentEndDate ))
77+ case _ => Future .successful(updatedAnswers)
7678 }
77- updatedAnswers <- cleanseCancelPaymentPlanPage(updatedAnswers)
78- _ <- sessionRepository.set(updatedAnswers)
79+ updatedAnswers <- cleanseSessionPages(updatedAnswers)
80+ showAllActionsFlag <- calculateShowAction(nddService, planDetail)
81+ _ <- sessionRepository.set(updatedAnswers)
7982 } yield {
80- val flag : Future [Boolean ] = calculateShowAction(nddService, planDetail)
81- val showActions = Await .result(flag, 5 .seconds)
83+ val showAmendLink = isAmendLinkVisible(showAllActionsFlag, planDetail)
84+ val showCancelLink = isCancelLinkVisible(showAllActionsFlag, planDetail)
85+ val showSuspendLink = isSuspendLinkVisible(showAllActionsFlag, planDetail)
8286 val summaryRows : Seq [SummaryListRow ] = buildSummaryRows(planDetail)
83- Ok (view(planDetail.planType, paymentPlanReference, showActions, summaryRows))
87+ val isSuspensionActive = isSuspendPeriodActive(planDetail)
88+
89+ val formattedSuspensionStartDate = planDetail.suspensionStartDate
90+ .map(_.format(DateTimeFormatter .ofPattern(Constants .longDateTimeFormatPattern)))
91+ .getOrElse(" " )
92+
93+ val formattedSuspensionEndDate = planDetail.suspensionEndDate
94+ .map(_.format(DateTimeFormatter .ofPattern(Constants .longDateTimeFormatPattern)))
95+ .getOrElse(" " )
96+
97+ Ok (
98+ view(
99+ planDetail.planType,
100+ paymentPlanReference,
101+ showAmendLink,
102+ showCancelLink,
103+ showSuspendLink,
104+ isSuspensionActive,
105+ formattedSuspensionStartDate,
106+ formattedSuspensionEndDate,
107+ summaryRows
108+ )
109+ )
84110 }
85111 }
86112 case _ =>
@@ -117,10 +143,14 @@ class PaymentPlanDetailsController @Inject() (
117143 AmendPlanStartDateSummary .row(planDetail.planType, planDetail.scheduledPaymentStartDate, Constants .shortDateTimeFormatPattern),
118144 AmendPlanEndDateSummary .row(planDetail.scheduledPaymentEndDate, Constants .shortDateTimeFormatPattern),
119145 PaymentsFrequencySummary .row(planDetail.scheduledPaymentFrequency),
120- AmendPaymentAmountSummary .row(planDetail.planType, planDetail.scheduledPaymentAmount),
121- AmendSuspendDateSummary .row(planDetail.suspensionStartDate, true ), // true for start
122- AmendSuspendDateSummary .row(planDetail.suspensionEndDate, false ) // false for end
123- )
146+ AmendPaymentAmountSummary .row(planDetail.planType, planDetail.scheduledPaymentAmount)
147+ ) ++
148+ (if (isSuspendPeriodActive(planDetail)) {
149+ Seq (SuspensionPeriodRangeDateSummary .row(planDetail.suspensionStartDate, planDetail.suspensionEndDate))
150+ } else {
151+ Seq .empty
152+ })
153+
124154 case _ => // For Variable and Tax repayment plan
125155 Seq (
126156 AmendPaymentPlanTypeSummary .row(planDetail.planType),
@@ -145,31 +175,48 @@ class PaymentPlanDetailsController @Inject() (
145175 case Some (startDate) => nddService.isTwoDaysPriorPaymentDate(startDate)
146176 case None => Future .successful(true )
147177 }
148- case PaymentPlanType .BudgetPaymentPlan .toString =>
149- planDetail.scheduledPaymentEndDate match {
150- case Some (startDate) => nddService.isThreeDaysPriorPlanEndDate(startDate)
151- case None => Future .successful(true )
152- }
153- case PaymentPlanType .VariablePaymentPlan .toString =>
178+ case PaymentPlanType .BudgetPaymentPlan .toString | PaymentPlanType .VariablePaymentPlan .toString =>
154179 for {
155180 isTwoDaysBeforeStart <- planDetail.scheduledPaymentStartDate match {
156181 case Some (startDate) => nddService.isTwoDaysPriorPaymentDate(startDate)
157- case None => Future .successful(true )
182+ case _ => Future .successful(true )
158183 }
159184 isThreeDaysBeforeEnd <- planDetail.scheduledPaymentEndDate match {
160185 case Some (endDate) => nddService.isThreeDaysPriorPlanEndDate(endDate)
161- case None => Future .successful(true )
186+ case _ => Future .successful(true )
162187 }
163188 } yield isTwoDaysBeforeStart && isThreeDaysBeforeEnd
164189
165190 case _ => Future .successful(false ) // For TaxCredit repayment plan
166191 }
167192 }
168193
169- private def cleanseCancelPaymentPlanPage (userAnswers : UserAnswers ): Future [UserAnswers ] =
194+ private def cleanseSessionPages (userAnswers : UserAnswers ): Future [UserAnswers ] =
170195 for {
171196 updatedUserAnswers <- Future .fromTry(userAnswers.remove(CancelPaymentPlanPage ))
197+ updatedUserAnswers <- Future .fromTry(updatedUserAnswers.remove(DuplicateWarningPage ))
172198 _ <- sessionRepository.set(updatedUserAnswers)
173199 } yield updatedUserAnswers
174200
201+ private def isAmendLinkVisible (showAllActionsFlag : Boolean , planDetail : PaymentPlanDetails ): Boolean = {
202+ showAllActionsFlag && (planDetail.planType == PaymentPlanType .SinglePaymentPlan .toString || planDetail.planType == PaymentPlanType .BudgetPaymentPlan .toString)
203+ }
204+
205+ private def isCancelLinkVisible (showAllActionsFlag : Boolean , planDetail : PaymentPlanDetails ): Boolean = {
206+ showAllActionsFlag && planDetail.planType != PaymentPlanType .TaxCreditRepaymentPlan .toString
207+ }
208+
209+ private def isSuspendLinkVisible (showAllActionsFlag : Boolean , planDetail : PaymentPlanDetails ): Boolean = {
210+ planDetail.planType match {
211+ case planType if planType == PaymentPlanType .BudgetPaymentPlan .toString =>
212+ showAllActionsFlag && ! isSuspendPeriodActive(planDetail)
213+ case _ => false
214+ }
215+ }
216+
217+ private def isSuspendPeriodActive (planDetail : PaymentPlanDetails ): Boolean = {
218+ (for {
219+ suspensionEndDate <- planDetail.suspensionEndDate
220+ } yield ! LocalDate .now().isAfter(suspensionEndDate)).getOrElse(false )
221+ }
175222}
0 commit comments