You are here

public function OrderPaidSubscriber::onPaid in Commerce Invoice 8.2

Updates the invoice total paid when an order is paid.

Parameters

\Drupal\commerce_order\Event\OrderEvent $event: The order event.

File

src/EventSubscriber/OrderPaidSubscriber.php, line 44

Class

OrderPaidSubscriber

Namespace

Drupal\commerce_invoice\EventSubscriber

Code

public function onPaid(OrderEvent $event) {
  $order = $event
    ->getOrder();
  $invoice_ids = $this->invoiceStorage
    ->getQuery()
    ->condition('state', 'pending')
    ->condition('orders', [
    $order
      ->id(),
  ], 'IN')
    ->accessCheck(FALSE)
    ->execute();

  // No pending invoice references the order being paid, aborting.
  if (!$invoice_ids) {
    return;
  }

  /** @var \Drupal\commerce_invoice\Entity\InvoiceInterface[] $invoices */
  $invoices = $this->invoiceStorage
    ->loadMultiple($invoice_ids);
  foreach ($invoices as $invoice) {
    if ($invoice
      ->isPaid()) {
      continue;
    }
    $total_paid = $invoice
      ->getTotalPaid();
    $total_paid = $total_paid ? $total_paid
      ->add($order
      ->getTotalPaid()) : $order
      ->getTotalPaid();
    $invoice
      ->setTotalPaid($total_paid);
    $invoice
      ->save();
  }
}