| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Block/Adminhtml/Order/Create/Search/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Block/Adminhtml/Order/Create/Search/Grid.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Block\Adminhtml\Order\Create\Search;
use Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\DataProvider\ProductCollection;
use Magento\Framework\App\ObjectManager;
/**
* Adminhtml sales order create search products block
*
* @api
* @author Magento Core Team <core@magentocommerce.com>
* @since 100.0.2
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
{
/**
* Sales config
*
* @var \Magento\Sales\Model\Config
*/
protected $_salesConfig;
/**
* Session quote
*
* @var \Magento\Backend\Model\Session\Quote
*/
protected $_sessionQuote;
/**
* Catalog config
*
* @var \Magento\Catalog\Model\Config
*/
protected $_catalogConfig;
/**
* Product factory
*
* @var \Magento\Catalog\Model\ProductFactory
*/
protected $_productFactory;
/**
* @var ProductCollection $productCollectionProvider
*/
private $productCollectionProvider;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Backend\Helper\Data $backendHelper
* @param \Magento\Catalog\Model\ProductFactory $productFactory
* @param \Magento\Catalog\Model\Config $catalogConfig
* @param \Magento\Backend\Model\Session\Quote $sessionQuote
* @param \Magento\Sales\Model\Config $salesConfig
* @param array $data
* @param ProductCollection|null $productCollectionProvider
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Backend\Helper\Data $backendHelper,
\Magento\Catalog\Model\ProductFactory $productFactory,
\Magento\Catalog\Model\Config $catalogConfig,
\Magento\Backend\Model\Session\Quote $sessionQuote,
\Magento\Sales\Model\Config $salesConfig,
array $data = [],
ProductCollection $productCollectionProvider = null
) {
$this->_productFactory = $productFactory;
$this->_catalogConfig = $catalogConfig;
$this->_sessionQuote = $sessionQuote;
$this->_salesConfig = $salesConfig;
$this->productCollectionProvider = $productCollectionProvider
?: ObjectManager::getInstance()->get(ProductCollection::class);
parent::__construct($context, $backendHelper, $data);
}
/**
* Constructor
*
* @return void
*/
protected function _construct()
{
parent::_construct();
$this->setId('sales_order_create_search_grid');
$this->setRowClickCallback('order.productGridRowClick.bind(order)');
$this->setCheckboxCheckCallback('order.productGridCheckboxCheck.bind(order)');
$this->setRowInitCallback('order.productGridRowInit.bind(order)');
$this->setDefaultSort('entity_id');
$this->setFilterKeyPressCallback('order.productGridFilterKeyPress');
$this->setUseAjax(true);
if ($this->getRequest()->getParam('collapse')) {
$this->setIsCollapsed(true);
}
}
/**
* Retrieve quote store object
*
* @return \Magento\Store\Model\Store
*/
public function getStore()
{
return $this->_sessionQuote->getStore();
}
/**
* Retrieve quote object
*
* @return \Magento\Quote\Model\Quote
*/
public function getQuote()
{
return $this->_sessionQuote->getQuote();
}
/**
* Add column filter to collection
*
* @param \Magento\Backend\Block\Widget\Grid\Column $column
* @return $this
*/
protected function _addColumnFilterToCollection($column)
{
// Set custom filter for in product flag
if ($column->getId() == 'in_products') {
$productIds = $this->_getSelectedProducts();
if (empty($productIds)) {
$productIds = 0;
}
if ($column->getFilter()->getValue()) {
$this->getCollection()->addFieldToFilter('entity_id', ['in' => $productIds]);
} else {
if ($productIds) {
$this->getCollection()->addFieldToFilter('entity_id', ['nin' => $productIds]);
}
}
} else {
parent::_addColumnFilterToCollection($column);
}
return $this;
}
/**
* Prepare collection to be displayed in the grid
*
* @return $this
*/
protected function _prepareCollection()
{
$attributes = $this->_catalogConfig->getProductAttributes();
$store = $this->getStore();
/* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
$collection = $this->productCollectionProvider->getCollectionForStore($store);
$collection->addAttributeToSelect(
$attributes
);
$collection->addAttributeToFilter(
'type_id',
$this->_salesConfig->getAvailableProductTypes()
);
$this->setCollection($collection);
return parent::_prepareCollection();
}
/**
* Prepare columns
*
* @return $this
*/
protected function _prepareColumns()
{
$this->addColumn(
'entity_id',
[
'header' => __('ID'),
'sortable' => true,
'header_css_class' => 'col-id',
'column_css_class' => 'col-id',
'index' => 'entity_id'
]
);
$this->addColumn(
'name',
[
'header' => __('Product'),
'renderer' => \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Product::class,
'index' => 'name'
]
);
$this->addColumn('sku', ['header' => __('SKU'), 'index' => 'sku']);
$this->addColumn(
'price',
[
'header' => __('Price'),
'column_css_class' => 'price',
'type' => 'currency',
'currency_code' => $this->getStore()->getCurrentCurrencyCode(),
'rate' => $this->getStore()->getBaseCurrency()->getRate($this->getStore()->getCurrentCurrencyCode()),
'index' => 'price',
'renderer' => \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Price::class
]
);
$this->addColumn(
'in_products',
[
'header' => __('Select'),
'type' => 'checkbox',
'name' => 'in_products',
'values' => $this->_getSelectedProducts(),
'index' => 'entity_id',
'sortable' => false,
'header_css_class' => 'col-select',
'column_css_class' => 'col-select'
]
);
$this->addColumn(
'qty',
[
'filter' => false,
'sortable' => false,
'header' => __('Quantity'),
'renderer' => \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Qty::class,
'name' => 'qty',
'inline_css' => 'qty',
'type' => 'input',
'validate_class' => 'validate-number',
'index' => 'qty'
]
);
return parent::_prepareColumns();
}
/**
* Get grid url
*
* @return string
*/
public function getGridUrl()
{
return $this->getUrl(
'sales/*/loadBlock',
['block' => 'search_grid', '_current' => true, 'collapse' => null]
);
}
/**
* Get selected products
*
* @return mixed
*/
protected function _getSelectedProducts()
{
$products = $this->getRequest()->getPost('products', []);
return $products;
}
/**
* Add custom options to product collection
*
* @return $this
*/
protected function _afterLoadCollection()
{
$this->getCollection()->addOptionsToResult();
return parent::_afterLoadCollection();
}
}