Skip to content

Commit f9bb650

Browse files
committed
Merge remote-tracking branch 'origin/MC-38498' into 2.4-develop-pr45
2 parents c644b3d + ee08b09 commit f9bb650

File tree

4 files changed

+159
-6
lines changed

4 files changed

+159
-6
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Sales\ViewModel\Customer\Address\Billing;
9+
10+
use Magento\Framework\View\Element\Block\ArgumentInterface;
11+
use Magento\Sales\Model\AdminOrder\Create;
12+
13+
/**
14+
* Customer billing address data provider
15+
*/
16+
class AddressDataProvider implements ArgumentInterface
17+
{
18+
/**
19+
* @var Create
20+
*/
21+
private $orderCreate;
22+
23+
/**
24+
* Customer billing address
25+
*
26+
* @param Create $orderCreate
27+
*/
28+
public function __construct(
29+
Create $orderCreate
30+
) {
31+
$this->orderCreate = $orderCreate;
32+
}
33+
34+
/**
35+
* Get save billing address in the address book
36+
*
37+
* @return int
38+
*/
39+
public function getSaveInAddressBook(): int
40+
{
41+
return (int)$this->orderCreate->getBillingAddress()->getSaveInAddressBook();
42+
}
43+
}

app/code/Magento/Sales/view/adminhtml/layout/sales_order_create_load_block_billing_address.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<arguments>
1313
<argument name="customerAddressFormatter" xsi:type="object">Magento\Sales\ViewModel\Customer\AddressFormatter</argument>
1414
<argument name="customerAddressCollection" xsi:type="object">Magento\Customer\Model\ResourceModel\Address\Collection</argument>
15+
<argument name="billingAddressDataProvider" xsi:type="object">Magento\Sales\ViewModel\Customer\Address\Billing\AddressDataProvider</argument>
1516
</arguments>
1617
</block>
1718
</referenceContainer>

app/code/Magento/Sales/view/adminhtml/templates/order/create/form/address.phtml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ endif;
2424
*/
2525
$customerAddressFormatter = $block->getData('customerAddressFormatter');
2626

27+
/**
28+
* @var \Magento\Sales\ViewModel\Customer\Address\Billing\AddressDataProvider $billingAddressDataProvider
29+
*/
30+
$billingAddressDataProvider = $block->getData('billingAddressDataProvider');
31+
2732
/**
2833
* @var \Magento\Sales\Block\Adminhtml\Order\Create\Billing\Address|
2934
* \Magento\Sales\Block\Adminhtml\Order\Create\Shipping\Address $block
@@ -114,7 +119,8 @@ endif; ?>
114119
type="checkbox"
115120
id="<?= $block->escapeHtmlAttr($block->getForm()->getHtmlIdPrefix()) ?>save_in_address_book"
116121
value="1"
117-
<?php if (!$block->getDontSaveInAddressBook() && !$block->getAddressId()): ?>
122+
<?php if ($billingAddressDataProvider && $billingAddressDataProvider->getSaveInAddressBook() ||
123+
$block->getIsShipping() && !$block->getDontSaveInAddressBook() && !$block->getAddressId()): ?>
118124
checked="checked"
119125
<?php endif; ?>
120126
class="admin__control-checkbox"/>

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

Lines changed: 108 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,30 @@
77

88
namespace Magento\Sales\Controller\Adminhtml\Order\Create;
99

10-
use Magento\Customer\Model\Session;
1110
use Magento\Framework\Api\SearchCriteriaBuilder;
12-
use Magento\Framework\Escaper;
13-
use Magento\Framework\Registry;
1411
use Magento\Quote\Api\CartRepositoryInterface;
1512
use Magento\Quote\Api\Data\CartInterface;
1613
use Magento\Sales\Api\Data\OrderInterfaceFactory;
17-
use Magento\TestFramework\Core\Version\View;
1814
use Magento\TestFramework\Request;
1915
use Magento\TestFramework\TestCase\AbstractBackendController;
16+
use Magento\Customer\Api\AccountManagementInterface;
17+
use Magento\Customer\Api\Data\CustomerInterface;
18+
use Magento\Customer\Api\Data\CustomerInterfaceFactory;
19+
use Magento\Framework\App\Request\Http;
20+
use Magento\Sales\Api\OrderRepositoryInterface;
21+
use Magento\Sales\Model\Order;
22+
use Magento\Sales\Model\OrderFactory;
23+
use Magento\TestFramework\Helper\Xpath;
24+
use Magento\Sales\Api\Data\OrderInterface;
25+
use Magento\Customer\Api\CustomerRepositoryInterface;
26+
use Magento\Framework\Exception\NoSuchEntityException;
2027

2128
/**
2229
* Test for reorder controller.
2330
*
2431
* @see \Magento\Sales\Controller\Adminhtml\Order\Create\Reorder
2532
* @magentoAppArea adminhtml
33+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2634
*/
2735
class ReorderTest extends AbstractBackendController
2836
{
@@ -35,6 +43,31 @@ class ReorderTest extends AbstractBackendController
3543
/** @var CartInterface */
3644
private $quote;
3745

46+
/**
47+
* @var CustomerRepositoryInterface
48+
*/
49+
private $customerRepository;
50+
51+
/**
52+
* @var array
53+
*/
54+
private $customerIds = [];
55+
56+
/**
57+
* @var OrderRepositoryInterface
58+
*/
59+
private $orderRepository;
60+
61+
/**
62+
* @var CustomerInterfaceFactory
63+
*/
64+
private $customerFactory;
65+
66+
/**
67+
* @var AccountManagementInterface
68+
*/
69+
private $accountManagement;
70+
3871
/**
3972
* @inheritdoc
4073
*/
@@ -43,6 +76,10 @@ protected function setUp(): void
4376
parent::setUp();
4477
$this->orderFactory = $this->_objectManager->get(OrderInterfaceFactory::class);
4578
$this->quoteRepository = $this->_objectManager->get(CartRepositoryInterface::class);
79+
$this->orderRepository = $this->_objectManager->get(OrderRepositoryInterface::class);
80+
$this->customerFactory = $this->_objectManager->get(CustomerInterfaceFactory::class);
81+
$this->accountManagement = $this->_objectManager->get(AccountManagementInterface::class);
82+
$this->customerRepository = $this->_objectManager->get(CustomerRepositoryInterface::class);
4683
}
4784

