From b569d9a96436b5001653b8a696d7200f0ecadcdf Mon Sep 17 00:00:00 2001 From: VU HOANG THAI Date: Tue, 24 Sep 2024 13:33:43 +0700 Subject: [PATCH 1/2] #37284: fixing calculator has not been init yet --- .../Model/Quote/Address/Total/ShippingDiscount.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php b/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php index 9f116cedcb340..c7d3b16ae525e 100644 --- a/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php +++ b/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php @@ -58,6 +58,13 @@ public function collect(Quote $quote, ShippingAssignment $shippingAssignment, To $address->setBaseShippingAmountForDiscount($total->getBaseShippingAmountForDiscount()); } if ($address->getShippingAmount()) { + if (empty($this->calculator->getWebsiteId()) || empty($this->calculator->getCustomerGroupId())) { + $this->calculator->init( + $quote->getStore()->getWebsiteId(), + $quote->getCustomerGroupId(), + $quote->getCouponCode() + ); + } $this->calculator->processShippingAmount($address); $total->addTotalAmount(DiscountCollector::COLLECTOR_TYPE_CODE, -$address->getShippingDiscountAmount()); $total->addBaseTotalAmount( From 0bad4193c7bb5a06fec9c524a51a8e12b41d72b4 Mon Sep 17 00:00:00 2001 From: VU HOANG THAI Date: Tue, 24 Sep 2024 15:34:04 +0700 Subject: [PATCH 2/2] #37284: fixing unit test --- .../Model/Quote/Address/Total/ShippingDiscount.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php b/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php index c7d3b16ae525e..15d1ed249eeff 100644 --- a/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php +++ b/app/code/Magento/SalesRule/Model/Quote/Address/Total/ShippingDiscount.php @@ -12,12 +12,15 @@ use Magento\Quote\Model\Quote\Address\Total; use Magento\SalesRule\Model\Quote\Discount as DiscountCollector; use Magento\SalesRule\Model\Validator; +use Magento\Customer\Model\GroupManagement; /** * Total collector for shipping discounts. */ class ShippingDiscount extends \Magento\Quote\Model\Quote\Address\Total\AbstractTotal { + private const DEFAULT_WEBSITE_ID = 0; + /** * @var Validator */ @@ -59,9 +62,10 @@ public function collect(Quote $quote, ShippingAssignment $shippingAssignment, To } if ($address->getShippingAmount()) { if (empty($this->calculator->getWebsiteId()) || empty($this->calculator->getCustomerGroupId())) { + $websiteId = $quote->getStore() ? $quote->getStore()->getWebsiteId() : self::DEFAULT_WEBSITE_ID; $this->calculator->init( - $quote->getStore()->getWebsiteId(), - $quote->getCustomerGroupId(), + $websiteId, + $quote->getCustomerGroupId() ?? GroupManagement::NOT_LOGGED_IN_ID, $quote->getCouponCode() ); }