def collectRelevantInvoiceItems()

in src/main/scala/com/gu/invoicing/preview/Impl.scala [150:171]


  def collectRelevantInvoiceItems(
      subscriptionName: String,
      invoiceItems: List[InvoiceItem],
  ): List[InvoiceItem] =
    invoiceItems.iterator
      .filter(_.subscriptionName == subscriptionName)
      .filterNot(_.productName == "Discounts")
      .filterNot(isDigitalProduct)
      .filterNot(_.chargeAmount < 0.0)
      .filterNot(v => v.serviceStartDate == v.serviceEndDate)
      .toList
      .sortBy(_.serviceStartDate)

  /** Some products are outright digital (Contribution) and some have a digital component (paper + digital)
    */
  def isDigitalProduct(item: InvoiceItem): Boolean = {
    List(
      "digi",
      "contrib",
      "support",
    ).exists(item.chargeName.toLowerCase.contains)
  }