diff -Nuar a/vendor/magento/module-offline-shipping/Model/Carrier/Freeshipping.php b/vendor/magento/module-offline-shipping/Model/Carrier/Freeshipping.php index 674e6b80897..a1fca2b155f 100644 --- a/vendor/magento/module-offline-shipping/Model/Carrier/Freeshipping.php +++ b/vendor/magento/module-offline-shipping/Model/Carrier/Freeshipping.php @@ -64,6 +64,24 @@ class Freeshipping extends \Magento\Shipping\Model\Carrier\AbstractCarrier imple } /** + * Check subtotal for allowed free shipping + * + * @param RateRequest $request + * + * @return bool + */ + private function isFreeShippingRequired(RateRequest $request): bool + { + $minSubtotal = $request->getPackageValueWithDiscount(); + if ($request->getBaseSubtotalWithDiscountInclTax() + && $this->getConfigFlag('tax_including')) { + $minSubtotal = $request->getBaseSubtotalWithDiscountInclTax(); + } + + return $minSubtotal >= $this->getConfigData('free_shipping_subtotal'); + } + + /** * FreeShipping Rates Collector * * @param RateRequest $request @@ -80,10 +98,7 @@ class Freeshipping extends \Magento\Shipping\Model\Carrier\AbstractCarrier imple $this->_updateFreeMethodQuote($request); - if ($request->getFreeShipping() || $request->getPackageValueWithDiscount() >= $this->getConfigData( - 'free_shipping_subtotal' - ) - ) { + if ($request->getFreeShipping() || $this->isFreeShippingRequired($request)) { /** @var \Magento\Quote\Model\Quote\Address\RateResult\Method $method */ $method = $this->_rateMethodFactory->create(); diff -Nuar a/vendor/magento/module-offline-shipping/etc/adminhtml/system.xml b/vendor/magento/module-offline-shipping/etc/adminhtml/system.xml index 2b29d2211b9..cb75bddf4d7 100644 --- a/vendor/magento/module-offline-shipping/etc/adminhtml/system.xml +++ b/vendor/magento/module-offline-shipping/etc/adminhtml/system.xml @@ -127,6 +127,10 @@ validate-number validate-zero-or-greater + + + Magento\Config\Model\Config\Source\Yesno + diff -Nuar a/vendor/magento/module-quote/Model/Quote/Address.php b/vendor/magento/module-quote/Model/Quote/Address.php index 4f1a0a07d4b..4f52f5310db 100644 --- a/vendor/magento/module-quote/Model/Quote/Address.php +++ b/vendor/magento/module-quote/Model/Quote/Address.php @@ -1022,6 +1022,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements $request->setLimitCarrier($this->getLimitCarrier()); $baseSubtotalInclTax = $this->getBaseSubtotalTotalInclTax(); $request->setBaseSubtotalInclTax($baseSubtotalInclTax); + $request->setBaseSubtotalWithDiscountInclTax($this->getBaseSubtotalWithDiscount() + $this->getBaseTaxAmount()); $result = $this->_rateCollector->create()->collectRates($request)->getResult(); diff -Nuar a/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php b/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php index 77b3cfa3a08..c70c715d32c 100644 --- a/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php +++ b/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php @@ -383,6 +383,7 @@ class CommonTaxCollector extends AbstractTotal $priceIncludesTax, $useBaseCurrency ); + //phpcs:ignore Magento2.Performance.ForeachArrayMerge $itemDataObjects = array_merge($itemDataObjects, $extraTaxableItems); } } else { @@ -394,6 +395,7 @@ class CommonTaxCollector extends AbstractTotal $priceIncludesTax, $useBaseCurrency ); + //phpcs:ignore Magento2.Performance.ForeachArrayMerge $itemDataObjects = array_merge($itemDataObjects, $extraTaxableItems); } } @@ -592,6 +594,7 @@ class CommonTaxCollector extends AbstractTotal $total->setBaseSubtotalTotalInclTax($baseSubtotalInclTax); $total->setBaseSubtotalInclTax($baseSubtotalInclTax); $shippingAssignment->getShipping()->getAddress()->setBaseSubtotalTotalInclTax($baseSubtotalInclTax); + $shippingAssignment->getShipping()->getAddress()->setBaseTaxAmount($baseTax); return $this; } @@ -799,6 +802,7 @@ class CommonTaxCollector extends AbstractTotal 'rates' => $rates, ]; if (!empty($extraInfo)) { + //phpcs:ignore Magento2.Performance.ForeachArrayMerge $appliedTaxArray = array_merge($appliedTaxArray, $extraInfo); }