Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CouponPost.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
9 
14 {
20  protected $quoteRepository;
21 
27  protected $couponFactory;
28 
40  public function __construct(
41  \Magento\Framework\App\Action\Context $context,
42  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
43  \Magento\Checkout\Model\Session $checkoutSession,
45  \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
46  \Magento\Checkout\Model\Cart $cart,
47  \Magento\SalesRule\Model\CouponFactory $couponFactory,
49  ) {
50  parent::__construct(
51  $context,
52  $scopeConfig,
53  $checkoutSession,
55  $formKeyValidator,
56  $cart
57  );
58  $this->couponFactory = $couponFactory;
59  $this->quoteRepository = $quoteRepository;
60  }
61 
69  public function execute()
70  {
71  $couponCode = $this->getRequest()->getParam('remove') == 1
72  ? ''
73  : trim($this->getRequest()->getParam('coupon_code'));
74 
75  $cartQuote = $this->cart->getQuote();
76  $oldCouponCode = $cartQuote->getCouponCode();
77 
78  $codeLength = strlen($couponCode);
79  if (!$codeLength && !strlen($oldCouponCode)) {
80  return $this->_goBack();
81  }
82 
83  try {
84  $isCodeLengthValid = $codeLength && $codeLength <= \Magento\Checkout\Helper\Cart::COUPON_CODE_MAX_LENGTH;
85 
86  $itemsCount = $cartQuote->getItemsCount();
87  if ($itemsCount) {
88  $cartQuote->getShippingAddress()->setCollectShippingRates(true);
89  $cartQuote->setCouponCode($isCodeLengthValid ? $couponCode : '')->collectTotals();
90  $this->quoteRepository->save($cartQuote);
91  }
92 
93  if ($codeLength) {
94  $escaper = $this->_objectManager->get(\Magento\Framework\Escaper::class);
95  $coupon = $this->couponFactory->create();
96  $coupon->load($couponCode, 'code');
97  if (!$itemsCount) {
98  if ($isCodeLengthValid && $coupon->getId()) {
99  $this->_checkoutSession->getQuote()->setCouponCode($couponCode)->save();
100  $this->messageManager->addSuccessMessage(
101  __(
102  'You used coupon code "%1".',
103  $escaper->escapeHtml($couponCode)
104  )
105  );
106  } else {
107  $this->messageManager->addErrorMessage(
108  __(
109  'The coupon code "%1" is not valid.',
110  $escaper->escapeHtml($couponCode)
111  )
112  );
113  }
114  } else {
115  if ($isCodeLengthValid && $coupon->getId() && $couponCode == $cartQuote->getCouponCode()) {
116  $this->messageManager->addSuccessMessage(
117  __(
118  'You used coupon code "%1".',
119  $escaper->escapeHtml($couponCode)
120  )
121  );
122  } else {
123  $this->messageManager->addErrorMessage(
124  __(
125  'The coupon code "%1" is not valid.',
126  $escaper->escapeHtml($couponCode)
127  )
128  );
129  }
130  }
131  } else {
132  $this->messageManager->addSuccessMessage(__('You canceled the coupon code.'));
133  }
134  } catch (\Magento\Framework\Exception\LocalizedException $e) {
135  $this->messageManager->addErrorMessage($e->getMessage());
136  } catch (\Exception $e) {
137  $this->messageManager->addErrorMessage(__('We cannot apply the coupon code.'));
138  $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
139  }
140 
141  return $this->_goBack();
142  }
143 }
$quoteRepository
Definition: CouponPost.php:20
$coupon
$storeManager
__()
Definition: __.php:13
__construct(\Magento\Framework\App\Action\Context $context, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator, \Magento\Checkout\Model\Cart $cart, \Magento\SalesRule\Model\CouponFactory $couponFactory, \Magento\Quote\Api\CartRepositoryInterface $quoteRepository)
Definition: CouponPost.php:40
execute()
Definition: CouponPost.php:69
$couponFactory
Definition: CouponPost.php:27
_goBack($backUrl=null)
Definition: Cart.php:73
Definition: CouponPost.php:13