Skip to content

Commit 94d99d7

Browse files
committed
Merge branch 'MC-39571' into 2.4-bugfixes-121520
2 parents 09be019 + 646cfbf commit 94d99d7

File tree

6 files changed

+121
-4
lines changed

6 files changed

+121
-4
lines changed

app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,9 @@ private function validateMinimumAmountForAddressItems()
11851185

11861186
$baseTotal = 0;
11871187
foreach ($addresses as $address) {
1188-
$taxes = $taxInclude ? $address->getBaseTaxAmount() : 0;
1188+
$taxes = $taxInclude
1189+
? $address->getBaseTaxAmount() + $address->getBaseDiscountTaxCompensationAmount()
1190+
: 0;
11891191
$baseTotal += $address->getBaseSubtotalWithDiscount() + $taxes;
11901192
}
11911193

app/code/Magento/Quote/Model/Quote.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,7 +2312,9 @@ public function validateMinimumAmount($multishipping = false)
23122312

23132313
if (!$minOrderMulti) {
23142314
foreach ($addresses as $address) {
2315-
$taxes = ($taxInclude) ? $address->getBaseTaxAmount() : 0;
2315+
$taxes = $taxInclude
2316+
? $address->getBaseTaxAmount() + $address->getBaseDiscountTaxCompensationAmount()
2317+
: 0;
23162318
foreach ($address->getQuote()->getItemsCollection() as $item) {
23172319
/** @var \Magento\Quote\Model\Quote\Item $item */
23182320
$amount = $includeDiscount ?
@@ -2327,7 +2329,9 @@ public function validateMinimumAmount($multishipping = false)
23272329
} else {
23282330
$baseTotal = 0;
23292331
foreach ($addresses as $address) {
2330-
$taxes = ($taxInclude) ? $address->getBaseTaxAmount() : 0;
2332+
$taxes = $taxInclude
2333+
? $address->getBaseTaxAmount() + $address->getBaseDiscountTaxCompensationAmount()
2334+
: 0;
23312335
$baseTotal += $includeDiscount ?
23322336
$address->getBaseSubtotalWithDiscount() + $taxes :
23332337
$address->getBaseSubtotal() + $taxes;

app/code/Magento/Quote/Model/Quote/Address.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1217,7 +1217,9 @@ public function validateMinimumAmount()
12171217
$storeId
12181218
);
12191219

1220-
$taxes = $taxInclude ? $this->getBaseTaxAmount() : 0;
1220+
$taxes = $taxInclude
1221+
? $this->getBaseTaxAmount() + $this->getBaseDiscountTaxCompensationAmount()
1222+
: 0;
12211223

12221224
return $includeDiscount ?
12231225
($this->getBaseSubtotalWithDiscount() + $taxes >= $amount) :

dev/tests/integration/testsuite/Magento/Quote/Model/QuoteTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,4 +737,28 @@ private function getCustomerDataArray(): array
737737
CustomerInterface::WEBSITE_ID => 1,
738738
];
739739
}
740+
741+
/**
742+
* @magentoConfigFixture current_store sales/minimum_order/active 1
743+
* @magentoConfigFixture current_store sales/minimum_order/amount 5
744+
* @magentoConfigFixture current_store sales/minimum_order/tax_including 1
745+
* @magentoConfigFixture current_store sales/minimum_order/include_discount_amount 1
746+
* @magentoConfigFixture current_store tax/calculation/price_includes_tax 1
747+
* @magentoConfigFixture current_store tax/calculation/apply_after_discount 1
748+
* @magentoConfigFixture current_store tax/calculation/cross_border_trade_enabled 1
749+
* @magentoDataFixture Magento/SalesRule/_files/cart_rule_with_coupon_5_off_no_condition.php
750+
* @magentoDataFixture Magento/Tax/_files/tax_rule_region_1_al.php
751+
* @magentoDataFixture Magento/Checkout/_files/quote_with_taxable_product_and_customer.php
752+
*/
753+
public function testValidateMinimumAmountWithPriceInclTaxAndDiscount()
754+
{
755+
/** @var $quote \Magento\Quote\Model\Quote */
756+
$quote = $this->getQuoteByReservedOrderId->execute('test_order_with_taxable_product');
757+
$quote->setCouponCode('CART_FIXED_DISCOUNT_5');
758+
$quote->collectTotals();
759+
$this->assertEquals(-5, $quote->getShippingAddress()->getBaseDiscountAmount());
760+
$this->assertEquals(9.3, $quote->getShippingAddress()->getBaseSubtotal());
761+
$this->assertEquals(5, $quote->getShippingAddress()->getBaseGrandTotal());
762+
$this->assertTrue($quote->validateMinimumAmount());
763+
}
740764
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Customer\Model\GroupManagement;
9+
use Magento\Customer\Model\ResourceModel\Group\Collection;
10+
use Magento\SalesRule\Api\CouponRepositoryInterface;
11+
use Magento\SalesRule\Model\Coupon;
12+
use Magento\SalesRule\Model\Rule;
13+
use Magento\Store\Model\StoreManagerInterface;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
16+
$objectManager = Bootstrap::getObjectManager();
17+
/** @var Collection $groupCollection */
18+
$groupCollection = $objectManager->get(Collection::class);
19+
$customerGroupIds = $groupCollection->getAllIds();
20+
/** @var Rule $salesRule */
21+
$salesRule = $objectManager->create(Rule::class);
22+
$salesRule->setData(
23+
[
24+
'name' => 'cart_rule_with_coupon_5_off_no_condition',
25+
'is_active' => 1,
26+
'customer_group_ids' => $groupCollection->getAllIds(),
27+
'coupon_type' => Rule::COUPON_TYPE_SPECIFIC,
28+
'simple_action' => Rule::CART_FIXED_ACTION,
29+
'discount_amount' => 5,
30+
'discount_step' => 0,
31+
'stop_rules_processing' => 1,
32+
'website_ids' => [
33+
$objectManager->get(StoreManagerInterface::class)->getWebsite()->getId(),
34+
],
35+
'store_labels' => [
36+
37+
'store_id' => 0,
38+
'store_label' => 'cart_rule_with_coupon_5_off_no_condition',
39+
]
40+
]
41+
);
42+
$objectManager->get(\Magento\SalesRule\Model\ResourceModel\Rule::class)->save($salesRule);
43+
44+
// Create coupon and assign "5$ fixed discount" rule to this coupon.
45+
$coupon = $objectManager->create(Coupon::class);
46+
$coupon->setRuleId($salesRule->getId())
47+
->setCode('CART_FIXED_DISCOUNT_5')
48+
->setType(0);
49+
$objectManager->get(CouponRepositoryInterface::class)->save($coupon);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Framework\Api\SearchCriteriaBuilder;
9+
use Magento\Framework\Registry;
10+
use Magento\SalesRule\Api\RuleRepositoryInterface;
11+
use Magento\SalesRule\Model\Rule;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
14+
$objectManager = Bootstrap::getObjectManager();
15+
16+
/** @var Registry $registry */
17+
$registry = $objectManager->get(Registry::class);
18+
$registry->unregister('isSecureArea');
19+
$registry->register('isSecureArea', true);
20+
21+
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
22+
$searchCriteriaBuilder = $objectManager->get(SearchCriteriaBuilder::class);
23+
$searchCriteria = $searchCriteriaBuilder->addFilter('name', 'cart_rule_with_coupon_5_off_no_condition')
24+
->create();
25+
/** @var RuleRepositoryInterface $ruleRepository */
26+
$ruleRepository = $objectManager->get(RuleRepositoryInterface::class);
27+
$items = $ruleRepository->getList($searchCriteria)
28+
->getItems();
29+
/** @var Rule $salesRule */
30+
$salesRule = array_pop($items);
31+
if ($salesRule !== null) {
32+
$ruleRepository->deleteById($salesRule->getRuleId());
33+
}
34+
35+
$registry->unregister('isSecureArea');
36+
$registry->register('isSecureArea', false);

0 commit comments

Comments
 (0)