/** * @param CartInterface $quote * @param AddressInterface $address * @param bool $useForShipping * @return void * @throws NoSuchEntityException * @throws InputException */ public function save(CartInterface $quote, AddressInterface $address, $useForShipping = false) { /** @var \Magento\Quote\Model\Quote $quote */ $this->addressValidator->validate($address); $customerAddressId = $address->getCustomerAddressId(); $shippingAddress = null; $addressData = []; if ($useForShipping) { $shippingAddress = $address; } $saveInAddressBook = $address->getSaveInAddressBook() ? 1 : 0; if ($customerAddressId) { try { $addressData = $this->addressRepository->getById($customerAddressId); } catch (NoSuchEntityException $e) { // do nothing if customer is not found by id } $address = $quote->getBillingAddress()->importCustomerAddressData($addressData); if ($useForShipping) { $shippingAddress = $quote->getShippingAddress()->importCustomerAddressData($addressData); $shippingAddress->setSaveInAddressBook($saveInAddressBook); } } elseif ($quote->getCustomerId()) { $address->setEmail($quote->getCustomerEmail()); } $address->setSaveInAddressBook($saveInAddressBook); $quote->setBillingAddress($address); if ($useForShipping) { $shippingAddress->setSameAsBilling(1); $shippingAddress->setCollectShippingRates(true); $quote->setShippingAddress($shippingAddress); } }