Skip to content
Code-Schnipsel Gruppen Projekte
redeem.php 3,25 KiB
Newer Older
<?php

/**
 * This file contains package_quiqqer_coupons_ajax_delete
 */

use QUI\ERP\Coupons\Handler;
use QUI\ERP\Discount\EventHandling as DiscountEvents;

/**
 * Redeem a CouponCode
 *
 * @param int $id - CouponCode ID
 * @return bool - success
 */
QUI::$Ajax->registerFunction(
    'package_quiqqer_coupons_ajax_frontend_redeem',
    function ($code, $orderHash) {
            $code = Handler::sanitizeCode($code);
            $CouponCode = Handler::getCouponCodeByCode($code);
            $CouponCode->checkRedemption(QUI::getUserBySession());
        } catch (QUI\ERP\Coupons\CouponCodeException $Exception) {
            QUI\System\Log::writeDebugException($Exception);

            QUI::getMessagesHandler()->addError($Exception->getMessage());

            return false;
        } catch (Exception $Exception) {
            QUI\System\Log::writeException($Exception);

            QUI::getMessagesHandler()->addError(
                QUI::getLocale()->get(
                    'quiqqer/coupons',
                    'message.ajax.general_error'
                )
            );

            return false;
        }

        $Order = QUI\ERP\Order\Handler::getInstance()->getOrderByHash($orderHash);
        $productCount = $Order->getArticles()->count();

        $calculations = $Order->getArticles()->getCalculations();
        $subSum = $calculations['subSum'];
        $sum = $calculations['sum'];
        $discounts = $CouponCode->getDiscounts();

        foreach ($discounts as $Discount) {
            if (!DiscountEvents::isDiscountUsableWithQuantity($Discount, $productCount)) {
                QUI::getMessagesHandler()->addError(
                    QUI::getLocale()->get(
                        'quiqqer/coupons',
                        'exception.CouponCode.discounts_invalid'
                    )
                );

                return false;
            }

Henning Leutz's avatar
Henning Leutz committed
            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(
                        'quiqqer/coupons',
                        'exception.CouponCode.discounts_invalid'
                    )
                );

                return false;
            }
        }


Henning Leutz's avatar
Henning Leutz committed
        $coupons = $Order->getDataEntry('quiqqer-coupons');

        if (empty($coupons)) {
            $coupons = [];
        }

        $coupons[] = $code;
        $coupons = array_unique($coupons);

        $Order->setData('quiqqer-coupons', $coupons);
        $Order->update();
        // add
        if ($Order instanceof QUI\ERP\Order\OrderInProcess) {
            $CouponCode->addToOrder($Order);
        }

        return true;
    },