/** * Prepare quote for customer order submit * * @param Quote $quote * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function _prepareCustomerQuote($quote) { /** @var Quote $quote */ $billing = $quote->getBillingAddress(); $shipping = $quote->isVirtual() ? null : $quote->getShippingAddress(); $customer = $this->customerRepository->getById($quote->getCustomerId()); $hasDefaultBilling = (bool) $customer->getDefaultBilling(); $hasDefaultShipping = (bool) $customer->getDefaultShipping(); if ($shipping && !$shipping->getSameAsBilling() && (!$shipping->getCustomerId() || $shipping->getSaveInAddressBook())) { $shippingAddress = $shipping->exportCustomerAddress(); if (!$hasDefaultShipping) { //Make provided address as default shipping address $shippingAddress->setIsDefaultShipping(true); $hasDefaultShipping = true; } $quote->addCustomerAddress($shippingAddress); $shipping->setCustomerAddressData($shippingAddress); } if (!$billing->getCustomerId() || $billing->getSaveInAddressBook()) { $billingAddress = $billing->exportCustomerAddress(); if (!$hasDefaultBilling) { //Make provided address as default shipping address if (!$hasDefaultShipping) { //Make provided address as default shipping address $billingAddress->setIsDefaultShipping(true); } $billingAddress->setIsDefaultBilling(true); } $quote->addCustomerAddress($billingAddress); $billing->setCustomerAddressData($billingAddress); } if ($shipping && !$shipping->getCustomerId() && !$hasDefaultBilling) { $shipping->setIsDefaultBilling(true); } }
/** * @param \Magento\Quote\Model\Quote $quote * @param int|null $customerId * @return \Magento\Quote\Model\Quote * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function prepareRegisteredCustomerQuote(\Magento\Quote\Model\Quote $quote, $customerId) { $billing = $quote->getBillingAddress(); $shipping = $quote->isVirtual() ? null : $quote->getShippingAddress(); $customer = $this->customerRepository->getById($customerId); $isBillingAddressDefaultBilling = !$customer->getDefaultBilling(); $isBillingAddressDefaultShipping = false; $isShippingAddressDefaultShipping = false; if ($shipping && !$customer->getDefaultShipping()) { $isShippingAddressDefaultShipping = true; } elseif (!$customer->getDefaultShipping()) { $isBillingAddressDefaultShipping = true; } if ($shipping && $shipping->getTelephone() && !$shipping->getSameAsBilling() && (!$shipping->getCustomerId() || $shipping->getSaveInAddressBook() || !$customer->getDefaultShipping())) { $address = $shipping->exportCustomerAddress(); $address->setIsDefaultShipping($isShippingAddressDefaultShipping); $quote->addCustomerAddress($address); } if ($billing && $billing->getTelephone() && (!$customer->getDefaultBilling() || $billing->getSaveInAddressBook())) { $address = $billing->exportCustomerAddress(); $address->setIsDefaultBilling($isBillingAddressDefaultBilling); $address->setIsDefaultShipping($isBillingAddressDefaultShipping); $quote->addCustomerAddress($address); } return $quote; }