From 8af4a8f6b48316dbc66c84e8c44e03d38f8f25a6 Mon Sep 17 00:00:00 2001
From: Henning Leutz <leutz@pcsg.de>
Date: Tue, 22 Jun 2021 12:13:02 +0200
Subject: [PATCH] fix: quiqqer/coupons#10

---
 ajax/frontend/redeem.php       | 16 ++++++++++++++++
 src/QUI/ERP/Coupons/Events.php |  5 ++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/ajax/frontend/redeem.php b/ajax/frontend/redeem.php
index e5fa5e4..740b4a2 100644
--- a/ajax/frontend/redeem.php
+++ b/ajax/frontend/redeem.php
@@ -45,6 +45,7 @@ function ($code, $orderHash) {
 
         $calculations = $Order->getArticles()->getCalculations();
         $subSum       = $calculations['subSum'];
+        $sum          = $calculations['sum'];
         $discounts    = $CouponCode->getDiscounts();
 
         foreach ($discounts as $Discount) {
@@ -59,6 +60,21 @@ function ($code, $orderHash) {
                 return false;
             }
 
+            if ($Discount->getAttribute('scope') === QUI\ERP\Discount\Handler::DISCOUNT_SCOPE_GRAND_TOTAL) {
+                if (!DiscountEvents::isDiscountUsableWithPurchaseValue($Discount, $sum)) {
+                    QUI::getMessagesHandler()->addError(
+                        QUI::getLocale()->get(
+                            'quiqqer/coupons',
+                            'exception.CouponCode.discounts_invalid'
+                        )
+                    );
+
+                    return false;
+                }
+
+                continue;
+            }
+
             if (!DiscountEvents::isDiscountUsableWithPurchaseValue($Discount, $subSum)) {
                 QUI::getMessagesHandler()->addError(
                     QUI::getLocale()->get(
diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php
index 655b98b..12c599c 100644
--- a/src/QUI/ERP/Coupons/Events.php
+++ b/src/QUI/ERP/Coupons/Events.php
@@ -252,7 +252,10 @@ public static function onQuiqqerOrderBasketToOrder(
                     continue;
                 }
 
-                if (!DiscountEvents::isDiscountUsableWithPurchaseValue($Discount, $subSum)) {
+                if ($Discount->getAttribute('scope') === QUI\ERP\Discount\Handler::DISCOUNT_SCOPE_GRAND_TOTAL) {
+                    // do nothing for this scope
+                    // since this scope requires all price factors etc, this cannot be calculated here
+                } elseif (!DiscountEvents::isDiscountUsableWithPurchaseValue($Discount, $subSum)) {
                     continue;
                 }
 
-- 
GitLab