4885
/**
@@ -53,7 +90,13 @@ protected function tearDown(): void
5390
if ($this->quote instanceof CartInterface) {
5491
$this->quoteRepository->delete($this->quote);
5592
}
56-
93+
foreach ($this->customerIds as $customerId) {
94+
try {
95+
$this->customerRepository->deleteById($customerId);
96+
} catch (NoSuchEntityException $e) {
97+
//customer already deleted
98+
}
99+
}
57100
parent::tearDown();
58101
}
59102

@@ -74,6 +117,66 @@ public function testReorderAfterJSCalendarEnabled(): void
74117
$this->assertTrue(!empty($this->quote));
75118
}
76119

120+
/**
121+
* Test load billing address by reorder for delegating customer
122+
*
123+
* @magentoDataFixture Magento/Customer/_files/attribute_user_defined_address.php
124+
* @magentoDataFixture Magento/Sales/_files/order.php
125+
*
126+
* @return void
127+
*/
128+
public function testLoadBillingAddressAfterReorderWithDelegatingCustomer(): void
129+
{
130+
$orderId = $this->getOrderWithDelegatingCustomer()->getId();
131+
$this->getRequest()->setMethod(Http::METHOD_GET);
132+
$this->getRequest()->setParam('order_id', $orderId);
133+
$this->dispatch('backend/sales/order_create/loadBlock/block/billing_address');
134+
$html = $this->getResponse()->getBody();
135+
$this->assertEquals(
136+
0,
137+
Xpath::getElementsCountForXpath(
138+
'//*[@id="order-billing_address_save_in_address_book" and contains(@checked, "checked")]',
139+
$html
140+
),
141+
'Billing address checked "Save in address book"'
142+
);
143+
}
144+
145+
/**
146+
* Get Order with delegating customer
147+
*
148+
* @return OrderInterface
149+
*/
150+
private function getOrderWithDelegatingCustomer(): OrderInterface
151+
{
152+
$orderAutoincrementId = '100000001';
153+
/** @var Order $orderModel */
154+
$orderModel = $this->orderFactory->create();
155+
$orderModel->loadByIncrementId($orderAutoincrementId);
156+
//Saving new customer with prepared data from order.
157+
/** @var CustomerInterface $customer */
158+
$customer = $this->customerFactory->create();
159+
$customer->setWebsiteId(1)
160+
->setEmail('customer_order_delegate@example.com')
161+
->setGroupId(1)
162+
->setStoreId(1)
163+
->setPrefix('Mr.')
164+
->setFirstname('John')
165+
->setMiddlename('A')
166+
->setLastname('Smith')
167+
->setSuffix('Esq.')
168+
->setTaxvat('12')
169+
->setGender(0);
170+
$createdCustomer = $this->accountManagement->createAccount(
171+
$customer,
172+
'12345abcD'
173+
);
174+
$this->customerIds[] = $createdCustomer->getId();
175+
$orderModel->setCustomerId($createdCustomer->getId());
176+
177+
return $this->orderRepository->save($orderModel);
178+
}
179+
77180
/**
78181
* Dispatch reorder request.
79182
*

0 commit comments

Comments
 (0)