def read()

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")


    }