def apply()

in src/main/scala/com/gu/invoicing/invoice/Model.scala [75:113]


    def apply(invoiceWithPayment: InvoiceWithPayment): MmaInvoiceWithPayment = {
      val mmaResponse = new MmaInvoiceWithPayment(
        invoiceId = invoiceWithPayment.invoiceId,
        subscriptionName = invoiceWithPayment.subscriptionName,
        date = invoiceWithPayment.date,
        pdfPath = invoiceWithPayment.pdfPath,
        price = invoiceWithPayment.price,
        paymentMethod = invoiceWithPayment.paymentMethod.Type,
        hasMultipleSubs = false,
      )

      val paymentMethod = invoiceWithPayment.paymentMethod
      import paymentMethod._
      paymentMethod.Type match { // ACH, BankTransfer, Cash, Check, CreditCard, CreditCardReferenceTransaction, DebitCard, Other, PayPal, WireTransfer
        case "CreditCard" | "CreditCardReferenceTransaction" | "DebitCard" =>
          mmaResponse.copy(
            last4 = CreditCardMaskNumber.map(dropMaskPrefix),
            cardType = CreditCardType,
            paymentMethod = "Card",
          )
        case "BankTransfer" =>
          mmaResponse.copy(
            last4 = BankTransferAccountNumberMask.map(dropMaskPrefix),
            paymentMethod = paymentMethod.BankTransferType match {
              case Some("SEPA") => "Sepa"
              case _ => "DirectDebit"
            },
          )

        case "PayPal" =>
          mmaResponse.copy(
            last4 = None,
            paymentMethod = "PayPal",
          )

        case _ =>
          throw new RuntimeException(s"Unexpected payment method: ${paymentMethod.spy}")
      }
    }