def zuoraUpdate()

in lambda/src/main/scala/pricemigrationengine/migrations/SupporterPlus2024Migration.scala [265:325]


  def zuoraUpdate(
      subscription: ZuoraSubscription,
      effectiveDate: LocalDate,
      oldPrice: BigDecimal,
      estimatedNewPrice: BigDecimal,
      priceCap: BigDecimal
  ): Either[Failure, ZuoraSubscriptionUpdate] = {
    for {
      existingRatePlan <- getSupporterPlusV2RatePlan(subscription)
      existingBaseRatePlanCharge <- getSupporterPlusBaseRatePlanCharge(
        subscription.subscriptionNumber,
        existingRatePlan
      )
      existingContributionRatePlanCharge <- getSupporterPlusContributionRatePlanCharge(
        subscription.subscriptionNumber,
        existingRatePlan
      )
      existingContributionPrice <- existingContributionRatePlanCharge.price.toRight(
        DataExtractionFailure(
          s"[22405076] Could not extract existing contribution price for subscription ${subscription.subscriptionNumber}"
        )
      )
      billingPeriod <- ZuoraRatePlan
        .ratePlanToBillingPeriod(existingRatePlan)
        .toRight(
          DataExtractionFailure(
            s"[17469705] Could not determine the billing period for subscription ${subscription.subscriptionNumber}"
          )
        )

    } yield {
      ZuoraSubscriptionUpdate(
        add = List(
          AddZuoraRatePlan(
            productRatePlanId = existingRatePlan.productRatePlanId,
            contractEffectiveDate = effectiveDate,
            chargeOverrides = List(
              ChargeOverride(
                productRatePlanChargeId = existingBaseRatePlanCharge.productRatePlanChargeId,
                billingPeriod = BillingPeriod.toString(billingPeriod),
                price = PriceCap.priceCapForNotification(oldPrice, estimatedNewPrice, priceCap)
              ),
              ChargeOverride(
                productRatePlanChargeId = existingContributionRatePlanCharge.productRatePlanChargeId,
                billingPeriod = BillingPeriod.toString(billingPeriod),
                price = existingContributionPrice
              )
            )
          )
        ),
        remove = List(
          RemoveZuoraRatePlan(
            ratePlanId = existingRatePlan.id,
            contractEffectiveDate = effectiveDate
          )
        ),
        currentTerm = None,
        currentTermPeriodType = None
      )
    }
  }