<?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) { try { $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; } 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; } } $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; }, ['code', 'orderHash'] );