diff --git a/vendor/magento/module-checkout/view/frontend/web/js/model/checkout-data-resolver.js b/vendor/magento/module-checkout/view/frontend/web/js/model/checkout-data-resolver.js index 66539ad..b96a01c 100644 --- a/vendor/magento/module-checkout/view/frontend/web/js/model/checkout-data-resolver.js +++ b/vendor/magento/module-checkout/view/frontend/web/js/model/checkout-data-resolver.js @@ -43,13 +43,6 @@ define([ resolveEstimationAddress: function () { var address; - if (checkoutData.getShippingAddressFromData()) { - address = addressConverter.formAddressDataToQuoteAddress(checkoutData.getShippingAddressFromData()); - selectShippingAddress(address); - } else { - this.resolveShippingAddress(); - } - if (quote.isVirtual()) { if (checkoutData.getBillingAddressFromData()) { address = addressConverter.formAddressDataToQuoteAddress( @@ -59,6 +52,11 @@ define([ } else { this.resolveBillingAddress(); } + } else if (checkoutData.getShippingAddressFromData()) { + address = addressConverter.formAddressDataToQuoteAddress(checkoutData.getShippingAddressFromData()); + selectShippingAddress(address); + } else { + this.resolveShippingAddress(); } }, diff --git a/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php b/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php index 877aec3..7a0d10a 100644 --- a/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php +++ b/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php @@ -6,6 +6,7 @@ namespace Magento\Tax\Model\Sales\Total\Quote; +use Magento\Customer\Api\AccountManagementInterface as CustomerAccountManagement; use Magento\Customer\Api\Data\AddressInterfaceFactory as CustomerAddressFactory; use Magento\Customer\Api\Data\AddressInterface as CustomerAddress; use Magento\Customer\Api\Data\RegionInterfaceFactory as CustomerAddressRegionFactory; @@ -145,6 +146,11 @@ class CommonTaxCollector extends AbstractTotal private $quoteDetailsItemExtensionFactory; /** + * @var CustomerAccountManagement + */ + private $customerAccountManagement; + + /** * Class constructor * * @param \Magento\Tax\Model\Config $taxConfig @@ -156,6 +162,8 @@ class CommonTaxCollector extends AbstractTotal * @param CustomerAddressRegionFactory $customerAddressRegionFactory * @param TaxHelper|null $taxHelper * @param QuoteDetailsItemExtensionInterfaceFactory|null $quoteDetailsItemExtensionInterfaceFactory + * @param CustomerAccountManagement|null $customerAccountManagement + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Tax\Model\Config $taxConfig, @@ -166,7 +174,8 @@ class CommonTaxCollector extends AbstractTotal CustomerAddressFactory $customerAddressFactory, CustomerAddressRegionFactory $customerAddressRegionFactory, TaxHelper $taxHelper = null, - QuoteDetailsItemExtensionInterfaceFactory $quoteDetailsItemExtensionInterfaceFactory = null + QuoteDetailsItemExtensionInterfaceFactory $quoteDetailsItemExtensionInterfaceFactory = null, + ?CustomerAccountManagement $customerAccountManagement = null ) { $this->taxCalculationService = $taxCalculationService; $this->quoteDetailsDataObjectFactory = $quoteDetailsDataObjectFactory; @@ -178,6 +187,8 @@ class CommonTaxCollector extends AbstractTotal $this->taxHelper = $taxHelper ?: ObjectManager::getInstance()->get(TaxHelper::class); $this->quoteDetailsItemExtensionFactory = $quoteDetailsItemExtensionInterfaceFactory ?: ObjectManager::getInstance()->get(QuoteDetailsItemExtensionInterfaceFactory::class); + $this->customerAccountManagement = $customerAccountManagement ?? + ObjectManager::getInstance()->get(CustomerAccountManagement::class); } /** @@ -413,7 +424,24 @@ class CommonTaxCollector extends AbstractTotal public function populateAddressData(QuoteDetailsInterface $quoteDetails, QuoteAddress $address) { $quoteDetails->setBillingAddress($this->mapAddress($address->getQuote()->getBillingAddress())); - $quoteDetails->setShippingAddress($this->mapAddress($address)); + if ($address->getAddressType() === QuoteAddress::ADDRESS_TYPE_BILLING + && !$address->getCountryId() + && $address->getQuote()->isVirtual() + && $address->getQuote()->getCustomerId() + ) { + $defaultBillingAddress = $this->customerAccountManagement->getDefaultBillingAddress( + $address->getQuote()->getCustomerId() + ); + $addressCopy = $address; + if ($defaultBillingAddress) { + $addressCopy = clone $address; + $addressCopy->importCustomerAddressData($defaultBillingAddress); + } + + $quoteDetails->setShippingAddress($this->mapAddress($addressCopy)); + } else { + $quoteDetails->setShippingAddress($this->mapAddress($address)); + } return $quoteDetails; }