Skip to content

Commit 245238d

Browse files
Merge forwardport of #11787 to 2.3-develop branch
Applied pull request patch https://github.com/magento/magento2/pull/11787.patch (created by @joni-jones) based on commit(s): 1. 2f0898a Fixed GitHub Issues in 2.3-develop branch: - #10438: Potential error on order edit page when address has extension attributes (reported by @dankocherga)
2 parents ac7df33 + 748ab4d commit 245238d

File tree

3 files changed

+386
-464
lines changed

3 files changed

+386
-464
lines changed

app/code/Magento/Sales/Model/AdminOrder/Create.php

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88

99
use Magento\Customer\Api\AddressMetadataInterface;
1010
use Magento\Customer\Model\Metadata\Form as CustomerForm;
11+
use Magento\Framework\Api\ExtensibleDataObjectConverter;
1112
use Magento\Framework\App\ObjectManager;
1213
use Magento\Quote\Model\Quote\Address;
1314
use Magento\Quote\Model\Quote\Item;
15+
use Magento\Sales\Api\Data\OrderAddressInterface;
16+
use Magento\Sales\Model\Order;
1417

1518
/**
1619
* Order create model
@@ -233,6 +236,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
233236
*/
234237
private $serializer;
235238

239+
/**
240+
* @var ExtensibleDataObjectConverter
241+
*/
242+
private $dataObjectConverter;
243+
236244
/**
237245
* @param \Magento\Framework\ObjectManagerInterface $objectManager
238246
* @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -263,6 +271,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
263271
* @param \Magento\Quote\Model\QuoteFactory $quoteFactory
264272
* @param array $data
265273
* @param \Magento\Framework\Serialize\Serializer\Json|null $serializer
274+
* @param ExtensibleDataObjectConverter|null $dataObjectConverter
266275
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
267276
*/
268277
public function __construct(
@@ -294,7 +303,8 @@ public function __construct(
294303
\Magento\Sales\Api\OrderManagementInterface $orderManagement,
295304
\Magento\Quote\Model\QuoteFactory $quoteFactory,
296305
array $data = [],
297-
\Magento\Framework\Serialize\Serializer\Json $serializer = null
306+
\Magento\Framework\Serialize\Serializer\Json $serializer = null,
307+
ExtensibleDataObjectConverter $dataObjectConverter = null
298308
) {
299309
$this->_objectManager = $objectManager;
300310
$this->_eventManager = $eventManager;
@@ -326,6 +336,8 @@ public function __construct(
326336
$this->serializer = $serializer ?: ObjectManager::getInstance()
327337
->get(\Magento\Framework\Serialize\Serializer\Json::class);
328338
parent::__construct($data);
339+
$this->dataObjectConverter = $dataObjectConverter ?: ObjectManager::getInstance()
340+
->get(ExtensibleDataObjectConverter::class);
329341
}
330342

331343
/**
@@ -512,9 +524,7 @@ public function initFromOrder(\Magento\Sales\Model\Order $order)
512524

513525
$shippingAddress = $order->getShippingAddress();
514526
if ($shippingAddress) {
515-
$addressDiff = array_diff_assoc($shippingAddress->getData(), $order->getBillingAddress()->getData());
516-
unset($addressDiff['address_type'], $addressDiff['entity_id']);
517-
$shippingAddress->setSameAsBilling(empty($addressDiff));
527+
$shippingAddress->setSameAsBilling($this->isAddressesAreEqual($order));
518528
}
519529

520530
$this->_initBillingAddressFromOrder($order);
@@ -2017,4 +2027,26 @@ protected function _getNewCustomerEmail()
20172027

20182028
return $email;
20192029
}
2030+
2031+
/**
2032+
* Checks id shipping and billing addresses are equal.
2033+
*
2034+
* @param Order $order
2035+
* @return bool
2036+
*/
2037+
private function isAddressesAreEqual(Order $order)
2038+
{
2039+
$shippingAddress = $order->getShippingAddress();
2040+
$billingAddress = $order->getBillingAddress();
2041+
$shippingData = $this->dataObjectConverter->toFlatArray($shippingAddress, [], OrderAddressInterface::class);
2042+
$billingData = $this->dataObjectConverter->toFlatArray($billingAddress, [], OrderAddressInterface::class);
2043+
unset(
2044+
$shippingData['address_type'],
2045+
$shippingData['entity_id'],
2046+
$billingData['address_type'],
2047+
$billingData['entity_id']
2048+
);
2049+
2050+
return $shippingData == $billingData;
2051+
}
20202052
}

0 commit comments

Comments
 (0)