/** * @return void */ public function execute() { $filter = $this->filterBuilder->setField('parent_id')->setValue($this->_getCheckout()->getCustomer()->getId())->setConditionType('eq')->create(); $addresses = (array) $this->addressRepository->getList($this->searchCriteriaBuilder->addFilters([$filter])->create())->getItems(); /** * if we create first address we need reset emd init checkout */ if (count($addresses) === 1) { $this->_getCheckout()->reset(); } $this->_redirect('*/checkout/addresses'); }
/** * Get a list of current customer addresses. * * @return \Magento\Customer\Api\Data\AddressInterface[] */ public function getAddress() { $addresses = $this->getData('address_collection'); if ($addresses === null) { try { $filter = $this->filterBuilder->setField('parent_id')->setValue($this->_multishipping->getCustomer()->getId())->setConditionType('eq')->create(); $addresses = (array) $this->addressRepository->getList($this->searchCriteriaBuilder->addFilters([$filter])->create())->getItems(); } catch (NoSuchEntityException $e) { return []; } $this->setData('address_collection', $addresses); } return $addresses; }
/** * @param \Magento\Framework\Api\Filter[] $filters * @param \Magento\Framework\Api\Filter[] $filterGroup * @param \Magento\Framework\Api\SortOrder[] $filterOrders * @param array $expectedResult array of expected results indexed by ID * * @dataProvider searchAddressDataProvider * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_two_addresses.php * @magentoAppIsolation enabled */ public function testSearchAddresses($filters, $filterGroup, $filterOrders, $expectedResult) { /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchBuilder */ $searchBuilder = $this->_objectManager->create('Magento\\Framework\\Api\\SearchCriteriaBuilder'); foreach ($filters as $filter) { $searchBuilder->addFilters([$filter]); } if ($filterGroup !== null) { $searchBuilder->addFilters($filterGroup); } if ($filterOrders !== null) { foreach ($filterOrders as $order) { $searchBuilder->addSortOrder($order); } } $searchResults = $this->repository->getList($searchBuilder->create()); $this->assertEquals(count($expectedResult), $searchResults->getTotalCount()); $i = 0; /** @var \Magento\Customer\Api\Data\AddressInterface $item*/ foreach ($searchResults->getItems() as $item) { $this->assertEquals($expectedResult[$i]['id'], $item->getId()); $this->assertEquals($expectedResult[$i]['city'], $item->getCity()); $this->assertEquals($expectedResult[$i]['postcode'], $item->getPostcode()); $this->assertEquals($expectedResult[$i]['firstname'], $item->getFirstname()); $i++; } }
/** * Retrieve current customer address DATA collection. * * @return \Magento\Customer\Api\Data\AddressInterface[] */ public function getAddressCollection() { if ($this->getCustomerId()) { $filter = $this->filterBuilder->setField('parent_id')->setValue($this->getCustomerId())->setConditionType('eq')->create(); $this->searchCriteriaBuilder->addFilters([$filter]); $searchCriteria = $this->searchCriteriaBuilder->create(); $result = $this->addressService->getList($searchCriteria); return $result->getItems(); } return []; }
/** * Retrieve customer default address by data key * * @param string $key * @param string|null $defaultAddressIdFromCustomer * @return int|null */ private function getDefaultAddressByDataKey($key, $defaultAddressIdFromCustomer) { $addressId = $this->getData($key); if (is_null($addressId)) { $addressId = $defaultAddressIdFromCustomer; if (!$addressId) { /** Default address is not available, try to find any customer address */ $filter = $this->filterBuilder->setField('parent_id')->setValue($this->getCustomer()->getId())->setConditionType('eq')->create(); $addresses = (array) $this->addressRepository->getList($this->searchCriteriaBuilder->addFilters([$filter])->create())->getItems(); if ($addresses) { $address = reset($addresses); $addressId = $address->getId(); } } $this->setData($key, $addressId); } return $addressId; }