Skip to content

Commit 20c4216

Browse files
author
Prabhu Ram
committed
MC-19226: Cart Promotions :: Store promotions detail on the quote
- semantic fix
1 parent 836bbca commit 20c4216

File tree

7 files changed

+158
-23
lines changed

7 files changed

+158
-23
lines changed

app/code/Magento/QuoteGraphQl/Model/Resolver/CartItemPrices.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private function getDiscountValues($cartItem, $currencyCode)
9393
foreach ($itemDiscounts as $value) {
9494
$discount = [];
9595
$amount = [];
96-
/* @var \Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData */
96+
/* @var \Magento\SalesRule\Api\Data\DiscountDataInterface $discountData */
9797
$discountData = $value->getDiscountData();
9898
$discountAmount = $discountData->getAmount();
9999
$discount['label'] = $value->getRuleLabel() ?: __('Discount');

app/code/Magento/QuoteGraphQl/Model/Resolver/Discounts.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ private function getDiscountValues(Quote $quote)
4747
$discount = [];
4848
$amount = [];
4949
$discount['label'] = $value->getRuleLabel() ?: __('Discount');
50-
/* @var \Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData */
50+
/* @var \Magento\SalesRule\Api\Data\DiscountDataInterface $discountData */
5151
$discountData = $value->getDiscountData();
5252
$amount['value'] = $discountData->getAmount();
5353
$amount['currency'] = $quote->getQuoteCurrencyCode();

app/code/Magento/SalesRule/Api/Data/DiscountDataInterface.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,36 @@
77

88
namespace Magento\SalesRule\Api\Data;
99

10+
/**
11+
* Discount Data Interface
12+
*/
1013
interface DiscountDataInterface
1114
{
1215
/**
1316
* Get Amount
1417
*
1518
* @return float
1619
*/
17-
public function getAmount(): float;
20+
public function getAmount();
1821

1922
/**
2023
* Get Base Amount
2124
*
2225
* @return float
2326
*/
24-
public function getBaseAmount(): float;
27+
public function getBaseAmount();
2528

2629
/**
2730
* Get Original Amount
2831
*
2932
* @return float
3033
*/
31-
public function getOriginalAmount(): float;
34+
public function getOriginalAmount();
3235

3336
/**
3437
* Get Base Original Amount
3538
*
3639
* @return float
3740
*/
38-
public function getBaseOriginalAmount(): float;
41+
public function getBaseOriginalAmount();
3942
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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+
namespace Magento\SalesRule\Model\Data;
9+
10+
use Magento\SalesRule\Api\Data\DiscountDataInterface;
11+
12+
/**
13+
* Discount Data Model
14+
*/
15+
class DiscountData extends \Magento\Framework\Api\AbstractExtensibleObject implements DiscountDataInterface
16+
{
17+
18+
const AMOUNT = 'amount';
19+
const BASE_AMOUNT = 'base_amount';
20+
const ORIGINAL_AMOUNT = 'original_amount';
21+
const BASE_ORIGINAL_AMOUNT = 'base_original_amount';
22+
23+
/**
24+
* Get Amount
25+
*
26+
* @return float
27+
*/
28+
public function getAmount()
29+
{
30+
return $this->_get(self::AMOUNT);
31+
}
32+
33+
/**
34+
* Set Amount
35+
*
36+
* @param float $amount
37+
* @return $this
38+
*/
39+
public function setAmount(float $amount)
40+
{
41+
return $this->setData(self::AMOUNT, $amount);
42+
}
43+
44+
/**
45+
* Get Base Amount
46+
*
47+
* @return float
48+
*/
49+
public function getBaseAmount()
50+
{
51+
return $this->_get(self::BASE_AMOUNT);
52+
}
53+
54+
/**
55+
* Set Base Amount
56+
*
57+
* @param float $amount
58+
* @return $this
59+
*/
60+
public function setBaseAmount(float $amount)
61+
{
62+
return $this->setData(self::BASE_AMOUNT, $amount);
63+
}
64+
65+
/**
66+
* Get Original Amount
67+
*
68+
* @return float
69+
*/
70+
public function getOriginalAmount()
71+
{
72+
return $this->_get(self::ORIGINAL_AMOUNT);
73+
}
74+
75+
/**
76+
* Set Original Amount
77+
*
78+
* @param float $amount
79+
* @return $this
80+
*/
81+
public function setOriginalAmount(float $amount)
82+
{
83+
return $this->setData(self::ORIGINAL_AMOUNT, $amount);
84+
}
85+
86+
/**
87+
* Get Base Original Amount
88+
*
89+
* @return float
90+
*/
91+
public function getBaseOriginalAmount()
92+
{
93+
return $this->_get(self::BASE_ORIGINAL_AMOUNT);
94+
}
95+
96+
/**
97+
* Set Base Original Amount
98+
*
99+
* @param float $amount
100+
* @return $this
101+
*/
102+
public function setBaseOriginalAmount(float $amount)
103+
{
104+
return $this->setData(self::BASE_ORIGINAL_AMOUNT, $amount);
105+
}
106+
}

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

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Magento\SalesRule\Model\Rule\Action\Discount\DataFactory;
99
use Magento\Framework\App\ObjectManager;
1010
use Magento\SalesRule\Api\Data\RuleDiscountInterfaceFactory;
11+
use Magento\SalesRule\Api\Data\DiscountDataInterfaceFactory;
1112

1213
/**
1314
* Discount totals calculation model.
@@ -50,21 +51,28 @@ class Discount extends \Magento\Quote\Model\Quote\Address\Total\AbstractTotal
5051
*/
5152
private $discountInterfaceFactory;
5253

54+
/**
55+
* @var DiscountDataInterfaceFactory
56+
*/
57+
private $discountDataInterfaceFactory;
58+
5359
/**
5460
* @param \Magento\Framework\Event\ManagerInterface $eventManager
5561
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
5662
* @param \Magento\SalesRule\Model\Validator $validator
5763
* @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
5864
* @param DataFactory|null $discountDataFactory
5965
* @param RuleDiscountInterfaceFactory|null $discountInterfaceFactory
66+
* @param DiscountDataInterfaceFactory|null $discountDataInterfaceFactory
6067
*/
6168
public function __construct(
6269
\Magento\Framework\Event\ManagerInterface $eventManager,
6370
\Magento\Store\Model\StoreManagerInterface $storeManager,
6471
\Magento\SalesRule\Model\Validator $validator,
6572
\Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
6673
DataFactory $discountDataFactory = null,
67-
RuleDiscountInterfaceFactory $discountInterfaceFactory = null
74+
RuleDiscountInterfaceFactory $discountInterfaceFactory = null,
75+
DiscountDataInterfaceFactory $discountDataInterfaceFactory = null
6876
) {
6977
$this->setCode(self::COLLECTOR_TYPE_CODE);
7078
$this->eventManager = $eventManager;
@@ -74,6 +82,8 @@ public function __construct(
7482
$this->discountFactory = $discountDataFactory ?: ObjectManager::getInstance()->get(DataFactory::class);
7583
$this->discountInterfaceFactory = $discountInterfaceFactory
7684
?: ObjectManager::getInstance()->get(RuleDiscountInterfaceFactory::class);
85+
$this->discountDataInterfaceFactory = $discountDataInterfaceFactory
86+
?: ObjectManager::getInstance()->get(DiscountDataInterfaceFactory::class);
7787
}
7888

7989
/**
@@ -260,7 +270,7 @@ private function aggregateDiscountPerRule(
260270
$discountBreakdown = $item->getExtensionAttributes()->getDiscounts();
261271
if ($discountBreakdown) {
262272
foreach ($discountBreakdown as $value) {
263-
/* @var \Magento\SalesRule\Model\Rule\Action\Discount\Data $discount */
273+
/* @var \Magento\SalesRule\Api\Data\DiscountDataInterface $discount */
264274
$discount = $value->getDiscountData();
265275
$ruleLabel = $value->getRuleLabel();
266276
$ruleID = $value->getRuleID();
@@ -275,11 +285,13 @@ private function aggregateDiscountPerRule(
275285
$discountData->getBaseOriginalAmount()+$discount->getBaseOriginalAmount()
276286
);
277287
} else {
278-
$discountData = $this->discountFactory->create();
279-
$discountData->setBaseAmount($discount->getBaseAmount());
280-
$discountData->setAmount($discount->getAmount());
281-
$discountData->setOriginalAmount($discount->getOriginalAmount());
282-
$discountData->setBaseOriginalAmount($discount->getBaseOriginalAmount());
288+
$data = [
289+
'amount' => $discount->getAmount(),
290+
'base_amount' => $discount->getBaseAmount(),
291+
'original_amount' => $discount->getOriginalAmount(),
292+
'base_original_amount' => $discount->getBaseOriginalAmount()
293+
];
294+
$discountData = $this->discountDataInterfaceFactory->create(['data' => $data]);
283295
$data = [
284296
'discount' => $discountData,
285297
'rule' => $ruleLabel,

app/code/Magento/SalesRule/Model/RulesApplier.php

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory;
1414
use Magento\SalesRule\Model\Rule\Action\Discount\DataFactory;
1515
use Magento\SalesRule\Api\Data\RuleDiscountInterfaceFactory;
16+
use Magento\SalesRule\Api\Data\DiscountDataInterfaceFactory;
1617

1718
/**
1819
* Class RulesApplier
@@ -53,26 +54,34 @@ class RulesApplier
5354
*/
5455
private $discountInterfaceFactory;
5556

57+
/**
58+
* @var DiscountDataInterfaceFactory
59+
*/
60+
private $discountDataInterfaceFactory;
61+
5662
/**
5763
* @var array
5864
*/
5965
private $discountAggregator;
6066

6167
/**
68+
* RulesApplier constructor.
6269
* @param CalculatorFactory $calculatorFactory
6370
* @param \Magento\Framework\Event\ManagerInterface $eventManager
6471
* @param Utility $utility
6572
* @param ChildrenValidationLocator|null $childrenValidationLocator
6673
* @param DataFactory|null $discountDataFactory
6774
* @param RuleDiscountInterfaceFactory|null $discountInterfaceFactory
75+
* @param DiscountDataInterfaceFactory|null $discountDataInterfaceFactory
6876
*/
6977
public function __construct(
7078
\Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory $calculatorFactory,
7179
\Magento\Framework\Event\ManagerInterface $eventManager,
7280
\Magento\SalesRule\Model\Utility $utility,
7381
ChildrenValidationLocator $childrenValidationLocator = null,
7482
DataFactory $discountDataFactory = null,
75-
RuleDiscountInterfaceFactory $discountInterfaceFactory = null
83+
RuleDiscountInterfaceFactory $discountInterfaceFactory = null,
84+
DiscountDataInterfaceFactory $discountDataInterfaceFactory = null
7685
) {
7786
$this->calculatorFactory = $calculatorFactory;
7887
$this->validatorUtility = $utility;
@@ -82,6 +91,8 @@ public function __construct(
8291
$this->discountFactory = $discountDataFactory ?: ObjectManager::getInstance()->get(DataFactory::class);
8392
$this->discountInterfaceFactory = $discountInterfaceFactory
8493
?: ObjectManager::getInstance()->get(RuleDiscountInterfaceFactory::class);
94+
$this->discountDataInterfaceFactory = $discountDataInterfaceFactory
95+
?: ObjectManager::getInstance()->get(DiscountDataInterfaceFactory::class);
8596
}
8697

8798
/**
@@ -228,21 +239,22 @@ protected function getDiscountData($item, $rule, $address)
228239
private function setDiscountBreakdown($discountData, $item, $rule, $address)
229240
{
230241
if ($discountData->getAmount() > 0 && $item->getExtensionAttributes()) {
231-
/** @var \Magento\SalesRule\Model\Rule\Action\Discount\Data $discount */
232-
$discount = $this->discountFactory->create();
233-
$discount->setBaseOriginalAmount($discountData->getBaseOriginalAmount());
234-
$discount->setAmount($discountData->getAmount());
235-
$discount->setBaseAmount($discountData->getBaseAmount());
236-
$discount->setOriginalAmount($discountData->getOriginalAmount());
242+
$data = [
243+
'amount' => $discountData->getAmount(),
244+
'base_amount' => $discountData->getBaseAmount(),
245+
'original_amount' => $discountData->getOriginalAmount(),
246+
'base_original_amount' => $discountData->getBaseOriginalAmount()
247+
];
248+
$itemDiscount = $this->discountDataInterfaceFactory->create(['data' => $data]);
237249
$ruleLabel = $rule->getStoreLabel($address->getQuote()->getStore()) ?: __('Discount');
238250
$data = [
239-
'discount' => $discount,
251+
'discount' => $itemDiscount,
240252
'rule' => $ruleLabel,
241253
'rule_id' => $rule->getId(),
242254
];
243255
/** @var \Magento\SalesRule\Model\Data\RuleDiscount $itemDiscount */
244-
$itemDiscount = $this->discountInterfaceFactory->create(['data' => $data]);
245-
$this->discountAggregator[] = $itemDiscount;
256+
$ruleDiscount = $this->discountInterfaceFactory->create(['data' => $data]);
257+
$this->discountAggregator[] = $ruleDiscount;
246258
$item->getExtensionAttributes()->setDiscounts($this->discountAggregator);
247259
}
248260
return $this;

app/code/Magento/SalesRule/etc/di.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
type="Magento\SalesRule\Model\Service\CouponManagementService" />
3333
<preference for="Magento\SalesRule\Api\Data\RuleDiscountInterface"
3434
type="Magento\SalesRule\Model\Data\RuleDiscount" />
35+
<preference for="Magento\SalesRule\Api\Data\DiscountDataInterface"
36+
type="Magento\SalesRule\Model\Data\DiscountData" />
3537
<type name="Magento\SalesRule\Helper\Coupon">
3638
<arguments>
3739
<argument name="couponParameters" xsi:type="array">

0 commit comments

Comments
 (0)