Skip to content

Commit b651e69

Browse files
author
olysenko
committed
MAGETWO-64120: Error processing your request when placing reorder for simple product of configurable if attribute is changed
1 parent a9bc4ad commit b651e69

File tree

6 files changed

+39
-35
lines changed

6 files changed

+39
-35
lines changed

app/code/Magento/ConfigurableProduct/Model/Order/Reorder/OrderedProductAvailability.php renamed to app/code/Magento/ConfigurableProduct/Model/Order/Reorder/OrderedProductAvailabilityChecker.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
*/
66
namespace Magento\ConfigurableProduct\Model\Order\Reorder;
77

8-
use Magento\Sales\Model\Order\Reorder\OrderedProductAvailabilityInterface;
8+
use Magento\Sales\Model\Order\Reorder\OrderedProductAvailabilityCheckerInterface;
99
use Magento\Sales\Model\Order\Item;
1010
use Magento\Catalog\Api\Data\ProductInterface;
1111
use Magento\Framework\App\ResourceConnection;
1212
use Magento\Framework\EntityManager\MetadataPool;
1313
use Magento\Store\Model\Store;
1414

1515
/**
16-
* Class OrderedProductAvailability
16+
* Class OrderedProductAvailabilityChecker
1717
*/
18-
class OrderedProductAvailability implements OrderedProductAvailabilityInterface
18+
class OrderedProductAvailabilityChecker implements OrderedProductAvailabilityCheckerInterface
1919
{
2020
/**
2121
* @var ResourceConnection
@@ -42,7 +42,7 @@ public function __construct(
4242
/**
4343
* @inheritdoc
4444
*/
45-
public function checkAvailability(Item $item)
45+
public function isAvailable(Item $item)
4646
{
4747
$buyRequest = $item->getBuyRequest();
4848
$superAttribute = $buyRequest->getData()['super_attribute'];
@@ -94,7 +94,7 @@ public function checkAvailability(Item $item)
9494
$attributeValue
9595
);
9696
}
97-
return $connection->fetchCol($select);
97+
return (bool)$connection->fetchCol($select);
9898
}
9999

100100
/**

app/code/Magento/ConfigurableProduct/etc/di.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,10 @@
185185
<argument name="connectionName" xsi:type="string">indexer</argument>
186186
</arguments>
187187
</type>
188-
<type name="Magento\Sales\Model\Order\Reorder\OrderedProductAvailability">
188+
<type name="Magento\Sales\Model\Order\Reorder\OrderedProductAvailabilityChecker">
189189
<arguments>
190190
<argument name="productAvailabilityChecks" xsi:type="array">
191-
<item name="configurable" xsi:type="object">Magento\ConfigurableProduct\Model\Order\Reorder\OrderedProductAvailability</item>
191+
<item name="configurable" xsi:type="object">Magento\ConfigurableProduct\Model\Order\Reorder\OrderedProductAvailabilityChecker</item>
192192
</argument>
193193
</arguments>
194194
</type>

app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Reorder.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,32 @@
88
use Magento\Backend\App\Action;
99
use Magento\Backend\Model\View\Result\ForwardFactory;
1010
use Magento\Framework\View\Result\PageFactory;
11-
use \Magento\Sales\Model\Order\Reorder\HasUnavailableProduct;
11+
use \Magento\Sales\Model\Order\Reorder\UnavailableProductsProvider;
1212

1313
class Reorder extends \Magento\Sales\Controller\Adminhtml\Order\Create
1414
{
1515
/**
16-
* @var HasUnavailableProduct
16+
* @var UnavailableProductsProvider
1717
*/
18-
private $hasUnavailableProduct;
18+
private $unavailableProductsProvider;
1919

