Skip to content

Commit a9b3fda

Browse files
author
Serhii Balko
committed
Merge remote-tracking branch 'origin/MC-38625' into 2.4-develop-pr51
2 parents ad0ba79 + d833b62 commit a9b3fda

File tree

2 files changed

+89
-44
lines changed
  • app/code/Magento/Sales/Block/Order
  • dev/tests/integration/testsuite/Magento/Sales/Block/Order

2 files changed

+89
-44
lines changed

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

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

12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Framework\Registry;
14+
use Magento\Framework\View\Element\AbstractBlock;
15+
use Magento\Framework\View\Element\Template\Context;
16+
use Magento\Sales\Block\Items\AbstractItems;
17+
use Magento\Sales\Model\Order;
18+
use Magento\Sales\Model\ResourceModel\Order\Item\Collection;
19+
use Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory;
20+
use Magento\Theme\Block\Html\Pager;
21+
1222
/**
1323
* Sales order view items block.
1424
*
1525
* @api
1626
* @since 100.0.2
1727
*/
18-
class Items extends \Magento\Sales\Block\Items\AbstractItems
28+
class Items extends AbstractItems
1929
{
2030
/**
2131
* Core registry
2232
*
23-
* @var \Magento\Framework\Registry
33+
* @var Registry
2434
*/
2535
protected $_coreRegistry = null;
2636

@@ -32,30 +42,30 @@ class Items extends \Magento\Sales\Block\Items\AbstractItems
3242
private $itemsPerPage;
3343

3444
/**
35-
* @var \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory
45+
* @var CollectionFactory
3646
*/
3747
private $itemCollectionFactory;
3848

3949
/**
40-
* @var \Magento\Sales\Model\ResourceModel\Order\Item\Collection|null
50+
* @var Collection|null
4151
*/
4252
private $itemCollection;
4353

4454
/**
45-
* @param \Magento\Framework\View\Element\Template\Context $context
46-
* @param \Magento\Framework\Registry $registry
55+
* @param Context $context
56+
* @param Registry $registry
4757
* @param array $data
48-
* @param \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory|null $itemCollectionFactory
58+
* @param CollectionFactory|null $itemCollectionFactory
4959
*/
5060
public function __construct(
51-
\Magento\Framework\View\Element\Template\Context $context,
52-
\Magento\Framework\Registry $registry,
61+
Context $context,
62+
Registry $registry,
5363
array $data = [],
54-
\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $itemCollectionFactory = null
64+
CollectionFactory $itemCollectionFactory = null
5565
) {
5666
$this->_coreRegistry = $registry;
57-
$this->itemCollectionFactory = $itemCollectionFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
58-
->get(\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory::class);
67+
$this->itemCollectionFactory = $itemCollectionFactory ?: ObjectManager::getInstance()
68+
->get(CollectionFactory::class);
5969
parent::__construct($context, $data);
6070
}
6171

@@ -68,18 +78,12 @@ public function __construct(
6878
protected function _prepareLayout()
6979
{
7080
$this->itemsPerPage = $this->_scopeConfig->getValue('sales/orders/items_per_page');
81+
$this->itemCollection = $this->createItemsCollection();
7182

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

8589
return parent::_prepareLayout();
@@ -122,18 +126,47 @@ public function getItems()
122126
*/
123127
public function getPagerHtml()
124128
{
125-
/** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
129+
/** @var Pager $pagerBlock */
126130
$pagerBlock = $this->getChildBlock('sales_order_item_pager');
127131
return $pagerBlock ? $pagerBlock->toHtml() : '';
128132
}
129133

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

dev/tests/integration/testsuite/Magento/Sales/Block/Order/ItemsTest.php

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,22 @@ public function testGetOrderItems(): void
8181
$this->assertCount(1, $this->block->getItems());
8282
}
8383

84+
/**
85+
* @magentoDataFixture Magento/Sales/_files/order_configurable_product.php
86+
*
87+
* @return void
88+
*/
89+
public function testGetPagerCountConfigurable(): void
90+
{
91+
$order = $this->orderFactory->create()->loadByIncrementId('100000001');
92+
$this->registerOrder($order);
93+
$this->prepareBlockWithPager();
94+
95+
/** @var Pager $pagerBlock */
96+
$pagerBlock = $this->block->getChildBlock('sales_order_item_pager');
97+
$this->assertCount(1, $pagerBlock->getCollection()->getItems());
98+
}
99+
84100
/**
85101
* @magentoConfigFixture default/sales/orders/items_per_page 3
86102
* @magentoDataFixture Magento/Sales/_files/order_item_list.php
@@ -91,13 +107,7 @@ public function testPagerIsDisplayed(): void
91107
{
92108
$order = $this->orderFactory->create()->loadByIncrementId('100000001');
93109
$this->registerOrder($order);
94-
$this->block = $this->layout->createBlock(Items::class, 'items_block');
95-
$this->layout->addBlock(
96-
$this->objectManager->get(Pager::class),
97-
'sales_order_item_pager',
98-
'items_block'
99-
);
100-
$this->block->setLayout($this->layout);
110+
$this->prepareBlockWithPager();
101111
$this->assertTrue($this->block->isPagerDisplayed());
102112
}
103113

@@ -110,13 +120,7 @@ public function testPagerIsNotDisplayed(): void
110120
{
111121
$order = $this->orderFactory->create()->loadByIncrementId('100000001');
112122
$this->registerOrder($order);
113-
$this->block = $this->layout->createBlock(Items::class, 'items_block');
114-
$this->layout->addBlock(
115-
$this->objectManager->get(Pager::class),
116-
'sales_order_item_pager',
117-
'items_block'
118-
);
119-
$this->block->setLayout($this->layout);
123+
$this->prepareBlockWithPager();
120124
$this->assertFalse($this->block->isPagerDisplayed());
121125
$this->assertEmpty(preg_replace('/\s+/', '', strip_tags($this->block->getPagerHtml())));
122126
}
@@ -131,13 +135,7 @@ public function testGetPagerHtml(): void
131135
{
132136
$order = $this->orderFactory->create()->loadByIncrementId('100000001');
133137
$this->registerOrder($order);
134-
$this->block = $this->layout->createBlock(Items::class, 'items_block');
135-
$this->layout->addBlock(
136-
$this->objectManager->get(Pager::class),
137-
'sales_order_item_pager',
138-
'items_block'
139-
);
140-
$this->block->setLayout($this->layout);
138+
$this->prepareBlockWithPager();
141139
$this->assertNotEmpty(preg_replace('/\s+/', '', strip_tags($this->block->getPagerHtml())));
142140
$this->assertTrue($this->block->isPagerDisplayed());
143141
}
@@ -227,4 +225,18 @@ private function registerOrder(OrderInterface $order): void
227225
$this->registry->unregister('current_order');
228226
$this->registry->register('current_order', $order);
229227
}
228+
229+
/**
230+
* Create items block with pager
231+
*/
232+
private function prepareBlockWithPager(): void
233+
{
234+
$this->block = $this->layout->createBlock(Items::class, 'items_block');
235+
$this->layout->addBlock(
236+
$this->objectManager->get(Pager::class),
237+
'sales_order_item_pager',
238+
'items_block'
239+
);
240+
$this->block->setLayout($this->layout);
241+
}
230242
}

0 commit comments

Comments
 (0)