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);
}