def ratePlanCharge()

in lib/zuora-core/src/main/scala/com/gu/zuora/subscription/Subscription.scala [19:39]


  def ratePlanCharge(request: CreditRequest): Option[RatePlanCharge] = {

    def isMatchingPlan(plan: RatePlan): Boolean = plan.productName == "Discounts"

    def isMatchingCharge(charge: RatePlanCharge): Boolean = {
      val publicationDate = request.publicationDate.value
      charge.name == request.productRatePlanChargeName &&
      charge.HolidayStart__c.exists { start =>
        start.isEqual(publicationDate) || start.isBefore(publicationDate)
      } &&
      charge.HolidayEnd__c.exists { end =>
        end.isEqual(publicationDate) || end.isAfter(publicationDate)
      }
    }

    val charges = for {
      plan <- ratePlans if isMatchingPlan(plan)
      charge <- plan.ratePlanCharges.find(isMatchingCharge)
    } yield charge
    charges.headOption
  }