in app/com/gu/memsub/subsv2/reads/ChargeListReads.scala [83:116]
def read(cat: PlanChargeMap, charge: ZuoraCharge): ValidationNel[String, BillingPeriod] = {
((charge.endDateCondition, charge.billingPeriod) match {
case (FixedPeriod, Some(ZSpecificWeeks))
if charge.specificBillingPeriod.exists(numberOfWeeks => numberOfWeeks == 6 || numberOfWeeks == 7) &&
charge.upToPeriods.contains(1) &&
charge.upToPeriodsType.contains(BillingPeriods) =>
Validation.success[String, BillingPeriod](SixWeeks)
case (FixedPeriod, Some(zPeriod))
if charge.upToPeriods.contains(1) &&
charge.upToPeriodsType.contains(BillingPeriods) =>
zPeriod match {
case ZYear => Validation.success[String, BillingPeriod](OneYear)
case ZQuarter => Validation.success[String, BillingPeriod](ThreeMonths)
case ZTwoYears => Validation.success[String, BillingPeriod](TwoYears)
case ZThreeYears => Validation.success[String, BillingPeriod](ThreeYears)
case ZSemiAnnual => Validation.success[String, BillingPeriod](SixMonths)
case _ => Validation.f[BillingPeriod](s"zuora fixed period was $zPeriod")
}
case (SubscriptionEnd, Some(zPeriod)) =>
zPeriod match {
case ZMonth => Validation.success[String, BillingPeriod](Month)
case ZQuarter => Validation.success[String, BillingPeriod](Quarter)
case ZYear => Validation.success[String, BillingPeriod](Year)
case ZSemiAnnual => Validation.success[String, BillingPeriod](SixMonthsRecurring)
case _ => Validation.f[BillingPeriod](s"zuora recurring period was $zPeriod")
}
case (OneTime, None) => Validation.success[String, BillingPeriod](OneTimeChargeBillingPeriod) // This represents a one time rate plan charge
case _ =>
Validation.f[BillingPeriod](s"period =${charge.billingPeriod} specificBillingPeriod=${charge.specificBillingPeriod} uptoPeriodsType=${charge.upToPeriodsType}, uptoPeriods=${charge.upToPeriods}")
}).toValidationNel.withTrace("anyBpReads")
}