public function OrderAssignSubscriber::onAssign in Commerce Core 8.2
Assigns anonymous payment methods to the new customer.
Parameters
\Drupal\commerce_order\Event\OrderAssignEvent $event: The event.
File
- modules/
payment/ src/ EventSubscriber/ OrderAssignSubscriber.php, line 44
Class
Namespace
Drupal\commerce_payment\EventSubscriberCode
public function onAssign(OrderAssignEvent $event) {
$order = $event
->getOrder();
if ($order
->get('payment_method')
->isEmpty()) {
return;
}
$customer = $event
->getCustomer();
/** @var \Drupal\commerce_payment\Entity\PaymentMethodInterface $payment_method */
$payment_method = $order
->get('payment_method')->entity;
if ($payment_method && empty($payment_method
->getOwnerId())) {
$payment_method_profile = $payment_method
->getBillingProfile();
if ($payment_method_profile && $this->addressBook
->needsCopy($payment_method_profile)) {
$this->addressBook
->copy($payment_method_profile, $customer);
// The data field is not copied by default but needs to be.
// For example, both profiles need to have an address_book_profile_id.
$billing_profile = $order
->getBillingProfile();
if ($payment_method_profile
->equalToProfile($billing_profile)) {
$billing_profile
->populateFromProfile($payment_method_profile, [
'data',
]);
$billing_profile
->save();
}
}
$payment_method
->setOwner($customer);
$payment_method
->save();
}
}