Skip to content

Commit 1ba25dd

Browse files
committed
ACP2E-3498: Incorrect discount value when multiple cart price rules are applied simultaneously with discounted/special priced products
1 parent c49a8c8 commit 1ba25dd

File tree

4 files changed

+13
-8
lines changed

4 files changed

+13
-8
lines changed

app/code/Magento/SalesRule/Model/Rule/Action/Discount/CartFixed.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\SalesRule\Model\DeltaPriceRound;
1414
use Magento\SalesRule\Model\Rule;
1515
use Magento\SalesRule\Model\Validator;
16+
use Magento\Quote\Model\Quote\Item;
1617

1718
/**
1819
* Calculates discount for cart item if fixed discount applied on whole cart.
@@ -79,10 +80,11 @@ public function calculate($rule, $item, $qty)
7980
$discountData = $this->discountFactory->create();
8081

8182
$ruleTotals = $this->validator->getRuleItemTotalsInfo($rule->getId());
82-
if (is_null($rule->getExistingDiscounts())) {
83+
if ($rule->getExistingDiscounts() === null) {
8384
$existingRuleDiscount = 0;
85+
/** @var Item $ruleItem */
8486
foreach ($ruleTotals['affected_items'] as $ruleItem) {
85-
$existingRuleDiscount += $ruleItem->getBaseDiscountAmount() * $qty;
87+
$existingRuleDiscount += $ruleItem->getBaseDiscountAmount();
8688
}
8789
$rule->setExistingDiscounts($existingRuleDiscount);
8890
}

app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/CartFixedTest.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ public function testCalculate(array $shipping, array $ruleDetails): void
185185
->willReturn(true);
186186
$cartExtensionMock = $this->getMockBuilder(CartExtensionInterface::class)
187187
->disableOriginalConstructor()
188-
->addMethods(['getShippingAssignments'])
189188
->getMockForAbstractClass();
190189
$this->quote->expects($this->any())->method('getCartFixedRules')->will($this->returnValue([]));
191190
$store = $this->createMock(Store::class);
@@ -279,7 +278,8 @@ public static function dataProviderActions()
279278
'items_count' => 1,
280279
'rounded_amount' => 0.0,
281280
'discounted_amount' => 10.0,
282-
'cart_rules' => 0.0
281+
'cart_rules' => 0.0,
282+
'affected_items' => []
283283
]
284284
],
285285
'regular shipping with two items and single shipping' => [
@@ -294,7 +294,8 @@ public static function dataProviderActions()
294294
'items_count' => 2,
295295
'rounded_amount' => 0.0,
296296
'discounted_amount' => 10.0,
297-
'cart_rules' => 0.0
297+
'cart_rules' => 0.0,
298+
'affected_items' => []
298299
]
299300
],
300301
'regular shipping with two items and multiple shipping' => [
@@ -309,7 +310,8 @@ public static function dataProviderActions()
309310
'items_count' => 2,
310311
'rounded_amount' => 0.0,
311312
'discounted_amount' => 10.0,
312-
'cart_rules' => 0.0
313+
'cart_rules' => 0.0,
314+
'affected_items' => []
313315
]
314316
]
315317

app/code/Magento/SalesRule/Test/Unit/Model/ValidatorTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ public function testInitTotalsCanApplyDiscount(): void
461461
$this->assertArrayHasKey('items_price', $this->model->getRuleItemTotalsInfo($rule->getId()));
462462
$this->assertArrayHasKey('base_items_price', $this->model->getRuleItemTotalsInfo($rule->getId()));
463463
$this->assertArrayHasKey('items_count', $this->model->getRuleItemTotalsInfo($rule->getId()));
464+
$this->assertArrayHasKey('affected_items', $this->model->getRuleItemTotalsInfo($rule->getId()));
464465
$this->assertEquals(1, $this->model->getRuleItemTotalsInfo($rule->getId())['items_count']);
465466
}
466467

dev/tests/integration/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/CartFixedTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -526,11 +526,11 @@ public static function discountByPercentDataProvider()
526526
],
527527
[
528528
'percentDiscount' => 15.5,
529-
'expectedDiscounts' => ['simple1' => 3.66, 'simple2' => 9.75, 'totalDiscount' => -13.41]
529+
'expectedDiscounts' => ['simple1' => 3.65, 'simple2' => 9.76, 'totalDiscount' => -13.41]
530530
],
531531
[
532532
'percentDiscount' => 50,
533-
'expectedDiscounts' => ['simple1' => 5.73, 'simple2' => 15.26, 'totalDiscount' => -20.99]
533+
'expectedDiscounts' => ['simple1' => 5.72, 'simple2' => 15.27, 'totalDiscount' => -20.99]
534534
],
535535
[
536536
'percentDiscount' => 100,

0 commit comments

Comments
 (0)