public function PaymentOrderUpdater::updateOrder in Commerce Core 8.2
Updates the given order.
The order's total_paid field will be recalculated to reflect the current payment total.
Parameters
\Drupal\commerce_order\Entity\OrderInterface $order: The order.
bool $save_order: Whether the order should be saved after the update. Always skipped if the total_paid field hasn't changed.
Overrides PaymentOrderUpdaterInterface::updateOrder
1 call to PaymentOrderUpdater::updateOrder()
- PaymentOrderUpdater::updateOrders in modules/
payment/ src/ PaymentOrderUpdater.php - Updates and saves all relevant orders.
File
- modules/
payment/ src/ PaymentOrderUpdater.php, line 67
Class
Namespace
Drupal\commerce_paymentCode
public function updateOrder(OrderInterface $order, $save_order = FALSE) {
$previous_total = $order
->getTotalPaid();
if (!$previous_total) {
// A NULL total indicates an order that doesn't have any items yet.
return;
}
// The new total is always calculated from scratch, to properly handle
// orders that were created before the total_paid field was introduced.
/** @var \Drupal\commerce_payment\PaymentStorageInterface $payment_storage */
$payment_storage = $this->entityTypeManager
->getStorage('commerce_payment');
$payments = $payment_storage
->loadMultipleByOrder($order);
/** @var \Drupal\commerce_price\Price $new_total */
$new_total = new Price('0', $previous_total
->getCurrencyCode());
foreach ($payments as $payment) {
if ($payment
->isCompleted()) {
$new_total = $new_total
->add($payment
->getBalance());
// Sync payment_gateway and payment_method fields from the first
// payment if the payment_method field is empty.
if ($order
->get('payment_method')
->isEmpty() && !$payment
->get('payment_method')
->isEmpty()) {
$order
->set('payment_gateway', $payment
->getPaymentGateway());
$order
->set('payment_method', $payment
->getPaymentMethod());
}
}
}
if (!$previous_total
->equals($new_total)) {
$order
->setTotalPaid($new_total);
if ($save_order) {
$order
->save();
}
}
unset($this->updateList[$order
->id()]);
}