diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php index 20bd1b379beef..e29048c91b5cb 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php @@ -16,6 +16,7 @@ use Magento\Backend\Block\Widget\Grid\Extended; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Visibility; +use Magento\Catalog\Model\Product\Type; use Magento\Framework\App\ObjectManager; class Product extends \Magento\Backend\Block\Widget\Grid\Extended @@ -42,6 +43,11 @@ class Product extends \Magento\Backend\Block\Widget\Grid\Extended */ private $visibility; + /** + * @var Type + */ + private $type; + /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Helper\Data $backendHelper @@ -50,6 +56,7 @@ class Product extends \Magento\Backend\Block\Widget\Grid\Extended * @param array $data * @param Visibility|null $visibility * @param Status|null $status + * @param Type|null $type */ public function __construct( \Magento\Backend\Block\Template\Context $context, @@ -58,17 +65,19 @@ public function __construct( \Magento\Framework\Registry $coreRegistry, array $data = [], Visibility $visibility = null, - Status $status = null + Status $status = null, + Type $type = null ) { $this->_productFactory = $productFactory; $this->_coreRegistry = $coreRegistry; $this->visibility = $visibility ?: ObjectManager::getInstance()->get(Visibility::class); $this->status = $status ?: ObjectManager::getInstance()->get(Status::class); + $this->type = $type ?: ObjectManager::getInstance()->get(Type::class); parent::__construct($context, $backendHelper, $data); } /** - * @return void + * @inheritdoc */ protected function _construct() { @@ -79,6 +88,8 @@ protected function _construct() } /** + * Retrieve current category instance + * * @return array|null */ public function getCategory() @@ -87,6 +98,8 @@ public function getCategory() } /** + * Add column filter to collection + * * @param Column $column * @return $this */ @@ -110,6 +123,8 @@ protected function _addColumnFilterToCollection($column) } /** + * Prepares collection + * * @return Grid */ protected function _prepareCollection() @@ -121,6 +136,8 @@ protected function _prepareCollection() 'name' )->addAttributeToSelect( 'sku' + )->addAttributeToSelect( + 'type_id' )->addAttributeToSelect( 'visibility' )->addAttributeToSelect( @@ -153,6 +170,8 @@ protected function _prepareCollection() } /** + * Prepare columns + * * @return Extended */ protected function _prepareColumns() @@ -182,6 +201,15 @@ protected function _prepareColumns() ); $this->addColumn('name', ['header' => __('Name'), 'index' => 'name']); $this->addColumn('sku', ['header' => __('SKU'), 'index' => 'sku']); + $this->addColumn( + 'type_id', + [ + 'header' => __('Type'), + 'index' => 'type_id', + 'type' => 'options', + 'options' => $this->type->getOptionArray() + ] + ); $this->addColumn( 'visibility', [ @@ -230,6 +258,8 @@ protected function _prepareColumns() } /** + * Retrieve grid url + * * @return string */ public function getGridUrl() @@ -238,6 +268,8 @@ public function getGridUrl() } /** + * Retrieve selected products + * * @return array */ protected function _getSelectedProducts() diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategoryContentSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategoryContentSection.xml index 1cb095974d0fd..f6020a585dad0 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategoryContentSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategoryContentSection.xml @@ -22,6 +22,7 @@ + diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateCategoryWithProductsGridFilteredByTypeTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateCategoryWithProductsGridFilteredByTypeTest.xml new file mode 100644 index 0000000000000..c6bb4b81eb2be --- /dev/null +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateCategoryWithProductsGridFilteredByTypeTest.xml @@ -0,0 +1,48 @@ + + + + + + + + <description value="#28885 Filtering products grid at category page via product type"/> + <severity value="CRITICAL"/> + <group value="Catalog"/> + </annotations> + <before> + <actionGroup ref="AdminLoginActionGroup" stepKey="loginAdminPanel"/> + <createData entity="defaultSimpleProduct" stepKey="simpleProduct" /> + </before> + <after> + <actionGroup ref="DeleteCategoryActionGroup" stepKey="deleteCategory"/> + <deleteData createDataKey="simpleProduct" stepKey="deleteSimpleProduct"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutAdminPanel"/> + </after> + + <!--Create SubCategory--> + <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openAdminCategoryIndexPage"/> + <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategoryButton"/> + <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{_defaultCategory.name}}" stepKey="fillCategoryName"/> + + <!--Search the products and select the category products--> + <scrollTo selector="{{AdminCategoryBasicFieldSection.productsInCategory}}" x="0" y="-80" stepKey="scrollToProductInCategory"/> + <click selector="{{AdminCategoryBasicFieldSection.productsInCategory}}" stepKey="clickOnProductInCategory"/> + + <!--Find the simple product with grid filter via product type--> + <selectOption selector="{{AdminCategoryContentSection.productTableColumnType}}" userInput="Simple Product" stepKey="filterByProductType"/> + <click selector="{{AdminCategoryContentSection.productSearch}}" stepKey="clickSearchButton"/> + + <!--Add selected product and save the category--> + <click selector="{{AdminCategoryContentSection.productTableRow}}" stepKey="selectProductFromTableRow"/> + <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="clickSaveButton"/> + <waitForPageLoad stepKey="waitForCategorySaved"/> + <actionGroup ref="AssertAdminCategorySaveSuccessMessageActionGroup" stepKey="assertSuccessMessage"/> + + </test> +</tests>