Exemplo n.º 1
0
 /**
  * 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->addFilters($filters);
     $searchCriteria = $this->searchCriteriaBuilder->create();
     $searchResults = $this->customerRepository->getList($searchCriteria);
     foreach ($searchResults->getItems() as $customer) {
         $customerAddresses = $customer->getAddresses();
         /** Look for a company name defined in default billing address */
         $company = null;
         foreach ($customerAddresses as $customerAddress) {
             if ($customerAddress->getId() == $customer->getDefaultBilling()) {
                 $company = $customerAddress->getCompany();
                 break;
             }
         }
         $result[] = ['id' => 'customer/1/' . $customer->getId(), 'type' => __('Customer'), 'name' => $this->_customerViewHelper->getCustomerName($customer), 'description' => $company, 'url' => $this->_adminhtmlData->getUrl('customer/index/edit', ['id' => $customer->getId()])];
     }
     $this->setResults($result);
     return $this;
 }
Exemplo n.º 2
0
 /**
  * Test ordering
  *
  * @magentoDataFixture Magento/Customer/_files/three_customers.php
  * @magentoDbIsolation enabled
  */
 public function testSearchCustomersOrder()
 {
     /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchBuilder */
     $objectManager = Bootstrap::getObjectManager();
     $searchBuilder = $objectManager->create('Magento\\Framework\\Api\\SearchCriteriaBuilder');
     // Filter for 'firstname' like 'First'
     $filterBuilder = $objectManager->create('Magento\\Framework\\Api\\FilterBuilder');
     $firstnameFilter = $filterBuilder->setField('firstname')->setConditionType('like')->setValue('First%')->create();
     $searchBuilder->addFilters([$firstnameFilter]);
     // Search ascending order
     $sortOrderBuilder = $objectManager->create('Magento\\Framework\\Api\\SortOrderBuilder');
     $sortOrder = $sortOrderBuilder->setField('lastname')->setDirection(SearchCriteriaInterface::SORT_ASC)->create();
     $searchBuilder->addSortOrder($sortOrder);
     $searchResults = $this->customerRepository->getList($searchBuilder->create());
     $this->assertEquals(3, $searchResults->getTotalCount());
     $this->assertEquals('Lastname', $searchResults->getItems()[0]->getLastname());
     $this->assertEquals('Lastname2', $searchResults->getItems()[1]->getLastname());
     $this->assertEquals('Lastname3', $searchResults->getItems()[2]->getLastname());
     // Search descending order
     $sortOrder = $sortOrderBuilder->setField('lastname')->setDirection(SearchCriteriaInterface::SORT_DESC)->create();
     $searchBuilder->addSortOrder($sortOrder);
     $searchResults = $this->customerRepository->getList($searchBuilder->create());
     $this->assertEquals('Lastname3', $searchResults->getItems()[0]->getLastname());
     $this->assertEquals('Lastname2', $searchResults->getItems()[1]->getLastname());
     $this->assertEquals('Lastname', $searchResults->getItems()[2]->getLastname());
 }
 /**
  * Find a customer
  *
  * @param string $attributeValue Attribute Value
  * @return bool|\Magento\Customer\Api\Data\CustomerInterface
  */
 private function findCustomerByLoginAttribute($attributeValue)
 {
     // Retrieve the customer login attribute and check if valid
     $loginAttribute = $this->advancedLoginConfigProvider->getLoginAttribute();
     if (false === $loginAttribute) {
         return false;
     }
     // Add website filter if customer accounts are shared per website
     $websiteIdFilter = false;
     if ($this->advancedLoginConfigProvider->getCustomerAccountShareScope() == Share::SHARE_WEBSITE) {
         $websiteIdFilter[] = $this->filterBuilder->setField('website_id')->setConditionType('eq')->setValue($this->storeManager->getStore()->getWebsiteId())->create();
     }
     // Add customer attribute filter
     $customerNumberFilter[] = $this->filterBuilder->setField('customer_number')->setConditionType('eq')->setValue($attributeValue)->create();
     // Build search criteria
     $searchCriteriaBuilder = $this->searchCriteriaBuilder->addFilters($customerNumberFilter);
     if ($websiteIdFilter) {
         $searchCriteriaBuilder->addFilters($websiteIdFilter);
     }
     $searchCriteria = $searchCriteriaBuilder->create();
     // Retrieve the customer collection and return customer if there was exactly one customer found
     $collection = $this->customerRepository->getList($searchCriteria);
     if ($collection->getTotalCount() == 1) {
         return $collection->getItems()[0];
     }
     return false;
 }
 /**
  * @return \Magento\Customer\Api\Data\CustomerInterface[]
  */
 public function getAllCustomers()
 {
     $crit = $this->_manObj->create(\Magento\Framework\Api\SearchCriteriaInterface::class);
     /** @var \Magento\Customer\Api\Data\CustomerSearchResultsInterface $all */
     $all = $this->_repoCust->getList($crit);
     $result = $all->getItems();
     return $result;
 }