/** * CouponCodeInput * * @module package/quiqqer/coupons/bin/frontend/classes/CouponCodeInput * @author www.pcsg.de (Patrick Müller) */ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [ 'qui/controls/Control', 'qui/controls/loader/Loader', '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, QUIAjax, QUILocale, Mustache, template) { "use strict"; var lg = 'quiqqer/coupons'; return new Class({ Extends: QUIControl, Type : 'package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', Binds: [ '$submit' ], initialize: function (options) { this.parent(options); this.$Input = null; this.Loader = new QUILoader(); this.$running = false; this.addEvents({ onInject: this.$onInject }); }, /** * Event: onInject */ $onInject: function () { var self = this; var lgPrefix = 'controls.frontend.CouponCodeInput.template.'; this.$Elm.addClass('quiqqer-coupons-field'); this.$Elm.set('html', Mustache.render(template, { labelInput : QUILocale.get(lg, lgPrefix + 'labelInput'), labelInputPlaceholder: QUILocale.get(lg, lgPrefix + 'labelInputPlaceholder'), submitBtnText : QUILocale.get(lg, lgPrefix + 'submitBtnText') })); this.Loader.inject(this.$Elm); this.$Input = this.$Elm.getElement('input[name="code"]'); this.$Input.addEvent('keyup', function (event) { if (event.code === 13) { self.$submit(); } }); this.$Elm.getElement( 'button.quiqqer-coupons-couponcodeinput-btn' ).addEvent('click', function (event) { event.stop(); self.$submit(); }); }, /** * Submit a CouponCode */ $submit: function () { if (this.$running) { return; } var self = this; var code = this.$Input.value.trim(); if (code === '') { this.$Input.focus(); return; } this.$running = true; this.Loader.show(); // get order process var OrderProcessNode = this.getElm().getParent( '[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(); OrderProcess.getOrder().then(function (orderHash) { return CouponCodes.addCouponCodeToBasket(code, orderHash); }).then(function (redeemed) { self.$running = false; if (redeemed === false) { OrderProcess.Loader.hide(); self.Loader.hide(); return; } 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; } }); });