From 62802ab6c94c18e7267d3785f4a4d37190f39b43 Mon Sep 17 00:00:00 2001 From: Henning Leutz <leutz@pcsg.de> Date: Mon, 17 Sep 2018 17:17:33 +0200 Subject: [PATCH] feat: refactor: redeem coupon code --- ajax/frontend/redeem.php | 10 ++++-- events.xml | 4 +++ src/QUI/ERP/Coupons/Events.php | 57 +++++++++++++++++++++++++++++++--- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/ajax/frontend/redeem.php b/ajax/frontend/redeem.php index 34328ec..7b5226a 100644 --- a/ajax/frontend/redeem.php +++ b/ajax/frontend/redeem.php @@ -16,7 +16,7 @@ 'package_quiqqer_coupons_ajax_frontend_redeem', function ($code, $orderHash) { try { - $CouponCode = Handler::getCouponCodeByCode($code); + Handler::getCouponCodeByCode($code); } catch (QUI\ERP\Coupons\CouponCodeException $Exception) { QUI\System\Log::writeDebugException($Exception); @@ -36,8 +36,14 @@ function ($code, $orderHash) { return false; } - $Order = QUI\ERP\Order\Handler::getInstance()->getOrderByHash($orderHash); + $Order = QUI\ERP\Order\Handler::getInstance()->getOrderByHash($orderHash); + $coupons = $Order->getDataEntry('quiqqer-coupons'); + $coupons[] = $code; + $coupons = array_unique($coupons); + + $Order->setData('quiqqer-coupons', $coupons); + $Order->update(); return true; }, diff --git a/events.xml b/events.xml index bf2f088..65b98cf 100644 --- a/events.xml +++ b/events.xml @@ -2,4 +2,8 @@ <events> <event on="onQuiqqer::order::orderProcessBasketEnd" fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd"/> <!--<event on="onQuiqqer::order::basketSmall::end" fire="\QUI\ERP\Payments\PayPal\Events::templateOrderBasketSmallEnd"/>--> + + <event on="onQuiqqerOrderBasketToOrder" + fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketToOrder" + /> </events> \ No newline at end of file diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php index 7bf60df..abe724f 100644 --- a/src/QUI/ERP/Coupons/Events.php +++ b/src/QUI/ERP/Coupons/Events.php @@ -6,8 +6,6 @@ use Quiqqer\Engine\Collector; use QUI\ERP\Order\Basket\Basket; use QUI\ERP\Order\Basket\BasketGuest; -use QUI\ERP\Order\Utils\Utils as OrderUtils; -use QUI\ERP\Order\Controls\OrderProcess\Checkout as CheckoutStep; /** * Class Events @@ -21,9 +19,6 @@ class Events * * @param Collector $Collector * @param BasketGuest $Basket - * @return void - * - * @throws QUI\Exception */ public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket) { @@ -36,6 +31,58 @@ public static function templateOrderProcessBasketEnd(Collector $Collector, $Bask ); } + + /** + * event - on price factor init + * + * @param $Basket + * @param QUI\ERP\Order\AbstractOrder $Order + * @param QUI\ERP\Products\Utils\PriceFactors $PriceFactors + */ + public static function onQuiqqerOrderBasketToOrder( + $Basket, + QUI\ERP\Order\AbstractOrder $Order, + QUI\ERP\Products\Utils\PriceFactors $PriceFactors + ) { + $coupons = $Order->getDataEntry('quiqqer-coupons'); + + if (!$coupons) { + return; + } + + if (!is_array($coupons)) { + return; + } + + foreach ($coupons as $coupon) { + /* @var $Coupon CouponCode */ + try { + $Coupon = Handler::getCouponCodeByCode($coupon); + } catch (\Exception $Exception) { + continue; + } + + // coupon check + if (!$Coupon->isRedeemable($Order->getCustomer())) { + continue; + } + + /* @var $Discount QUI\ERP\Discount\Discount */ + $discounts = $Coupon->getDiscounts(); + + foreach ($discounts as $Discount) { + // @todo discount check + + $PriceFactor = $Discount->toPriceFactor(); + $PriceFactor->setTitle( + 'Gutschein-Code '.$Coupon->getCode() + ); + + $PriceFactors->addToEnd($PriceFactor); + } + } + } + // /** // * Template event quiqqer/order: onQuiqqer::order::basketSmall::end // * -- GitLab