in lambda/src/main/scala/pricemigrationengine/model/ZuoraSubscriptionUpdate.scala [166:196]
def fromRatePlanCharge(
productRatePlanCharge: ZuoraProductRatePlanCharge,
ratePlanCharge: ZuoraRatePlanCharge,
enforcedPrice: Option[BigDecimal]
): Either[DataExtractionFailure, Option[ChargeOverride]] =
for {
billingPeriod <- ratePlanCharge.billingPeriod.toRight(
DataExtractionFailure(s"Rate plan charge ${ratePlanCharge.number} has no billing period")
)
productRatePlanChargeBillingPeriod <- productRatePlanCharge.billingPeriod.toRight(
DataExtractionFailure(s"Product rate plan charge ${ratePlanCharge.number} has no billing period")
)
productRatePlanChargePrice <- ZuoraPricing
.pricing(productRatePlanCharge, ratePlanCharge.currency)
.flatMap(_.price)
.toRight(
DataExtractionFailure(
s"Product rate plan charge ${productRatePlanCharge.id} has no price for currency ${ratePlanCharge.currency}"
)
)
price <- AmendmentData.adjustedForBillingPeriod(
productRatePlanChargePrice,
Some(billingPeriod),
Some(productRatePlanChargeBillingPeriod)
)
} yield {
Some(ChargeOverride(productRatePlanCharge.id, billingPeriod, enforcedPrice.getOrElse(price)))
}