![]() 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/old/app/code/Cnc/SerialNumber/Ui/DataProvider/ |
<?php /** * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @author Radosław Łańcucki <[email protected]> * @copyright Copyright (c) 2022 Kaliop Digital Commerce (https://digitalcommerce.kaliop.com) */ declare(strict_types=1); namespace Cnc\SerialNumber\Ui\DataProvider; use Magento\Catalog\Api\Data\ProductAttributeInterface; use Magento\Eav\Api\AttributeRepositoryInterface; use Magento\Framework\Api\FilterBuilder; use Magento\Framework\Api\Search\ReportingInterface; use Magento\Framework\Api\Search\SearchCriteriaBuilder; use Magento\Framework\Api\Search\SearchResultInterface; use Magento\Framework\App\RequestInterface; use Magento\Framework\Exception\NoSuchEntityException; class SerialNumber extends \Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider { /** * @var AttributeRepositoryInterface */ private $attributeRepository; /** * @var int|null */ private $stateOfWearAttributeId = null; /** * @param string $name * @param string $primaryFieldName * @param string $requestFieldName * @param ReportingInterface $reporting * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param RequestInterface $request * @param FilterBuilder $filterBuilder * @param AttributeRepositoryInterface $attributeRepository * @param array $meta * @param array $data */ public function __construct( $name, $primaryFieldName, $requestFieldName, ReportingInterface $reporting, SearchCriteriaBuilder $searchCriteriaBuilder, RequestInterface $request, FilterBuilder $filterBuilder, AttributeRepositoryInterface $attributeRepository, array $meta = [], array $data = [] ) { parent::__construct( $name, $primaryFieldName, $requestFieldName, $reporting, $searchCriteriaBuilder, $request, $filterBuilder, $meta, $data ); $this->attributeRepository = $attributeRepository; } /** * @return \Magento\Framework\Api\Search\SearchCriteria */ public function getSearchCriteria() { $searchCriteria = parent::getSearchCriteria(); foreach ($searchCriteria->getFilterGroups() as $filterGroup) { foreach ($filterGroup->getFilters() as $filter) { switch ($filter->getField()) { case 'entity_id': $filter->setField('main_table.entity_id'); break; case 'created_at': $filter->setField('main_table.created_at'); break; case 'sku': $filter->setField('main_table.sku'); break; } } } return $searchCriteria; } /** * Returns Search result * * @return SearchResultInterface */ public function getSearchResult(): SearchResultInterface { $searchResult = parent::getSearchResult(); $attributeId = $this->getStateOfWearAttributeId(); if ($attributeId) { $searchResult->getSelect() ->joinLeft( ['cpe' => $searchResult->getConnection()->getTableName('catalog_product_entity')], "cpe.sku = main_table.sku", ['product_id' => 'cpe.entity_id'] ) ->joinLeft( ['cpei' => $searchResult->getConnection()->getTableName('catalog_product_entity_int')], "cpei.attribute_id = {$attributeId} AND cpei.entity_id = cpe.entity_id AND " . "cpei.store_id = 0", ['cpei.value'] ) ->joinLeft( [ 'csow' => $searchResult->getConnection()->getTableName( \Cnc\Catalog\Model\Config::PRODUCT_ATTRIBUTE_CODE_STATE_OF_WEAR ) ], 'csow.entity_id = cpei.value', ['csow.name'] ); } return $searchResult; } /** * @return int|null */ private function getStateOfWearAttributeId(): ?int { if (!$this->stateOfWearAttributeId) { try { $attributeId = $this->attributeRepository->get( ProductAttributeInterface::ENTITY_TYPE_CODE, \Cnc\Catalog\Model\Config::PRODUCT_ATTRIBUTE_CODE_STATE_OF_WEAR )->getAttributeId(); $this->stateOfWearAttributeId = $attributeId ? (int)$attributeId : null; } catch (NoSuchEntityException $e) { return null; } } return $this->stateOfWearAttributeId; } }