Skip to content
Code-Schnipsel Gruppen Projekte
CouponCodeInput.js 3,28 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * 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',
    
        '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) {
        "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'),
                    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"]'
                );
    
                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;
                    }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    OrderProcess.reload();