From ce6dd8572efc5802b5b9d9f2257b2dce30e8ff9d Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 15 Feb 2018 16:00:46 +0200 Subject: [PATCH 1/4] Issue-13556 Modified source model "app/code/Magento/CatalogInventory/Model/Source/Stock.php" - overridden parent method "addValueSortToCollection" for adding sorting by stock items qty. --- .../CatalogInventory/Model/Source/Stock.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/code/Magento/CatalogInventory/Model/Source/Stock.php b/app/code/Magento/CatalogInventory/Model/Source/Stock.php index f64026cce23a5..40283a26f4055 100644 --- a/app/code/Magento/CatalogInventory/Model/Source/Stock.php +++ b/app/code/Magento/CatalogInventory/Model/Source/Stock.php @@ -26,4 +26,23 @@ public function getAllOptions() ['value' => \Magento\CatalogInventory\Model\Stock::STOCK_OUT_OF_STOCK, 'label' => __('Out of Stock')] ]; } + + /** + * Add Value Sort To Collection Select + * + * @param \Magento\Eav\Model\Entity\Collection\AbstractCollection $collection + * @param string $dir + * + * @return $this + */ + public function addValueSortToCollection($collection, $dir = \Magento\Framework\Data\Collection::SORT_ORDER_DESC) + { + $collection->getSelect()->joinLeft( + ['stock_item_table' => 'cataloginventory_stock_item'], + "e.entity_id=stock_item_table.product_id", + [] + ); + $collection->getSelect()->order("stock_item_table.qty $dir"); + return $this + } } From a6dc79ac003855cda3df4f17d4645f0dd29373dd Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 16 Feb 2018 12:48:09 +0200 Subject: [PATCH 2/4] Issue-13556 Syntax fixes in method Magento\CatalogInventory\Model\Source\Stock::addValueSortToCollection --- app/code/Magento/CatalogInventory/Model/Source/Stock.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogInventory/Model/Source/Stock.php b/app/code/Magento/CatalogInventory/Model/Source/Stock.php index 40283a26f4055..d6b34ff15fb30 100644 --- a/app/code/Magento/CatalogInventory/Model/Source/Stock.php +++ b/app/code/Magento/CatalogInventory/Model/Source/Stock.php @@ -43,6 +43,6 @@ public function addValueSortToCollection($collection, $dir = \Magento\Framework\ [] ); $collection->getSelect()->order("stock_item_table.qty $dir"); - return $this + return $this; } } From bcb553c40e0becae8a164f3902cd61c5e2d3447e Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 19 Feb 2018 11:58:58 +0200 Subject: [PATCH 3/4] Issue-13556 Edited comment in method Magento\CatalogInventory\Model\Source\Stock::addValueSortToCollection. --- app/code/Magento/CatalogInventory/Model/Source/Stock.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogInventory/Model/Source/Stock.php b/app/code/Magento/CatalogInventory/Model/Source/Stock.php index d6b34ff15fb30..9ed891d1dcc0f 100644 --- a/app/code/Magento/CatalogInventory/Model/Source/Stock.php +++ b/app/code/Magento/CatalogInventory/Model/Source/Stock.php @@ -28,7 +28,7 @@ public function getAllOptions() } /** - * Add Value Sort To Collection Select + * Add Value Sort To Collection Select. * * @param \Magento\Eav\Model\Entity\Collection\AbstractCollection $collection * @param string $dir From 551fa251b53b92743eb4fd830e2d029c30788449 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Wed, 7 Mar 2018 16:29:00 +0200 Subject: [PATCH 4/4] magento/magento2#13691 --- .../Test/Unit/Model/Source/StockTest.php | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 app/code/Magento/CatalogInventory/Test/Unit/Model/Source/StockTest.php diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Source/StockTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Source/StockTest.php new file mode 100644 index 0000000000000..11f41fcaf6d01 --- /dev/null +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Source/StockTest.php @@ -0,0 +1,44 @@ +model = new \Magento\CatalogInventory\Model\Source\Stock(); + } + + public function testAddValueSortToCollection() + { + $selectMock = $this->createMock(\Magento\Framework\DB\Select::class); + $collectionMock = $this->createMock(\Magento\Eav\Model\Entity\Collection\AbstractCollection::class); + $collectionMock->expects($this->atLeastOnce())->method('getSelect')->willReturn($selectMock); + + $selectMock->expects($this->once()) + ->method('joinLeft') + ->with( + ['stock_item_table' => 'cataloginventory_stock_item'], + "e.entity_id=stock_item_table.product_id", + [] + ) + ->willReturnSelf(); + $selectMock->expects($this->once()) + ->method('order') + ->with("stock_item_table.qty DESC") + ->willReturnSelf(); + + $this->model->addValueSortToCollection($collectionMock); + } +}