2020
/**
21-
* @param HasUnavailableProduct $hasUnavailableProduct
21+
* @param UnavailableProductsProvider $unavailableProductsProvider
2222
* @param Action\Context $context
2323
* @param \Magento\Catalog\Helper\Product $productHelper
2424
* @param \Magento\Framework\Escaper $escaper
2525
* @param PageFactory $resultPageFactory
2626
* @param ForwardFactory $resultForwardFactory
2727
*/
2828
public function __construct(
29-
HasUnavailableProduct $hasUnavailableProduct,
29+
UnavailableProductsProvider $unavailableProductsProvider,
3030
Action\Context $context,
3131
\Magento\Catalog\Helper\Product $productHelper,
3232
\Magento\Framework\Escaper $escaper,
3333
PageFactory $resultPageFactory,
3434
ForwardFactory $resultForwardFactory
3535
) {
36-
$this->hasUnavailableProduct = $hasUnavailableProduct;
36+
$this->unavailableProductsProvider = $unavailableProductsProvider;
3737
parent::__construct(
3838
$context,
3939
$productHelper,
@@ -61,7 +61,7 @@ public function execute()
6161
$resultRedirect->setPath('sales/order/');
6262
}
6363

64-
$unavailableProducts = $this->hasUnavailableProduct->hasUnavailableProducts($order);
64+
$unavailableProducts = $this->unavailableProductsProvider->getForOrder($order);
6565
if (count($unavailableProducts) > 0) {
6666
foreach ($unavailableProducts as $sku) {
6767
$this->messageManager->addNoticeMessage(

app/code/Magento/Sales/Model/Order/Reorder/OrderedProductAvailability.php renamed to app/code/Magento/Sales/Model/Order/Reorder/OrderedProductAvailabilityChecker.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
/**
1212
* @api
1313
*
14-
* Class OrderedProductAvailability
14+
* Class OrderedProductAvailabilityChecker
1515
*/
16-
class OrderedProductAvailability implements OrderedProductAvailabilityInterface
16+
class OrderedProductAvailabilityChecker implements OrderedProductAvailabilityCheckerInterface
1717
{
1818

1919
/**
20-
* @var OrderedProductAvailabilityInterface[]
20+
* @var OrderedProductAvailabilityCheckerInterface[]
2121
*/
2222
private $productAvailabilityChecks;
2323

@@ -32,19 +32,18 @@ public function __construct(array $productAvailabilityChecks)
3232
/**
3333
* @inheritdoc
3434
*/
35-
public function checkAvailability(Item $item)
35+
public function isAvailable(Item $item)
3636
{
3737
if ($item->getParentItem()
3838
&& isset($this->productAvailabilityChecks[$item->getParentItem()->getProductType()])
3939
) {
40-
4140
$checkForType = $this->productAvailabilityChecks[$item->getParentItem()->getProductType()];
42-
if (!$checkForType instanceof OrderedProductAvailabilityInterface) {
41+
if (!$checkForType instanceof OrderedProductAvailabilityCheckerInterface) {
4342
throw new ConfigurationMismatchException(__('Received check doesn\'t match interface'));
4443
}
4544
return $checkForType->checkAvailability($item);
4645
} else {
4746
return true;
4847
}
4948
}
50-
}
49+
}

app/code/Magento/Sales/Model/Order/Reorder/OrderedProductAvailabilityInterface.php renamed to app/code/Magento/Sales/Model/Order/Reorder/OrderedProductAvailabilityCheckerInterface.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77

88
use Magento\Sales\Model\Order\Item;
99

10-
interface OrderedProductAvailabilityInterface
10+
/**
11+
* Interface OrderedProductAvailabilityCheckerInterface
12+
*/
13+
interface OrderedProductAvailabilityCheckerInterface
1114
{
1215
/**
13-
* Check that the selected options of order item are still presented in Catalog
14-
* Returns true if the previously ordered item configuration is still available
16+
* Checks that the selected options of order item are still presented in Catalog.
17+
* Returns true if the previously ordered item configuration is still available.
1518
*
1619
* @param Item $item
1720
* @return bool
1821
*/
19-
public function checkAvailability(Item $item);
22+
public function isAvailable(Item $item);
2023
}

app/code/Magento/Sales/Model/Order/Reorder/HasUnavailableProduct.php renamed to app/code/Magento/Sales/Model/Order/Reorder/UnavailableProductsProvider.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,45 @@
77

88
use Magento\Sales\Model\Config;
99

10-
class HasUnavailableProduct
10+
/**
11+
* Class UnavailableProductsProvider
12+
*/
13+
class UnavailableProductsProvider
1114
{
1215
/**
1316
* @var Config
1417
*/
1518
private $salesConfig;
1619

1720
/**
18-
* @var OrderedProductAvailability
21+
* @var OrderedProductAvailabilityChecker
1922
*/
20-
private $orderedProductAvailability;
23+
private $orderedProductAvailabilityChecker;
2124

2225
/**
2326
* @param Config $salesConfig
24-
* @param OrderedProductAvailability $orderedProductAvailability
27+
* @param OrderedProductAvailabilityChecker $orderedProductAvailabilityChecker
2528
*/
2629
public function __construct(
2730
Config $salesConfig,
28-
OrderedProductAvailability $orderedProductAvailability
29-
31+
OrderedProductAvailabilityChecker $orderedProductAvailabilityChecker
3032
) {
3133
$this->salesConfig = $salesConfig;
32-
$this->orderedProductAvailability = $orderedProductAvailability;
34+
$this->orderedProductAvailabilityChecker = $orderedProductAvailabilityChecker;
3335
}
3436

3537
/**
36-
* Check if order has products that unavailable for now.
38+
* Gets products that are unavailable for the order.
3739
*
3840
* @param \Magento\Sales\Model\Order $order
3941
* @return array
4042
*/
41-
public function hasUnavailableProducts($order)
43+
public function getForOrder($order)
4244
{
4345
$unavailableProducts = [];
4446
foreach ($order->getItemsCollection($this->salesConfig->getAvailableProductTypes(), false) as $orderItem) {
4547
/** @var \Magento\Sales\Model\Order\Item $orderItem */
46-
if (!$this->orderedProductAvailability->checkAvailability($orderItem)) {
48+
if (!$this->orderedProductAvailabilityChecker->isAvailable($orderItem)) {
4749
$unavailableProducts[] = $orderItem->getSku();
4850
}
4951
}

0 commit comments

Comments
 (0)