diff --git a/bin/frontend/controls/CouponCodeInput.js b/bin/frontend/controls/CouponCodeInput.js index 53de490f352d0c8f4a43e166e0509a42a0bfd57a..146bc734f2104d8dc624f6cbb803d008cabfa948 100644 --- a/bin/frontend/controls/CouponCodeInput.js +++ b/bin/frontend/controls/CouponCodeInput.js @@ -11,13 +11,14 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [ 'package/quiqqer/coupons/bin/frontend/CouponCodes', + 'Ajax', 'Locale', 'Mustache', 'text!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.html', 'css!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.css' -], function (QUIControl, QUILoader, CouponCodes, QUILocale, Mustache, template) { +], function (QUIControl, QUILoader, CouponCodes, QUIAjax, QUILocale, Mustache, template) { "use strict"; var lg = 'quiqqer/coupons'; @@ -100,6 +101,28 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [ '[data-qui="package/quiqqer/order/bin/frontend/controls/OrderProcess"]' ); + if (!this.isInOrder()) { + QUIAjax.get('package_quiqqer_order_ajax_frontend_basket_getLastOrder', function (order) { + CouponCodes.addCouponCodeToBasket(code, order.hash).then(function (redeemed) { + if (!redeemed) { + self.$running = false; + self.Loader.hide(); + return; + } + + QUIAjax.get('package_quiqqer_order_ajax_frontend_basket_getOrderProcessUrl', function (url) { + window.location = url + '?coupon=' + code; + }, { + 'package': 'quiqqer/order' + }); + }); + }, { + 'package': 'quiqqer/order' + }); + + return; + } + var OrderProcess = window.QUI.Controls.getById(OrderProcessNode.get('data-quiid')); OrderProcess.Loader.show(); @@ -117,6 +140,18 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [ OrderProcess.reload(); }); + }, + + /** + * Is the coupon in the order process? + * @return {boolean} + */ + isInOrder: function () { + var OrderProcessNode = this.getElm().getParent( + '[data-qui="package/quiqqer/order/bin/frontend/controls/OrderProcess"]' + ); + + return !!OrderProcessNode; } }); }); diff --git a/events.xml b/events.xml index faefcbafd958a8513b136e13bf1d9e149e138c8a..fea43d838fe3207a13667fe25936b2c8e973ba2a 100644 --- a/events.xml +++ b/events.xml @@ -1,13 +1,23 @@ <?xml version="1.0" encoding="UTF-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="onQuiqqer::order::orderProcessBasketEnd" + fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd" + /> + + <event on="onQuiqqer::order::orderShoppingCardBasketEnd" + fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd" + /> <event on="onQuiqqerOrderBasketToOrder" fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketToOrder" /> + <event on="onQuiqqerOrderSuccessful" fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderSuccessful" /> + <event on="onOrderProcess" + fire="\QUI\ERP\Coupons\Events::onOrderProcess" + /> + </events> \ No newline at end of file diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php index e6fcb761060a74a347967cb7db7a56863fc00f1d..a1aae71a0a6ce7e82697976a89ae7526ac0b66f4 100644 --- a/src/QUI/ERP/Coupons/Events.php +++ b/src/QUI/ERP/Coupons/Events.php @@ -20,8 +20,9 @@ class Events * * @param Collector $Collector * @param BasketGuest $Basket + * @param $Order */ - public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket) + public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket, $Order) { if (!($Basket instanceof Basket) && !($Basket instanceof QUI\ERP\Order\Basket\BasketOrder) @@ -29,11 +30,62 @@ public static function templateOrderProcessBasketEnd(Collector $Collector, $Bask return; } + if (isset($Order) && isset($_GET['coupon'])) { + try { + $code = Handler::sanitizeCode($_GET['coupon']); + + $CouponCode = Handler::getCouponCodeByCode($code); + $CouponCode->checkRedemption(QUI::getUserBySession()); + $CouponCode->addToOrder($Order); + } catch (\Exception $Exception) { + } + } + $Collector->append( '<div data-qui="package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput"></div>' ); } + /** + * @param QUI\ERP\Order\OrderProcess $OrderProcess + * @throws QUI\ERP\Order\Exception + * @throws QUI\Exception + */ + public static function onOrderProcess(QUI\ERP\Order\OrderProcess $OrderProcess) + { + $CurrentStep = $OrderProcess->getCurrentStep(); + $currentStep = $CurrentStep->getType(); + + if ($currentStep !== QUI\ERP\Order\Controls\OrderProcess\Basket::class) { + return; + } + + if (!isset($_GET['coupon'])) { + return; + } + + + try { + $Order = $OrderProcess->getOrder(); + $code = Handler::sanitizeCode($_GET['coupon']); + + $CouponCode = Handler::getCouponCodeByCode($code); + $CouponCode->checkRedemption(QUI::getUserBySession()); + + $coupons = $Order->getDataEntry('quiqqer-coupons'); + $coupons[] = $code; + + $coupons = \array_unique($coupons); + + $Order->setData('quiqqer-coupons', $coupons); + $Order->update(); + + + $CouponCode->addToOrder($Order); + } catch (\Exception $Exception) { + } + } + /** * event - on price factor init *