in handlers/digital-subscription-expiry/src/main/scala/com/gu/digitalSubscriptionExpiry/zuora/GetSubscriptionExpiry.scala [38:66]
private def getExpiryDateForValidSubscription(
subscription: SubscriptionResult,
accountSummary: AccountSummaryResult,
date: LocalDate,
): Option[LocalDate] = {
val dateToCheck =
if (!subscription.startDate.isAfter(date) && subscription.customerAcceptanceDate.isAfter(date))
subscription.customerAcceptanceDate
else date
def chargeSpansDate(charge: RatePlanCharge) =
!charge.effectiveEndDate.isBefore(dateToCheck) &&
!charge.effectiveStartDate.isAfter(dateToCheck)
def isActiveDigipack(charge: RatePlanCharge) = isDigipackName(charge.name) && chargeSpansDate(charge)
val hasActiveDigipackCharges = subscription.ratePlans.flatMap(_.ratePlanCharges).exists(isActiveDigipack)
@deprecated(
"should only exist during Coronavirus measures (where digipack access is expanded to cover paper customers)",
) // FIXME remove after Coronavirus
def isNewspaper(ratePlan: RatePlan) = ratePlan.productName.toUpperCase.startsWith("NEWSPAPER")
val isValidNewspaperSub =
subscription.ratePlans.filter(isNewspaper).flatMap(_.ratePlanCharges).exists(chargeSpansDate)
if (hasActiveDigipackCharges || isValidNewspaperSub) {
Some(subscription.endDate.plusDays(1))
} else None
}