diff --git a/vendor/magento/module-requisition-list/Block/Requisition/View/Items/Grid.php b/vendor/magento/module-requisition-list/Block/Requisition/View/Items/Grid.php index 206fc289eea7..317b40ecadfb 100644 --- a/vendor/magento/module-requisition-list/Block/Requisition/View/Items/Grid.php +++ b/vendor/magento/module-requisition-list/Block/Requisition/View/Items/Grid.php @@ -1,14 +1,28 @@ 20, 50 => 50, 100 => 100, 500 => 500, 1000 => 1000]; + /** * @var Validation */ private $validation; /** - * @var \Magento\Store\Model\StoreManagerInterface + * @var StoreManagerInterface */ private $storeManager; /** - * @var \Magento\RequisitionList\Model\RequisitionList\ItemSelector + * @var ItemSelector */ private $itemSelector; @@ -43,24 +62,37 @@ class Grid extends \Magento\Framework\View\Element\Template */ private $errorsByItemId = []; + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * @var RequisitionListItemInterface[] + */ + private $items; + /** * @param Context $context * @param Validation $validation - * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\RequisitionList\Model\RequisitionList\ItemSelector $itemSelector + * @param StoreManagerInterface $storeManager + * @param ItemSelector $itemSelector * @param array $data [optional] + * @param CollectionFactory|null $collectionFactory */ public function __construct( Context $context, Validation $validation, - \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\RequisitionList\Model\RequisitionList\ItemSelector $itemSelector, - array $data = [] + StoreManagerInterface $storeManager, + ItemSelector $itemSelector, + array $data = [], + ?CollectionFactory $collectionFactory = null ) { parent::__construct($context, $data); $this->validation = $validation; $this->storeManager = $storeManager; $this->itemSelector = $itemSelector; + $this->collectionFactory = $collectionFactory ?? ObjectManager::getInstance()->get(CollectionFactory::class); } /** @@ -86,13 +118,23 @@ public function getRequisitionListItems() return null; } - $items = $this->itemSelector->selectAllItemsFromRequisitionList( - $requisitionId, - $this->storeManager->getWebsite()->getId() - ); + if ($this->items !== null && $this->getGridViewModel()->getCollection() !== null) { + return $this->items; + } + + /** @var Collection $collection */ + $collection = $this->collectionFactory->create(); + $collection->addFieldToFilter(RequisitionListItemInterface::REQUISITION_LIST_ID, $requisitionId); + $this->preparePager($collection); + + $items = $collection->getItems(); + + $this->itemSelector->attachProductsToItems($items, $this->storeManager->getWebsite()->getId(), true); + foreach ($items as $item) { $this->checkForItemError($item); } + uasort($items, function (RequisitionListItemInterface $firstItem, RequisitionListItemInterface $secondItem) { $isFirstItemError = !empty($this->errorsByItemId[$firstItem->getId()]); $isSecondItemError = !empty($this->errorsByItemId[$secondItem->getId()]); @@ -101,7 +143,10 @@ public function getRequisitionListItems() return ($diff > 0) ? 1 : -1; // for PHP 7 and 8 consistency }); - return $items; + $this->getGridViewModel()->setCollection($collection); + $this->items = $items; + + return $this->items; } /** @@ -139,4 +184,33 @@ public function getItemErrors(RequisitionListItemInterface $item) { return !empty($this->errorsByItemId[$item->getId()]) ? $this->errorsByItemId[$item->getId()] : []; } + + /** + * Prepare pager block + * + * @param Collection $collection + * @return void + */ + private function preparePager(Collection $collection) + { + if ($collection !== null) { + $pager = $this->getLayout()->createBlock( + \Magento\Theme\Block\Html\Pager::class, + 'requisition.list.pager' + )->setAvailableLimit(self::AVAILABLE_LIMIT)->setCollection($collection); + $this->setChild('pager', $pager); + } + } + + /** + * Prepare layout, prepare collection and pagination + * + * @return \Magento\Framework\View\Element\AbstractBlock + */ + protected function _prepareLayout(): void + { + $this->getRequisitionListItems(); + + parent::_prepareLayout(); + } } diff --git a/vendor/magento/module-requisition-list/Model/RequisitionList/ItemSelector.php b/vendor/magento/module-requisition-list/Model/RequisitionList/ItemSelector.php index c6f691f3f880..f423c92d1705 100644 --- a/vendor/magento/module-requisition-list/Model/RequisitionList/ItemSelector.php +++ b/vendor/magento/module-requisition-list/Model/RequisitionList/ItemSelector.php @@ -1,8 +1,17 @@ requisitionListItemProduct->extract( $requestedItems, diff --git a/vendor/magento/module-requisition-list/ViewModel/GridViewModel.php b/vendor/magento/module-requisition-list/ViewModel/GridViewModel.php new file mode 100644 index 000000000000..baaf78ab75b4 --- /dev/null +++ b/vendor/magento/module-requisition-list/ViewModel/GridViewModel.php @@ -0,0 +1,55 @@ + collection = $collection; + } + + /** + * Get Requisition List Item Collection + * + * @return Collection|null + */ + public function getCollection() : ?Collection + { + return $this->collection; + } +} diff --git a/vendor/magento/module-requisition-list/view/frontend/layout/requisition_list_requisition_view.xml b/vendor/magento/module-requisition-list/view/frontend/layout/requisition_list_requisition_view.xml index 892b0b71b8d6..03797a6a0b91 100644 --- a/vendor/magento/module-requisition-list/view/frontend/layout/requisition_list_requisition_view.xml +++ b/vendor/magento/module-requisition-list/view/frontend/layout/requisition_list_requisition_view.xml @@ -1,9 +1,18 @@ @@ -13,13 +22,15 @@ + + Magento\RequisitionList\ViewModel\GridViewModel + + template="Magento_RequisitionList::requisition/actions/export.phtml"> Magento\RequisitionList\ViewModel\Export diff --git a/vendor/magento/module-requisition-list/view/frontend/templates/requisition/view/items/grid.phtml b/vendor/magento/module-requisition-list/view/frontend/templates/requisition/view/items/grid.phtml index 733c7cf8a54a..1e0e382fce67 100644 --- a/vendor/magento/module-requisition-list/view/frontend/templates/requisition/view/items/grid.phtml +++ b/vendor/magento/module-requisition-list/view/frontend/templates/requisition/view/items/grid.phtml @@ -1,25 +1,41 @@ -getRequisitionListItems(); - +$collection = $block->getGridViewModel()->getCollection(); +$pageSize = $collection->getPageSize(); +$currentPage = $collection->getCurPage(); ?>
getChildHtml('requisition.management') ?> - -
escapeHtml(__('You have no items in this requisition list.')) ?>
- + +
+ escapeHtml(__('You have no items in this requisition list.')) ?> +
+
escapeUrl($block->getUrl('*/item/update', [ 'requisition_id' => (int)$block->getRequest()->getParam('requisition_id') ])) ?>" method="post" @@ -31,27 +47,27 @@ $itemsList = $block->getRequisitionListItems(); # - - escapeHtml(__('Item')) ?> + + escapeHtml(__('Item')) ?> - escapeHtml(__('Price')) ?> + escapeHtml(__('Price')) ?> - escapeHtml(__('Qty')) ?> + escapeHtml(__('Qty')) ?> - escapeHtml(__('Subtotal')) ?> + escapeHtml(__('Subtotal')) ?> - - + + - + getChildBlock('requisition.list.item.view') ->setItem($item) @@ -64,6 +80,11 @@ $itemsList = $block->getRequisitionListItems();
+ + getChildHtml('pager')): ?> +
getChildHtml('pager') ?>
+ +