Skip to content
18 changes: 15 additions & 3 deletions app/code/Magento/Sales/Model/Order/ItemRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
namespace Magento\Sales\Model\Order;

use Magento\Catalog\Model\ProductOptionProcessorInterface;
use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
use Magento\Framework\Api\SearchCriteriaInterface;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\DataObject;
use Magento\Framework\DataObject\Factory as DataObjectFactory;
use Magento\Framework\Exception\InputException;
Expand All @@ -17,8 +19,8 @@
use Magento\Sales\Api\Data\OrderItemInterface;
use Magento\Sales\Api\Data\OrderItemSearchResultInterfaceFactory;
use Magento\Sales\Api\OrderItemRepositoryInterface;
use Magento\Sales\Model\Order\ProductOption;
use Magento\Sales\Model\ResourceModel\Metadata;
use Magento\Sales\Model\ResourceModel\Order\Item\Collection;

/**
* Repository class for @see OrderItemInterface
Expand Down Expand Up @@ -61,12 +63,18 @@ class ItemRepository implements OrderItemRepositoryInterface, ResetAfterRequestI
*/
private $productOption;

/**
* @var JoinProcessorInterface|mixed
*/
private $extensionAttributesJoinProcessor;

/**
* @param DataObjectFactory $objectFactory
* @param Metadata $metadata
* @param OrderItemSearchResultInterfaceFactory $searchResultFactory
* @param CollectionProcessorInterface $collectionProcessor
* @param ProductOption $productOption
* @param JoinProcessorInterface|null $extensionAttributesJoinProcessor
* @param array $processorPool
*/
public function __construct(
Expand All @@ -75,13 +83,16 @@ public function __construct(
OrderItemSearchResultInterfaceFactory $searchResultFactory,
CollectionProcessorInterface $collectionProcessor,
ProductOption $productOption,
JoinProcessorInterface $extensionAttributesJoinProcessor = null,
array $processorPool = []
) {
$this->objectFactory = $objectFactory;
$this->metadata = $metadata;
$this->searchResultFactory = $searchResultFactory;
$this->collectionProcessor = $collectionProcessor;
$this->productOption = $productOption;
$this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor
?: ObjectManager::getInstance()->get(JoinProcessorInterface::class);
$this->processorPool = $processorPool;
}

Expand Down Expand Up @@ -130,10 +141,11 @@ public function get($id)
*/
public function getList(SearchCriteriaInterface $searchCriteria)
{
/** @var \Magento\Sales\Model\ResourceModel\Order\Item\Collection $searchResult */
/** @var Collection $searchResult */
$searchResult = $this->searchResultFactory->create();
$searchResult->setSearchCriteria($searchCriteria);
$this->extensionAttributesJoinProcessor->process($searchResult);
$this->collectionProcessor->process($searchCriteria, $searchResult);
$searchResult->setSearchCriteria($searchCriteria);
/** @var OrderItemInterface $orderItem */
foreach ($searchResult->getItems() as $orderItem) {
$this->productOption->add($orderItem);
Expand Down