Skip to content
This repository was archived by the owner on Apr 29, 2019. It is now read-only.

Commit 6d355e0

Browse files
YevSentmagento-engcom-team
authored andcommitted
[2.3-develop] Forwardport of magento/magento2#11787
1 parent c7207f6 commit 6d355e0

File tree

3 files changed

+388
-464
lines changed

3 files changed

+388
-464
lines changed

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

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

99
use Magento\Customer\Api\AddressMetadataInterface;
1010
use Magento\Customer\Model\Metadata\Form as CustomerForm;
11+
use Magento\Framework\Api\ExtensibleDataObjectConverter;
12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Quote\Model\Quote\Address;
1114
use Magento\Quote\Model\Quote\Item;
15+
use Magento\Sales\Api\Data\OrderAddressInterface;
16+
use Magento\Sales\Model\Order;
1217

1318
/**
1419
* Order create model
@@ -231,6 +236,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
231236
*/
232237
private $serializer;
233238

239+
/**
240+
* @var ExtensibleDataObjectConverter
241+
*/
242+
private $dataObjectConverter;
243+
234244
/**
235245
* @param \Magento\Framework\ObjectManagerInterface $objectManager
236246
* @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -261,6 +271,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
261271
* @param \Magento\Quote\Model\QuoteFactory $quoteFactory
262272
* @param array $data
263273
* @param \Magento\Framework\Serialize\Serializer\Json|null $serializer
274+
* @param ExtensibleDataObjectConverter|null $dataObjectConverter
264275
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
265276
*/
266277
public function __construct(
@@ -292,7 +303,8 @@ public function __construct(
292303
\Magento\Sales\Api\OrderManagementInterface $orderManagement,
293304
\Magento\Quote\Model\QuoteFactory $quoteFactory,
294305
array $data = [],
295-
\Magento\Framework\Serialize\Serializer\Json $serializer = null
306+
\Magento\Framework\Serialize\Serializer\Json $serializer = null,
307+
ExtensibleDataObjectConverter $dataObjectConverter = null
296308
) {
297309
$this->_objectManager = $objectManager;
298310
$this->_eventManager = $eventManager;
@@ -324,6 +336,8 @@ public function __construct(
324336
$this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()
325337
->get(\Magento\Framework\Serialize\Serializer\Json::class);
326338
parent::__construct($data);
339+
$this->dataObjectConverter = $dataObjectConverter ?: ObjectManager::getInstance()
340+
->get(ExtensibleDataObjectConverter::class);
327341
}
328342

329343
/**
@@ -510,9 +524,7 @@ public function initFromOrder(\Magento\Sales\Model\Order $order)
510524

511525
$shippingAddress = $order->getShippingAddress();
512526
if ($shippingAddress) {
513-
$addressDiff = array_diff_assoc($shippingAddress->getData(), $order->getBillingAddress()->getData());
514-
unset($addressDiff['address_type'], $addressDiff['entity_id']);
515-
$shippingAddress->setSameAsBilling(empty($addressDiff));
527+
$shippingAddress->setSameAsBilling($this->isAddressesAreEqual($order));
516528
}
517529

518530
$this->_initBillingAddressFromOrder($order);
@@ -2010,4 +2022,26 @@ protected function _getNewCustomerEmail()
20102022

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

0 commit comments

Comments
 (0)