From 09076e178302009a05e717e029dd84683652f104 Mon Sep 17 00:00:00 2001 From: Dominic Watts <94372161+DomPixie@users.noreply.github.com> Date: Thu, 13 Jul 2023 14:32:59 +0100 Subject: [PATCH 1/2] Update PluginUtility.php Factor uses per customer --- Plugin/PluginUtility.php | 57 +++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/Plugin/PluginUtility.php b/Plugin/PluginUtility.php index 1ffb50e..1aa3ec1 100755 --- a/Plugin/PluginUtility.php +++ b/Plugin/PluginUtility.php @@ -11,6 +11,8 @@ use Exception; use Magento\SalesRule\Model\CouponFactory; use MagePal\LimitGuestCheckoutCoupon\Helper\Data; +use MagePal\LimitGuestCheckoutCoupon\Logger\Logger; +use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; class PluginUtility { @@ -25,17 +27,33 @@ class PluginUtility protected $helperData; /** - * PluginUtility constructor. - * @param CouponFactory $couponFactory - * @param Data $helperData + * @var \MagePal\LimitGuestCheckoutCoupon\Logger\Logger + */ + protected $_logger; + + /** + * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory + */ + protected $_orderCollectionFactory; + + /** + * @param \Magento\SalesRule\Model\CouponFactory $couponFactory + * @param \MagePal\LimitGuestCheckoutCoupon\Helper\Data $helperData + * @param \MagePal\LimitGuestCheckoutCoupon\Logger\Logger $logger + * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory */ public function __construct( CouponFactory $couponFactory, - Data $helperData + Data $helperData, + Logger $logger, + CollectionFactory $orderCollectionFactory ) { $this->couponFactory = $couponFactory; $this->helperData = $helperData; + $this->_logger = $logger; + $this->_orderCollectionFactory = $orderCollectionFactory; } + /** * @param $subject * @param Closure $proceed @@ -48,17 +66,38 @@ public function aroundCanProcessRule($subject, Closure $proceed, $rule, $address { $result = $proceed($rule, $address); - $couponCode = $address->getQuote()->getCouponCode(); + if (!$this->helperData->isEnabled()) { + return $result; + } + + $quote = $address->getQuote(); + $couponCode = $quote->getCouponCode(); + + if ($couponCode) { - if ($this->helperData->isEnabled() && $couponCode) { $coupon = $this->couponFactory->create(); $coupon->load($couponCode, 'code'); - if ($coupon->getId() && $rule->getUsesPerCoupon() - && $coupon->getTimesUsed() >= $rule->getUsesPerCoupon() - ) { + if ($coupon->getId() && + $rule->getUsesPerCoupon() && + $coupon->getTimesUsed() >= $rule->getUsesPerCoupon()) { $result = false; } + + $customerId = $quote->getCustomerId(); + $email = $quote->getBillingAddress()->getEmail(); + + if ($coupon->getId() && !$customerId && $email) { + + $collection = $this->_orderCollectionFactory->create() + ->addAttributeToSelect('*') + ->addFieldToFilter('customer_email', ['eq' => $email]) + ->addFieldToFilter('coupon_code', ['eq' => $couponCode]); + + if ($collection->getSize() >= $rule->getUsesPerCustomer()) { + $result = false; + } + } } return $result; From a6c805996b958b80645d829eb4316cb579f02672 Mon Sep 17 00:00:00 2001 From: Dominic Watts <94372161+DomPixie@users.noreply.github.com> Date: Thu, 13 Jul 2023 14:39:34 +0100 Subject: [PATCH 2/2] Update PluginUtility.php remove logger --- Plugin/PluginUtility.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Plugin/PluginUtility.php b/Plugin/PluginUtility.php index 1aa3ec1..a1edabd 100755 --- a/Plugin/PluginUtility.php +++ b/Plugin/PluginUtility.php @@ -11,7 +11,6 @@ use Exception; use Magento\SalesRule\Model\CouponFactory; use MagePal\LimitGuestCheckoutCoupon\Helper\Data; -use MagePal\LimitGuestCheckoutCoupon\Logger\Logger; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; class PluginUtility @@ -26,11 +25,6 @@ class PluginUtility */ protected $helperData; - /** - * @var \MagePal\LimitGuestCheckoutCoupon\Logger\Logger - */ - protected $_logger; - /** * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory */ @@ -45,12 +39,10 @@ class PluginUtility public function __construct( CouponFactory $couponFactory, Data $helperData, - Logger $logger, CollectionFactory $orderCollectionFactory ) { $this->couponFactory = $couponFactory; $this->helperData = $helperData; - $this->_logger = $logger; $this->_orderCollectionFactory = $orderCollectionFactory; }