Skip to content

Commit 85d7d87

Browse files
author
Serhii Balko
committed
MC-38625: Storefront Order History product count is doubled if has more than 10 configurables
1 parent 9dce407 commit 85d7d87

File tree

1 file changed

+58
-25
lines changed

1 file changed

+58
-25
lines changed

app/code/Magento/Sales/Block/Order/Items.php

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,29 @@
99
*/
1010
namespace Magento\Sales\Block\Order;
1111

12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Framework\DataObject;
14+
use Magento\Framework\Registry;
15+
use Magento\Framework\View\Element\AbstractBlock;
16+
use Magento\Framework\View\Element\Template\Context;
17+
use Magento\Sales\Block\Items\AbstractItems;
18+
use Magento\Sales\Model\Order;
19+
use Magento\Sales\Model\ResourceModel\Order\Item\Collection;
20+
use Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory;
21+
use Magento\Theme\Block\Html\Pager;
22+
1223
/**
1324
* Sales order view items block.
1425
*
1526
* @api
1627
* @since 100.0.2
1728
*/
18-
class Items extends \Magento\Sales\Block\Items\AbstractItems
29+
class Items extends AbstractItems
1930
{
2031
/**
2132
* Core registry
2233
*
23-
* @var \Magento\Framework\Registry
34+
* @var Registry
2435
*/
2536
protected $_coreRegistry = null;
2637

@@ -32,30 +43,30 @@ class Items extends \Magento\Sales\Block\Items\AbstractItems
3243
private $itemsPerPage;
3344

3445
/**
35-
* @var \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory
46+
* @var CollectionFactory
3647
*/
3748
private $itemCollectionFactory;
3849

3950
/**
40-
* @var \Magento\Sales\Model\ResourceModel\Order\Item\Collection|null
51+
* @var Collection|null
4152
*/
4253
private $itemCollection;
4354

4455
/**
45-
* @param \Magento\Framework\View\Element\Template\Context $context
46-
* @param \Magento\Framework\Registry $registry
56+
* @param Context $context
57+
* @param Registry $registry
4758
* @param array $data
48-
* @param \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory|null $itemCollectionFactory
59+
* @param CollectionFactory|null $itemCollectionFactory
4960
*/
5061
public function __construct(
51-
\Magento\Framework\View\Element\Template\Context $context,
52-
\Magento\Framework\Registry $registry,
62+
Context $context,
63+
Registry $registry,
5364
array $data = [],
54-
\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $itemCollectionFactory = null
65+
CollectionFactory $itemCollectionFactory = null
5566
) {
5667
$this->_coreRegistry = $registry;
57-
$this->itemCollectionFactory = $itemCollectionFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
58-
->get(\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory::class);
68+
$this->itemCollectionFactory = $itemCollectionFactory ?: ObjectManager::getInstance()
69+
->get(CollectionFactory::class);
5970
parent::__construct($context, $data);
6071
}
6172

@@ -68,19 +79,12 @@ public function __construct(
6879
protected function _prepareLayout()
6980
{
7081
$this->itemsPerPage = $this->_scopeConfig->getValue('sales/orders/items_per_page');
82+
$this->itemCollection = $this->createItemsCollection();
7183

72-
$this->itemCollection = $this->itemCollectionFactory->create();
73-
$this->itemCollection->setOrderFilter($this->getOrder());
74-
$this->itemCollection->addFieldToFilter('parent_item_id', ['null' => true]);
75-
76-
/** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
84+
/** @var Pager $pagerBlock */
7785
$pagerBlock = $this->getChildBlock('sales_order_item_pager');
7886
if ($pagerBlock) {
79-
$pagerBlock->setLimit($this->itemsPerPage);
80-
//here pager updates collection parameters
81-
$pagerBlock->setCollection($this->itemCollection);
82-
$pagerBlock->setAvailableLimit([$this->itemsPerPage]);
83-
$pagerBlock->setShowAmounts($this->isPagerDisplayed());
87+
$this->preparePager($pagerBlock);
8488
}
8589

8690
return parent::_prepareLayout();
@@ -105,7 +109,7 @@ public function isPagerDisplayed()
105109
*
106110
* To be called from templates(after _prepareLayout()).
107111
*
108-
* @return \Magento\Framework\DataObject[]
112+
* @return DataObject[]
109113
* @since 100.1.7
110114
*/
111115
public function getItems()
@@ -123,18 +127,47 @@ public function getItems()
123127
*/
124128
public function getPagerHtml()
125129
{
126-
/** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
130+
/** @var Pager $pagerBlock */
127131
$pagerBlock = $this->getChildBlock('sales_order_item_pager');
128132
return $pagerBlock ? $pagerBlock->toHtml() : '';
129133
}
130134

131135
/**
132136
* Retrieve current order model instance
133137
*
134-
* @return \Magento\Sales\Model\Order
138+
* @return Order
135139
*/
136140
public function getOrder()
137141
{
138142
return $this->_coreRegistry->registry('current_order');
139143
}
144+
145+
/**
146+
* Prepare pager block
147+
*
148+
* @param AbstractBlock $pagerBlock
149+
*/
150+
private function preparePager(AbstractBlock $pagerBlock): void
151+
{
152+
$collectionToPager = $this->createItemsCollection();
153+
$collectionToPager->addFieldToFilter('parent_item_id', ['null' => true]);
154+
$pagerBlock->setCollection($collectionToPager);
155+
156+
$pagerBlock->setLimit($this->itemsPerPage);
157+
$pagerBlock->setAvailableLimit([$this->itemsPerPage]);
158+
$pagerBlock->setShowAmounts($this->isPagerDisplayed());
159+
}
160+
161+
/**
162+
* Create items collection
163+
*
164+
* @return Collection
165+
*/
166+
private function createItemsCollection(): Collection
167+
{
168+
$collection = $this->itemCollectionFactory->create();
169+
$collection->setOrderFilter($this->getOrder());
170+
171+
return $collection;
172+
}
140173
}

0 commit comments

Comments
 (0)