24
24
use Magento \Framework \Exception \NoSuchEntityException ;
25
25
use Magento \Quote \Api \Data \TotalsInterface ;
26
26
use Magento \Quote \Model \GuestCart \GuestCartTotalRepository ;
27
+ use Magento \Quote \Model \Quote ;
28
+ use Magento \SalesRule \Model \Rule ;
29
+ use Magento \SalesRule \Api \RuleRepositoryInterface ;
27
30
use Meta \BusinessExtension \Helper \FBEHelper ;
28
31
use Meta \BusinessExtension \Model \Api \CustomApiKey \Authenticator ;
29
32
use Meta \Sales \Api \CartTotalsApiInterface ;
30
33
use Meta \Sales \Helper \OrderHelper ;
34
+ use Magento \Quote \Model \QuoteRepository ;
35
+ use Magento \Quote \Model \QuoteIdMaskFactory ;
31
36
32
37
class CartTotalsApi implements CartTotalsApiInterface
33
38
{
@@ -51,22 +56,46 @@ class CartTotalsApi implements CartTotalsApiInterface
51
56
*/
52
57
private FBEHelper $ fbeHelper ;
53
58
59
+ /**
60
+ * @var QuoteRepository
61
+ */
62
+ private QuoteRepository $ quoteRepository ;
63
+
64
+ /**
65
+ * @var RuleRepositoryInterface
66
+ */
67
+ private RuleRepositoryInterface $ ruleRepository ;
68
+
69
+ /**
70
+ * @var QuoteIdMaskFactory
71
+ */
72
+ private QuoteIdMaskFactory $ quoteIdMaskFactory ;
73
+
54
74
/**
55
75
* @param Authenticator $authenticator
56
76
* @param OrderHelper $orderHelper
57
77
* @param GuestCartTotalRepository $guestCartTotalRepository
58
78
* @param FBEHelper $fbeHelper
79
+ * @param QuoteRepository $quoteRepository
80
+ * @param RuleRepositoryInterface $ruleRepository
81
+ * @param QuoteIdMaskFactory $quoteIdMaskFactory
59
82
*/
60
83
public function __construct (
61
84
Authenticator $ authenticator ,
62
85
OrderHelper $ orderHelper ,
63
86
GuestCartTotalRepository $ guestCartTotalRepository ,
64
- FBEHelper $ fbeHelper
87
+ FBEHelper $ fbeHelper ,
88
+ QuoteRepository $ quoteRepository ,
89
+ RuleRepositoryInterface $ ruleRepository ,
90
+ QuoteIdMaskFactory $ quoteIdMaskFactory
65
91
) {
66
92
$ this ->authenticator = $ authenticator ;
67
93
$ this ->orderHelper = $ orderHelper ;
68
94
$ this ->guestCartTotalRepository = $ guestCartTotalRepository ;
69
95
$ this ->fbeHelper = $ fbeHelper ;
96
+ $ this ->quoteRepository = $ quoteRepository ;
97
+ $ this ->ruleRepository = $ ruleRepository ;
98
+ $ this ->quoteIdMaskFactory = $ quoteIdMaskFactory ;
70
99
}
71
100
72
101
/**
@@ -83,7 +112,25 @@ public function getCartTotals(string $externalBusinessId, string $cartId): Total
83
112
$ this ->authenticator ->authenticateRequest ();
84
113
$ storeId = $ this ->orderHelper ->getStoreIdByExternalBusinessId ($ externalBusinessId );
85
114
try {
86
- return $ this ->guestCartTotalRepository ->get ($ cartId );
115
+ $ quoteId = (int )$ this ->quoteIdMaskFactory ->create ()->load ($ cartId , 'masked_id ' )->getQuoteId ();
116
+ /**
117
+ * @var Quote $quote
118
+ */
119
+ $ quote = $ this ->quoteRepository ->get ($ quoteId );
120
+ $ totals = $ this ->guestCartTotalRepository ->get ($ cartId );
121
+ $ rules = explode (', ' , $ quote ->getAppliedRuleIds () ?? "" );
122
+ foreach ($ rules as $ ruleId ) {
123
+ if ($ ruleId ) {
124
+ $ rule = $ this ->ruleRepository ->getById ($ ruleId );
125
+ if ($ rule ->getSimpleAction () === Rule::BUY_X_GET_Y_ACTION ) {
126
+ $ attrs = $ totals ->getExtensionAttributes ();
127
+ $ attrs ->setBxgyDiscountApplied (true );
128
+ $ totals ->setExtensionAttributes ($ attrs );
129
+ break 1 ; // Exit
130
+ }
131
+ }
132
+ }
133
+ return $ totals ;
87
134
} catch (NoSuchEntityException $ e ) {
88
135
$ le = new LocalizedException (
89
136
__ (
0 commit comments