1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Model\Order\Invoice\Plugin;
- class AddressUpdate
- {
- /**
- * @var \Magento\Sales\Model\ResourceModel\GridPool
- */
- private $gridPool;
- /**
- * @var \Magento\Sales\Model\ResourceModel\Attribute
- */
- private $attribute;
- /**
- * AddressUpdate constructor.
- * @param \Magento\Sales\Model\ResourceModel\GridPool $gridPool
- * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
- */
- public function __construct(
- \Magento\Sales\Model\ResourceModel\GridPool $gridPool,
- \Magento\Sales\Model\ResourceModel\Attribute $attribute
- ) {
- $this->gridPool = $gridPool;
- $this->attribute = $attribute;
- }
- /**
- * @param \Magento\Sales\Model\ResourceModel\Order\Handler\Address $subject
- * @param \Magento\Sales\Model\ResourceModel\Order\Handler\Address $result
- * @param \Magento\Sales\Model\Order $order
- * @return void
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function afterProcess(
- \Magento\Sales\Model\ResourceModel\Order\Handler\Address $subject,
- \Magento\Sales\Model\ResourceModel\Order\Handler\Address $result,
- \Magento\Sales\Model\Order $order
- ) {
- if ($order->hasInvoices()) {
- $billingAddress = $order->getBillingAddress();
- $shippingAddress = $order->getShippingAddress();
- $orderInvoiceHasChanges = false;
- /** @var \Magento\Sales\Model\Order\Invoice $invoice */
- foreach ($order->getInvoiceCollection()->getItems() as $invoice) {
- $invoiceAttributesForSave = [];
- if (!$invoice->getBillingAddressId() && $billingAddress) {
- $invoice->setBillingAddressId($billingAddress->getId());
- $invoiceAttributesForSave[] = 'billing_address_id';
- $orderInvoiceHasChanges = true;
- }
- if (!$invoice->getShippingAddressId() && $shippingAddress) {
- $invoice->setShippingAddressId($shippingAddress->getId());
- $invoiceAttributesForSave[] = 'shipping_address_id';
- $orderInvoiceHasChanges = true;
- }
- if (!empty($invoiceAttributesForSave)) {
- $this->attribute->saveAttribute($invoice, $invoiceAttributesForSave);
- }
- }
- if ($orderInvoiceHasChanges) {
- $this->gridPool->refreshByOrderId($order->getId());
- }
- }
- }
- }
|