Skip to content

Commit 8ddd4a0

Browse files
committed
ACP2E-279: Customer details are lost after editing an order.
1 parent a5d33fe commit 8ddd4a0

File tree

5 files changed

+46
-40
lines changed

5 files changed

+46
-40
lines changed

app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,26 @@ public function execute()
137137
'order_id' => $address->getParentId()
138138
]
139139
);
140+
if ($address->getAddressType() === AddressModel::TYPE_BILLING) {
141+
$order = $address->getOrder();
142+
$quote = $this->_objectManager->create(
143+
\Magento\Quote\Model\Quote::class
144+
)->load(
145+
$order->getQuoteId()
146+
);
147+
$quote->setCustomerSuffix($address->getSuffix())
148+
->setCustomerFirstname($address->getFirstname())
149+
->setCustomerLastname($address->getLastname())
150+
->setCustomerMiddlename($address->getMiddlename())
151+
->setCustomerPrefix($address->getPrefix())
152+
->save();
153+
$order->setCustomerSuffix($address->getSuffix())
154+
->setCustomerFirstname($address->getFirstname())
155+
->setCustomerLastname($address->getLastname())
156+
->setCustomerMiddlename($address->getMiddlename())
157+
->setCustomerPrefix($address->getPrefix())
158+
->save();
159+
}
140160
$this->messageManager->addSuccessMessage(__('You updated the order address.'));
141161
return $resultRedirect->setPath('sales/*/view', ['order_id' => $address->getParentId()]);
142162
} catch (LocalizedException $e) {

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

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
3333
/**
3434
* Xml default email domain path
3535
*/
36-
public const XML_PATH_DEFAULT_EMAIL_DOMAIN = 'customer/create_account/email_domain';
36+
const XML_PATH_DEFAULT_EMAIL_DOMAIN = 'customer/create_account/email_domain';
3737

3838
private const XML_PATH_EMAIL_REQUIRED_CREATE_ORDER = 'customer/create_account/email_required_create_order';
3939
/**
@@ -100,6 +100,8 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
100100
protected $_quote;
101101

102102
/**
103+
* Core registry
104+
*
103105
* @var \Magento\Framework\Registry
104106
*/
105107
protected $_coreRegistry = null;
@@ -110,6 +112,8 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
110112
protected $_logger;
111113

112114
/**
115+
* Core event manager proxy
116+
*
113117
* @var \Magento\Framework\Event\ManagerInterface
114118
*/
115119
protected $_eventManager = null;
@@ -1829,9 +1833,6 @@ protected function _validateCustomerData(\Magento\Customer\Api\Data\CustomerInte
18291833
*/
18301834
public function _prepareCustomer()
18311835
{
1832-
if ($this->getQuote()->getCustomerIsGuest()) {
1833-
return $this;
1834-
}
18351836
/** @var $store \Magento\Store\Model\Store */
18361837
$store = $this->getSession()->getStore();
18371838
$customer = $this->getQuote()->getCustomer();
@@ -1844,19 +1845,18 @@ public function _prepareCustomer()
18441845
->setWebsiteId($store->getWebsiteId())
18451846
->setCreatedAt(null);
18461847
$customer = $this->_validateCustomerData($customer);
1847-
} elseif (!$customer->getId()) {
1848-
/** Create new customer */
1849-
$customerBillingAddressDataObject = $this->getBillingAddress()->exportCustomerAddress();
1850-
$customer->setSuffix($customerBillingAddressDataObject->getSuffix())
1851-
->setFirstname($customerBillingAddressDataObject->getFirstname())
1852-
->setLastname($customerBillingAddressDataObject->getLastname())
1853-
->setMiddlename($customerBillingAddressDataObject->getMiddlename())
1854-
->setPrefix($customerBillingAddressDataObject->getPrefix())
1855-
->setStoreId($store->getId())
1856-
->setWebsiteId($store->getWebsiteId())
1857-
->setEmail($this->_getNewCustomerEmail());
1858-
$customer = $this->_validateCustomerData($customer);
18591848
}
1849+
1850+
$customerBillingAddressDataObject = $this->getBillingAddress()->exportCustomerAddress();
1851+
$customer->setSuffix($customerBillingAddressDataObject->getSuffix())
1852+
->setFirstname($customerBillingAddressDataObject->getFirstname())
1853+
->setLastname($customerBillingAddressDataObject->getLastname())
1854+
->setMiddlename($customerBillingAddressDataObject->getMiddlename())
1855+
->setPrefix($customerBillingAddressDataObject->getPrefix())
1856+
->setStoreId($store->getId())
1857+
->setWebsiteId($store->getWebsiteId())
1858+
->setEmail($this->_getNewCustomerEmail());
1859+
$customer = $this->_validateCustomerData($customer);
18601860
$this->getQuote()->setCustomer($customer);
18611861

18621862
if ($this->getBillingAddress()->getSaveInAddressBook()) {
@@ -1984,11 +1984,6 @@ public function createOrder()
19841984
$orderData = [];
19851985
if ($this->getSession()->getOrder()->getId()) {
19861986
$oldOrder = $this->getSession()->getOrder();
1987-
if ($oldOrder->getCustomerIsGuest()) {
1988-
$quote->setCustomerFirstname($oldOrder->getCustomerFirstname());
1989-
$quote->setCustomerMiddlename($oldOrder->getCustomerMiddlename());
1990-
$quote->setCustomerLastname($oldOrder->getCustomerLastname());
1991-
}
19921987
$originalId = $oldOrder->getOriginalIncrementId();
19931988
if (!$originalId) {
19941989
$originalId = $oldOrder->getIncrementId();

dev/tests/integration/testsuite/Magento/Downloadable/_files/order_with_downloadable_product_with_additional_options.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
\Magento\Sales\Model\Order\Address::class,
99
[
1010
'data' => [
11-
'firstname' => 'guest',
12-
'lastname' => 'guest',
11+
'firstname' => 'guestfname',
12+
'lastname' => 'guestlname',
1313
'email' => '[email protected]',
1414
'street' => 'street',
1515
'city' => 'Los Angeles',
@@ -50,12 +50,6 @@
5050
'100000001'
5151
)->setCustomerIsGuest(
5252
true
53-
)->setCustomerFirstname(
54-
'guestfname'
55-
)->setCustomerLastname(
56-
'guestlname'
57-
)->setCustomerMiddlename(
58-
'guestmname'
5953
)->setStoreId(
6054
1
6155
)->setEmailSent(

dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressSaveTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Magento\Sales\Controller\Adminhtml\Order;
99

1010
use Magento\Framework\App\Request\Http as HttpRequest;
11+
use Magento\Quote\Model\QuoteRepository;
1112
use Magento\Sales\Api\Data\OrderAddressInterface;
1213
use Magento\Sales\Api\Data\OrderInterface;
1314
use Magento\Sales\Api\Data\OrderInterfaceFactory;
@@ -75,6 +76,13 @@ public function testSave(string $type): void
7576
$this->stringContains(sprintf('sales/order/view/order_id/%s/', $order->getId()))
7677
);
7778
$this->assertAddressData($addressId, $data);
79+
/** @var $quoteobj QuoteRepository */
80+
$quoteobj = $this->objectManager->create(QuoteRepository::class);
81+
$quote = $quoteobj->get($order->getQuoteId());
82+
self::assertEquals('New test name', $quote->getCustomerFirstname());
83+
self::assertEquals('New test lastname', $quote->getCustomerLastname());
84+
self::assertEquals('New test name', $order->getCustomerFirstname());
85+
self::assertEquals('New test lastname', $order->getCustomerLastname());
7886
}
7987

8088
/**

dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use Magento\Framework\Message\ManagerInterface;
1414
use Magento\Framework\Registry;
1515
use Magento\Quote\Model\Quote;
16-
use Magento\Quote\Model\QuoteRepository;
1716
use Magento\Sales\Api\Data\OrderAddressExtensionInterface;
1817
use Magento\Sales\Api\Data\OrderAddressExtensionInterfaceFactory;
1918
use Magento\Sales\Api\OrderManagementInterface;
@@ -114,16 +113,6 @@ public function testInitFromOrderAndCreateOrderFromQuoteWithAdditionalOptions()
114113
$this->model->setPaymentData(['method' => 'checkmo']);
115114

116115
$newOrder = $this->model->createOrder();
117-
/** @var $quoteobj QuoteRepository */
118-
$quoteobj = $this->objectManager->create(QuoteRepository::class);
119-
$newQuote = $quoteobj->get($newOrder->getQuoteId());
120-
self::assertEquals($order->getCustomerFirstname(), $newQuote->getCustomerFirstname());
121-
self::assertEquals($order->getCustomerLastname(), $newQuote->getCustomerLastname());
122-
self::assertEquals($order->getCustomerLastname(), $newQuote->getCustomerLastname());
123-
self::assertEquals($order->getCustomerFirstname(), $newOrder->getCustomerFirstname());
124-
self::assertEquals($order->getCustomerLastname(), $newOrder->getCustomerLastname());
125-
self::assertEquals($order->getCustomerMiddlename(), $newOrder->getCustomerMiddlename());
126-
127116
$newOrderItems = $newOrder->getItemsCollection();
128117

129118
self::assertEquals(1, $newOrderItems->count());

0 commit comments

Comments
 (0)