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
Namespace
Drupal\commerce_invoice\EventSubscriberCode
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();
}
}