From 5620970e68a0322629cef4ce7f55764f625f31bb Mon Sep 17 00:00:00 2001 From: Michele Satta <3033136+msatta@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:16:46 +0100 Subject: [PATCH] ADR-1362: duty suspended deliveries added to view specific return endpoint --- .../models/returns/AdrReturnDetails.scala | 43 ++++++++++++++++++- test-utils/helpers/TestData.scala | 35 +++++++++++++-- .../models/returns/AdrReturnDetailsSpec.scala | 2 +- 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/app/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetails.scala b/app/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetails.scala index 33a28a6..0e07086 100644 --- a/app/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetails.scala +++ b/app/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetails.scala @@ -27,7 +27,8 @@ case class AdrReturnDetails( identification: AdrReturnDetailsIdentification, alcoholDeclared: AdrReturnAlcoholDeclared, adjustments: AdrReturnAdjustments, - totalDutyDue: AdrReturnTotalDutyDue + totalDutyDue: AdrReturnTotalDutyDue, + netDutySuspension: Option[AdrNetDutySuspension] ) object AdrReturnDetails { @@ -36,7 +37,8 @@ object AdrReturnDetails { identification = AdrReturnDetailsIdentification.fromReturnDetailsSuccess(returnDetailsSuccess), alcoholDeclared = AdrReturnAlcoholDeclared.fromReturnDetailsSuccess(returnDetailsSuccess), adjustments = AdrReturnAdjustments.fromReturnDetailsSuccess(returnDetailsSuccess), - totalDutyDue = AdrReturnTotalDutyDue.fromReturnDetailsSuccess(returnDetailsSuccess) + totalDutyDue = AdrReturnTotalDutyDue.fromReturnDetailsSuccess(returnDetailsSuccess), + netDutySuspension = AdrNetDutySuspension.fromReturnDetailsSuccess(returnDetailsSuccess) ) implicit val adrReturnDetailsFormat: OFormat[AdrReturnDetails] = Json.format[AdrReturnDetails] @@ -203,3 +205,40 @@ object AdrReturnTotalDutyDue { implicit val adrReturnTotalDutyDueFormat: OFormat[AdrReturnTotalDutyDue] = Json.format[AdrReturnTotalDutyDue] } + +case class AdrNetDutySuspension( + totalLtsBeer: Option[BigDecimal], + totalLtsWine: Option[BigDecimal], + totalLtsCider: Option[BigDecimal], + totalLtsSpirit: Option[BigDecimal], + totalLtsOtherFermented: Option[BigDecimal], + totalLtsPureAlcoholBeer: Option[BigDecimal], + totalLtsPureAlcoholWine: Option[BigDecimal], + totalLtsPureAlcoholCider: Option[BigDecimal], + totalLtsPureAlcoholSpirit: Option[BigDecimal], + totalLtsPureAlcoholOtherFermented: Option[BigDecimal] +) + +object AdrNetDutySuspension { + def fromReturnDetailsSuccess(returnDetailsSuccess: GetReturnDetails): Option[AdrNetDutySuspension] = + if (returnDetailsSuccess.netDutySuspension.netDutySuspensionFilled) { + returnDetailsSuccess.netDutySuspension.netDutySuspensionProducts.map(dutySuspension => + AdrNetDutySuspension( + totalLtsBeer = dutySuspension.totalLtsBeer, + totalLtsWine = dutySuspension.totalLtsWine, + totalLtsCider = dutySuspension.totalLtsCider, + totalLtsSpirit = dutySuspension.totalLtsSpirit, + totalLtsOtherFermented = dutySuspension.totalLtsOtherFermented, + totalLtsPureAlcoholBeer = dutySuspension.totalLtsPureAlcoholBeer, + totalLtsPureAlcoholWine = dutySuspension.totalLtsPureAlcoholWine, + totalLtsPureAlcoholCider = dutySuspension.totalLtsPureAlcoholCider, + totalLtsPureAlcoholSpirit = dutySuspension.totalLtsPureAlcoholSpirit, + totalLtsPureAlcoholOtherFermented = dutySuspension.totalLtsPureAlcoholOtherFermented + ) + ) + } else { + None + } + + implicit val adrNetDutySuspensionFormat: OFormat[AdrNetDutySuspension] = Json.format[AdrNetDutySuspension] +} diff --git a/test-utils/helpers/TestData.scala b/test-utils/helpers/TestData.scala index c64157d..290c3dd 100644 --- a/test-utils/helpers/TestData.scala +++ b/test-utils/helpers/TestData.scala @@ -23,7 +23,7 @@ import uk.gov.hmrc.alcoholdutyreturns.models.ApprovalStatus.Approved import uk.gov.hmrc.alcoholdutyreturns.models.{AlcoholRegimes, ObligationData, ReturnAndUserDetails, ReturnId, SubscriptionSummary, UserAnswers} import uk.gov.hmrc.alcoholdutyreturns.models.ObligationStatus.{Fulfilled, Open} import uk.gov.hmrc.alcoholdutyreturns.models.calculation.{CalculateDutyDueByTaxTypeRequest, CalculateDutyDueByTaxTypeRequestItem, CalculatedDutyDueByTaxType, CalculatedDutyDueByTaxTypeItem} -import uk.gov.hmrc.alcoholdutyreturns.models.returns.{AdrAdjustmentItem, AdrAdjustments, AdrAlcoholQuantity, AdrDuty, AdrDutyDeclared, AdrDutyDeclaredItem, AdrDutySuspended, AdrDutySuspendedAlcoholRegime, AdrDutySuspendedProduct, AdrOtherIngredient, AdrRepackagedDraughtAdjustmentItem, AdrReturnAdjustments, AdrReturnAdjustmentsRow, AdrReturnAlcoholDeclared, AdrReturnAlcoholDeclaredRow, AdrReturnCreatedDetails, AdrReturnDetails, AdrReturnDetailsIdentification, AdrReturnSubmission, AdrReturnTotalDutyDue, AdrSpirits, AdrSpiritsGrainsQuantities, AdrSpiritsIngredientsVolumes, AdrSpiritsProduced, AdrSpiritsVolumes, AdrTotals, AdrTypeOfSpirit, AdrUnitOfMeasure, AlcoholProducts, ChargeDetails, Drawback, GetReturnDetails, GetReturnDetailsSuccess, IdDetails, NetDutySuspension, NetDutySuspensionProducts, OtherMaterialsUomType, OverDeclaration, RegularReturnDetails, RepackagedDraught, RepackagedDraughtProduct, ReturnCreate, ReturnCreatedDetails, ReturnCreatedSuccess, ReturnDetails, SpiritsProduced, SpiritsProducedDetails, SpoiltProduct, TotalDutyDue, TotalDutyDuebyTaxType, TypeOfSpiritType, UnderDeclaration} +import uk.gov.hmrc.alcoholdutyreturns.models.returns.{AdrAdjustmentItem, AdrAdjustments, AdrAlcoholQuantity, AdrDuty, AdrDutyDeclared, AdrDutyDeclaredItem, AdrDutySuspended, AdrDutySuspendedAlcoholRegime, AdrDutySuspendedProduct, AdrNetDutySuspension, AdrOtherIngredient, AdrRepackagedDraughtAdjustmentItem, AdrReturnAdjustments, AdrReturnAdjustmentsRow, AdrReturnAlcoholDeclared, AdrReturnAlcoholDeclaredRow, AdrReturnCreatedDetails, AdrReturnDetails, AdrReturnDetailsIdentification, AdrReturnSubmission, AdrReturnTotalDutyDue, AdrSpirits, AdrSpiritsGrainsQuantities, AdrSpiritsIngredientsVolumes, AdrSpiritsProduced, AdrSpiritsVolumes, AdrTotals, AdrTypeOfSpirit, AdrUnitOfMeasure, AlcoholProducts, ChargeDetails, Drawback, GetReturnDetails, GetReturnDetailsSuccess, IdDetails, NetDutySuspension, NetDutySuspensionProducts, OtherMaterialsUomType, OverDeclaration, RegularReturnDetails, RepackagedDraught, RepackagedDraughtProduct, ReturnCreate, ReturnCreatedDetails, ReturnCreatedSuccess, ReturnDetails, SpiritsProduced, SpiritsProducedDetails, SpoiltProduct, TotalDutyDue, TotalDutyDuebyTaxType, TypeOfSpiritType, UnderDeclaration} import java.time.{Clock, Instant, LocalDate, YearMonth, ZoneId} @@ -472,6 +472,20 @@ trait TestData extends ModelGenerators { ), AdrReturnTotalDutyDue( totalDue = BigDecimal("61118.51") + ), + Some( + AdrNetDutySuspension( + totalLtsBeer = Some(BigDecimal("0.15")), + totalLtsWine = Some(BigDecimal("0.44")), + totalLtsCider = Some(BigDecimal("0.38")), + totalLtsSpirit = Some(BigDecimal("0.02")), + totalLtsOtherFermented = Some(BigDecimal("0.02")), + totalLtsPureAlcoholBeer = Some(BigDecimal("0.4248")), + totalLtsPureAlcoholWine = Some(BigDecimal("0.5965")), + totalLtsPureAlcoholCider = Some(BigDecimal("0.0379")), + totalLtsPureAlcoholSpirit = Some(BigDecimal("0.2492")), + totalLtsPureAlcoholOtherFermented = Some(BigDecimal("0.1894")) + ) ) ) @@ -580,7 +594,21 @@ trait TestData extends ModelGenerators { ), total = BigDecimal("-19434") ), - totalDutyDue = AdrReturnTotalDutyDue(totalDue = BigDecimal("55815")) + totalDutyDue = AdrReturnTotalDutyDue(totalDue = BigDecimal("55815")), + netDutySuspension = Some( + AdrNetDutySuspension( + totalLtsBeer = Some(BigDecimal("0.15")), + totalLtsWine = Some(BigDecimal("0.44")), + totalLtsCider = Some(BigDecimal("0.38")), + totalLtsSpirit = Some(BigDecimal("0.02")), + totalLtsOtherFermented = Some(BigDecimal("0.02")), + totalLtsPureAlcoholBeer = Some(BigDecimal("0.4248")), + totalLtsPureAlcoholWine = Some(BigDecimal("0.5965")), + totalLtsPureAlcoholCider = Some(BigDecimal("0.0379")), + totalLtsPureAlcoholSpirit = Some(BigDecimal("0.2492")), + totalLtsPureAlcoholOtherFermented = Some(BigDecimal("0.1894")) + ) + ) ) def nilReturnDetails(periodKey: String, now: Instant): AdrReturnDetails = @@ -594,7 +622,8 @@ trait TestData extends ModelGenerators { adjustmentDetails = None, total = BigDecimal(0) ), - totalDutyDue = AdrReturnTotalDutyDue(totalDue = BigDecimal(0)) + totalDutyDue = AdrReturnTotalDutyDue(totalDue = BigDecimal(0)), + netDutySuspension = None ) val exampleReturnSubmissionRequest: AdrReturnSubmission = AdrReturnSubmission( diff --git a/test/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetailsSpec.scala b/test/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetailsSpec.scala index 740cdbb..0ead932 100644 --- a/test/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetailsSpec.scala +++ b/test/uk/gov/hmrc/alcoholdutyreturns/models/returns/AdrReturnDetailsSpec.scala @@ -75,6 +75,6 @@ class AdrReturnDetailsSpec extends SpecBase { val adrNilReturnDetails = nilReturnDetails(periodKey, now) val json = - s"""{"identification":{"periodKey":"$periodKey","submittedTime":"2024-06-11T15:07:47.838Z"},"alcoholDeclared":{"alcoholDeclaredDetails":[{"taxType":"311","litresOfPureAlcohol":450,"dutyRate":9.27,"dutyValue":4171.5},{"taxType":"321","litresOfPureAlcohol":450,"dutyRate":21.01,"dutyValue":9454.5},{"taxType":"331","litresOfPureAlcohol":450,"dutyRate":28.5,"dutyValue":12825},{"taxType":"341","litresOfPureAlcohol":450,"dutyRate":31.64,"dutyValue":14238},{"taxType":"351","litresOfPureAlcohol":450,"dutyRate":8.42,"dutyValue":3789},{"taxType":"356","litresOfPureAlcohol":450,"dutyRate":19.08,"dutyValue":8586},{"taxType":"361","litresOfPureAlcohol":450,"dutyRate":8.4,"dutyValue":3780},{"taxType":"366","litresOfPureAlcohol":450,"dutyRate":16.47,"dutyValue":7411.5},{"taxType":"371","litresOfPureAlcohol":450,"dutyRate":8.2,"dutyValue":3960},{"taxType":"376","litresOfPureAlcohol":450,"dutyRate":15.63,"dutyValue":7033.5}],"total":75249},"adjustments":{"adjustmentDetails":[{"adjustmentTypeKey":"underdeclaration","taxType":"321","litresOfPureAlcohol":150,"dutyRate":21.01,"dutyValue":3151.5},{"adjustmentTypeKey":"spoilt","taxType":"321","litresOfPureAlcohol":1150,"dutyRate":21.01,"dutyValue":-24161.5},{"adjustmentTypeKey":"spoilt","taxType":"321","litresOfPureAlcohol":75,"dutyRate":21.01,"dutyValue":-1575.5},{"adjustmentTypeKey":"repackagedDraught","taxType":"321","litresOfPureAlcohol":150,"dutyRate":21.01,"dutyValue":3151.5}],"total":-19434},"totalDutyDue":{"totalDue":55815}}""" + s"""{"identification":{"periodKey":"$periodKey","submittedTime":"2024-06-11T15:07:47.838Z"},"alcoholDeclared":{"alcoholDeclaredDetails":[{"taxType":"311","litresOfPureAlcohol":450,"dutyRate":9.27,"dutyValue":4171.5},{"taxType":"321","litresOfPureAlcohol":450,"dutyRate":21.01,"dutyValue":9454.5},{"taxType":"331","litresOfPureAlcohol":450,"dutyRate":28.5,"dutyValue":12825},{"taxType":"341","litresOfPureAlcohol":450,"dutyRate":31.64,"dutyValue":14238},{"taxType":"351","litresOfPureAlcohol":450,"dutyRate":8.42,"dutyValue":3789},{"taxType":"356","litresOfPureAlcohol":450,"dutyRate":19.08,"dutyValue":8586},{"taxType":"361","litresOfPureAlcohol":450,"dutyRate":8.4,"dutyValue":3780},{"taxType":"366","litresOfPureAlcohol":450,"dutyRate":16.47,"dutyValue":7411.5},{"taxType":"371","litresOfPureAlcohol":450,"dutyRate":8.2,"dutyValue":3960},{"taxType":"376","litresOfPureAlcohol":450,"dutyRate":15.63,"dutyValue":7033.5}],"total":75249},"adjustments":{"adjustmentDetails":[{"adjustmentTypeKey":"underdeclaration","taxType":"321","litresOfPureAlcohol":150,"dutyRate":21.01,"dutyValue":3151.5},{"adjustmentTypeKey":"spoilt","taxType":"321","litresOfPureAlcohol":1150,"dutyRate":21.01,"dutyValue":-24161.5},{"adjustmentTypeKey":"spoilt","taxType":"321","litresOfPureAlcohol":75,"dutyRate":21.01,"dutyValue":-1575.5},{"adjustmentTypeKey":"repackagedDraught","taxType":"321","litresOfPureAlcohol":150,"dutyRate":21.01,"dutyValue":3151.5}],"total":-19434},"totalDutyDue":{"totalDue":55815},"netDutySuspension":{"totalLtsBeer":0.15,"totalLtsWine":0.44,"totalLtsCider":0.38,"totalLtsSpirit":0.02,"totalLtsOtherFermented":0.02,"totalLtsPureAlcoholBeer":0.4248,"totalLtsPureAlcoholWine":0.5965,"totalLtsPureAlcoholCider":0.0379,"totalLtsPureAlcoholSpirit":0.2492,"totalLtsPureAlcoholOtherFermented":0.1894}}""" } }