/**
  * @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');
 }
Example #2
0
 /**
  * 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++;
     }
 }
Example #4
0
 /**
  * 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;
 }