![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/magento/module-sales/Block/Adminhtml/Order/Create/Search/ |
<?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 <[email protected]> * @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(); } }