in lambda/src/main/scala/pricemigrationengine/handlers/EstimationHandler.scala [101:125]
private def doEstimation(
catalogue: ZuoraProductCatalogue,
item: CohortItem,
cohortSpec: CohortSpec,
today: LocalDate,
): ZIO[Zuora, Failure, EstimationData] = {
for {
subscription <-
Zuora
.fetchSubscription(item.subscriptionName)
.filterOrFail(_.status != "Cancelled")(CancelledSubscriptionFailure(item.subscriptionName))
account <- Zuora.fetchAccount(subscription.accountNumber, subscription.subscriptionNumber)
invoicePreviewTargetDate = cohortSpec.earliestPriceMigrationStartDate.plusMonths(16)
invoicePreview <- Zuora.fetchInvoicePreview(subscription.accountId, invoicePreviewTargetDate)
startDateLowerBound <- StartDates.startDateLowerBound(
subscription,
invoicePreview,
cohortSpec,
today
)
result <- ZIO.fromEither(
EstimationResult(account, catalogue, subscription, invoicePreview, startDateLowerBound, cohortSpec)
)
} yield result
}