Skip to content

Commit 1de5f67

Browse files
authored
Merge pull request #4880 from magento-honey-badgers/MC-19226
[honey] MC-19226: Cart Promotions :: Store promotions detail on the quote
2 parents f2eaa1d + 327d889 commit 1de5f67

File tree

17 files changed

+690
-104
lines changed

17 files changed

+690
-104
lines changed

app/code/Magento/QuoteGraphQl/Model/Cart/DiscountAggregator.php

Lines changed: 0 additions & 48 deletions
This file was deleted.

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,11 @@ private function getDiscountValues($cartItem, $currencyCode)
9393
foreach ($itemDiscounts as $value) {
9494
$discount = [];
9595
$amount = [];
96-
/* @var \Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData */
97-
$discountData = $value['discount'];
98-
/* @var \Magento\SalesRule\Model\Rule $rule */
99-
$rule = $value['rule'];
100-
$discount['label'] = $rule->getStoreLabel($cartItem->getQuote()->getStore()) ?: __('Discount');
101-
$amount['value'] = $discountData->getAmount();
96+
/* @var \Magento\SalesRule\Api\Data\DiscountDataInterface $discountData */
97+
$discountData = $value->getDiscountData();
98+
$discountAmount = $discountData->getAmount();
99+
$discount['label'] = $value->getRuleLabel() ?: __('Discount');
100+
$amount['value'] = $discountAmount;
102101
$amount['currency'] = $currencyCode;
103102
$discount['amount'] = $amount;
104103
$discountValues[] = $discount;

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

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,12 @@
1212
use Magento\Framework\GraphQl\Query\ResolverInterface;
1313
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1414
use Magento\Quote\Model\Quote;
15-
use Magento\QuoteGraphQl\Model\Cart\DiscountAggregator;
1615

1716
/**
1817
* @inheritdoc
1918
*/
2019
class Discounts implements ResolverInterface
2120
{
22-
/**
23-
* @var DiscountAggregator
24-
*/
25-
private $discountAggregator;
26-
27-
/**
28-
* @param DiscountAggregator|null $discountAggregator
29-
*/
30-
public function __construct(
31-
DiscountAggregator $discountAggregator
32-
) {
33-
$this->discountAggregator = $discountAggregator;
34-
}
35-
3621
/**
3722
* @inheritdoc
3823
*/
@@ -55,15 +40,16 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
5540
private function getDiscountValues(Quote $quote)
5641
{
5742
$discountValues=[];
58-
$totalDiscounts = $this->discountAggregator->aggregateDiscountPerRule($quote);
59-
if ($totalDiscounts) {
43+
$address = $quote->getShippingAddress();
44+
$totalDiscounts = $address->getExtensionAttributes()->getDiscounts();
45+
if ($totalDiscounts && is_array($totalDiscounts)) {
6046
foreach ($totalDiscounts as $value) {
6147
$discount = [];
6248
$amount = [];
63-
/* @var \Magento\SalesRule\Model\Rule $rule*/
64-
$rule = $value['rule'];
65-
$discount['label'] = $rule->getStoreLabel($quote->getStore()) ?: __('Discount');
66-
$amount['value'] = $value['discount'];
49+
$discount['label'] = $value->getRuleLabel() ?: __('Discount');
50+
/* @var \Magento\SalesRule\Api\Data\DiscountDataInterface $discountData */
51+
$discountData = $value->getDiscountData();
52+
$amount['value'] = $discountData->getAmount();
6753
$amount['currency'] = $quote->getQuoteCurrencyCode();
6854
$discount['amount'] = $amount;
6955
$discountValues[] = $discount;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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\Api\Data;
9+
10+
/**
11+
* Discount Data Interface
12+
*/
13+
interface DiscountDataInterface
14+
{
15+
/**
16+
* Get Amount
17+
*
18+
* @return float
19+
*/
20+
public function getAmount();
21+
22+
/**
23+
* Get Base Amount
24+
*
25+
* @return float
26+
*/
27+
public function getBaseAmount();
28+
29+
/**
30+
* Get Original Amount
31+
*
32+
* @return float
33+
*/
34+
public function getOriginalAmount();
35+
36+
/**
37+
* Get Base Original Amount
38+
*
39+
* @return float
40+
*/
41+
public function getBaseOriginalAmount();
42+
}
Lines changed: 36 additions & 0 deletions
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+
7+
declare(strict_types=1);
8+
9+
namespace Magento\SalesRule\Api\Data;
10+
11+
/**
12+
* Rule discount Interface
13+
*/
14+
interface RuleDiscountInterface
15+
{
16+
/**
17+
* Get Discount Data
18+
*
19+
* @return \Magento\SalesRule\Api\Data\DiscountDataInterface
20+
*/
21+
public function getDiscountData();
22+
23+
/**
24+
* Get Rule Label
25+
*
26+
* @return string
27+
*/
28+
public function getRuleLabel();
29+
30+
/**
31+
* Get Rule ID
32+
*
33+
* @return int
34+
*/
35+
public function getRuleID();
36+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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+
use Magento\Framework\Api\ExtensionAttributesInterface;
12+
13+
/**
14+
* Discount Data Model
15+
*/
16+
class DiscountData extends \Magento\Framework\Api\AbstractExtensibleObject implements DiscountDataInterface
17+
{
18+
19+
const AMOUNT = 'amount';
20+
const BASE_AMOUNT = 'base_amount';
21+
const ORIGINAL_AMOUNT = 'original_amount';
22+
const BASE_ORIGINAL_AMOUNT = 'base_original_amount';
23+
24+
/**
25+
* Get Amount
26+
*
27+
* @return float
28+
*/
29+
public function getAmount()
30+
{
31+
return $this->_get(self::AMOUNT);
32+
}
33+
34+
/**
35+
* Set Amount
36+
*
37+
* @param float $amount
38+
* @return $this
39+
*/
40+
public function setAmount(float $amount)
41+
{
42+
return $this->setData(self::AMOUNT, $amount);
43+
}
44+
45+
/**
46+
* Get Base Amount
47+
*
48+
* @return float
49+
*/
50+
public function getBaseAmount()
51+
{
52+
return $this->_get(self::BASE_AMOUNT);
53+
}
54+
55+
/**
56+
* Set Base Amount
57+
*
58+
* @param float $amount
59+
* @return $this
60+
*/
61+
public function setBaseAmount(float $amount)
62+
{
63+
return $this->setData(self::BASE_AMOUNT, $amount);
64+
}
65+
66+
/**
67+
* Get Original Amount
68+
*
69+
* @return float
70+
*/
71+
public function getOriginalAmount()
72+
{
73+
return $this->_get(self::ORIGINAL_AMOUNT);
74+
}
75+
76+
/**
77+
* Set Original Amount
78+
*
79+
* @param float $amount
80+
* @return $this
81+
*/
82+
public function setOriginalAmount(float $amount)
83+
{
84+
return $this->setData(self::ORIGINAL_AMOUNT, $amount);
85+
}
86+
87+
/**
88+
* Get Base Original Amount
89+
*
90+
* @return float
91+
*/
92+
public function getBaseOriginalAmount()
93+
{
94+
return $this->_get(self::BASE_ORIGINAL_AMOUNT);
95+
}
96+
97+
/**
98+
* Set Base Original Amount
99+
*
100+
* @param float $amount
101+
* @return $this
102+
*/
103+
public function setBaseOriginalAmount(float $amount)
104+
{
105+
return $this->setData(self::BASE_ORIGINAL_AMOUNT, $amount);
106+
}
107+
108+
/**
109+
* Retrieve existing extension attributes object or create a new one.
110+
*
111+
* @return ExtensionAttributesInterface|null
112+
*/
113+
public function getExtensionAttributes()
114+
{
115+
return $this->_getExtensionAttributes();
116+
}
117+
118+
/**
119+
* Set an extension attributes object.
120+
*
121+
* @param ExtensionAttributesInterface $extensionAttributes
122+
* @return $this
123+
*/
124+
public function setExtensionAttributes(
125+
ExtensionAttributesInterface $extensionAttributes
126+
) {
127+
return $this->_setExtensionAttributes($extensionAttributes);
128+
}
129+
}

0 commit comments

Comments
 (0)