/** * Load search results * * @return $this */ public function load() { $result = []; if (!$this->hasStart() || !$this->hasLimit() || !$this->hasQuery()) { $this->setResults($result); return $this; } $this->_searchCriteriaBuilder->setCurrentPage($this->getStart()); $this->_searchCriteriaBuilder->setPageSize($this->getLimit()); $searchFields = ['firstname', 'lastname', 'company']; $filters = []; foreach ($searchFields as $field) { $filters[] = $this->_filterBuilder->setField($field)->setConditionType('like')->setValue($this->getQuery() . '%')->create(); } $this->_searchCriteriaBuilder->addFilter($filters); $searchCriteria = $this->_searchCriteriaBuilder->create(); $searchResults = $this->_customerService->searchCustomers($searchCriteria); /** @var \Magento\Customer\Service\V1\Data\CustomerDetails $customerDetails */ foreach ($searchResults->getItems() as $customerDetails) { $customerData = $customerDetails->getCustomer(); $customerAddresses = $customerDetails->getAddresses(); /** Look for a company name defined in default billing address */ $company = null; foreach ($customerAddresses as $customerAddress) { if ($customerAddress->isDefaultBilling()) { $company = $customerAddress->getCompany(); break; } } $result[] = array('id' => 'customer/1/' . $customerData->getId(), 'type' => __('Customer'), 'name' => $this->_customerViewHelper->getCustomerName($customerData), 'description' => $company, 'url' => $this->_adminhtmlData->getUrl('customer/index/edit', array('id' => $customerData->getId()))); } $this->setResults($result); return $this; }
/** * Creates a search criteria DTO based on the array of field filters. * * @return SearchCriteria */ protected function getSearchCriteria() { foreach ($this->fieldFilters as $filter) { // array of fields, put filters in array to use 'or' group /** @var Filter[] $filterGroup */ $filterGroup = array(); if (!is_array($filter['field'])) { // just one field $filterGroup = [$this->createFilterData($filter['field'], $filter['condition'])]; } else { foreach ($filter['field'] as $index => $field) { $filterGroup[] = $this->createFilterData($field, $filter['condition'][$index]); } } $this->searchCriteriaBuilder->addFilter($filterGroup); } foreach ($this->_orders as $field => $direction) { /** @var \Magento\Framework\Service\V1\Data\SortOrder $sortOrder */ /** @var string $direction */ $direction = $direction == 'ASC' ? SearchCriteria::SORT_ASC : SearchCriteria::SORT_DESC; $sortOrder = $this->sortOrderBuilder->setField($field)->setDirection($direction)->create(); $this->searchCriteriaBuilder->addSortOrder($sortOrder); } $this->searchCriteriaBuilder->setCurrentPage($this->_curPage); $this->searchCriteriaBuilder->setPageSize($this->_pageSize); return $this->searchCriteriaBuilder->create(); }
public function testSearch() { $metadata = array(); $attributeCodes = ['price', 'id', 'sku']; foreach ($attributeCodes as $code) { $attributeMetadataMock = $this->getMockBuilder('\\Magento\\Catalog\\Service\\V1\\Data\\Eav\\AttributeMetadata')->disableOriginalConstructor()->getMock(); $attributeMetadataMock->expects($this->once())->method('getAttributeCode')->will($this->returnValue($code)); $metadata[] = $attributeMetadataMock; } $this->metadataServiceMock->expects($this->any())->method('getProductAttributesMetadata')->will($this->returnValue($metadata)); $collection = $this->getMockBuilder('\\Magento\\Catalog\\Model\\Resource\\Product\\Collection')->disableOriginalConstructor()->getMock(); $collection->expects($this->any())->method('addAttributeToSelect'); $collection->expects($this->any())->method('joinAttribute'); $collection->expects($this->any())->method('addOrder')->with($this->equalTo('price'), $this->equalTo('ASC')); $collection->expects($this->once())->method('setCurPage')->with($this->equalTo(1)); $collection->expects($this->once())->method('setPageSize')->with($this->equalTo(10)); $collection->expects($this->once())->method('getSize')->will($this->returnValue(5)); $this->productCollection->expects($this->once())->method('create')->will($this->returnValue($collection)); $this->_mockReturnValue($collection, array('getSize' => 1, '_getItems' => array($this->_productMock), 'getIterator' => new \ArrayIterator(array($this->_productMock)))); $productDataBuilder = $this->getMockBuilder('\\Magento\\Catalog\\Service\\V1\\Data\\ProductBuilder')->disableOriginalConstructor()->getMock(); $productDataBuilder->setPrice('10.000'); $productDataBuilder->setSku('test'); $productDataBuilder->setStoreId(10); $this->converterMock->expects($this->once())->method('createProductBuilderFromModel')->will($this->returnValue($productDataBuilder)); $this->searchResultsBuilderMock->expects($this->once())->method('setItems')->with($this->equalTo(array($productDataBuilder->create()))); $this->searchResultsBuilderMock->expects($this->once())->method('create')->will($this->returnValue(array($productDataBuilder->create()))); $productService = $this->_objectManager->getObject('Magento\\Catalog\\Service\\V1\\ProductService', ['productLoader' => $this->_productLoaderMock, 'productCollection' => $this->productCollection, 'searchResultsBuilder' => $this->searchResultsBuilderMock, 'metadataService' => $this->metadataServiceMock, 'converter' => $this->converterMock]); $helper = new \Magento\TestFramework\Helper\ObjectManager($this); $filterBuilder = $helper->getObject('\\Magento\\Framework\\Service\\V1\\Data\\FilterBuilder'); $filter = $filterBuilder->setField('price')->setValue('10.000')->setConditionType('eq')->create(); $this->_searchBuilder->addFilter([$filter]); $sortOrderBuilder = $helper->getObject('\\Magento\\Framework\\Service\\V1\\Data\\SortOrderBuilder'); $sortOrder = $sortOrderBuilder->setField('price')->setDirection(SearchCriteria::SORT_ASC)->create(); $this->_searchBuilder->addSortOrder($sortOrder); $this->_searchBuilder->setCurrentPage(1); $this->_searchBuilder->setPageSize(10); $productService->search($this->_searchBuilder->create()); }