private def getExpiryDateForValidSubscription()

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
  }