Skip to content
Code-Schnipsel Gruppen Projekte
Window.js 6,69 KiB
Newer Older
Henning Leutz's avatar
Henning Leutz committed
/**
 * @module package/quiqqer/coupons/bin/backend/controls/Window
 * @author www.pcsg.de (Henning Leutz)
 */
define('package/quiqqer/coupons/bin/backend/controls/Window', [

    'qui/QUI',
    'qui/controls/windows/Confirm',
    'controls/grid/Grid',
    'Locale',
    'package/quiqqer/coupons/bin/backend/CouponCodes',

], function (QUI, QUIConfirm, Grid, QUILocale, CouponCodes) {
    "use strict";

    const lg = 'quiqqer/coupons';

    return new Class({

        Extends: QUIConfirm,
        Type: 'package/quiqqer/coupons/bin/backend/controls/Window',
Henning Leutz's avatar
Henning Leutz committed

        Binds: [
            '$listRefresh',
            '$onOpen',
            '$onResize'
        ],

        initialize: function (options) {
            this.parent(options);

            this.setAttributes({
                icon: 'fa fa-credit-card-alt',
                title: QUILocale.get(lg, 'controls.manager.title'),
Henning Leutz's avatar
Henning Leutz committed
                maxHeight: 600,
                maxWidth: 500,
Henning Leutz's avatar
Henning Leutz committed
            });

            this.addEvents({
                onOpen: this.$onOpen,
Henning Leutz's avatar
Henning Leutz committed
                onResize: this.$onResize
            });
        },

        submit: function () {
            if (!this.$Grid) {
                return;
            }

            this.fireEvent('submit', [
                this,
                this.$Grid.getSelectedData()
            ]);

            if (this.getAttribute('autoclose')) {
                this.close();
            }
        },

        $onOpen: function () {
            this.getContent().set('html', '');
            this.Loader.show();

            const Container = new Element('div').inject(this.getContent());

            this.$Grid = new Grid(Container, {
                columnModel: [
Henning Leutz's avatar
Henning Leutz committed
                    {
                        header: QUILocale.get('quiqqer/system', 'id'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'id',
                        dataType: 'number',
                        width: 50
Henning Leutz's avatar
Henning Leutz committed
                    },
                    {
                        header: QUILocale.get(lg, 'controls.manager.tbl.header.code'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'code',
                        dataType: 'string',
                        width: 150
Henning Leutz's avatar
Henning Leutz committed
                    },
                    {
                        header: QUILocale.get(lg, 'controls.manager.tbl.header.title'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'title',
                        dataType: 'string',
                        width: 200
Henning Leutz's avatar
Henning Leutz committed
                    },
                    {
                        header: QUILocale.get(lg, 'controls.manager.tbl.header.status'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'status',
                        dataType: 'node',
                        width: 200,
Henning Leutz's avatar
Henning Leutz committed
                        className: 'clickable'
                    },
                    {
                        header: QUILocale.get(lg, 'controls.manager.tbl.header.validUntilDate'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'validUntilDateText',
                        dataType: 'string',
                        width: 150
Henning Leutz's avatar
Henning Leutz committed
                    },
                    {
                        header: QUILocale.get(lg, 'controls.manager.tbl.header.reusable'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'maxUsageLabel',
                        dataType: 'string',
                        width: 150
Henning Leutz's avatar
Henning Leutz committed
                    },
                    {
                        header: QUILocale.get(lg, 'controls.manager.tbl.header.createDate'),
Henning Leutz's avatar
Henning Leutz committed
                        dataIndex: 'createDate',
                        dataType: 'string',
                        width: 150
Henning Leutz's avatar
Henning Leutz committed
                    }
                ],
                pagination: true,
                serverSort: true,
                selectable: true,
Henning Leutz's avatar
Henning Leutz committed
                multipleSelection: true
            });


            this.$Grid.addEvents({
                onDblClick: () => {
                    this.submit();
                },
                onRefresh: this.$listRefresh
Henning Leutz's avatar
Henning Leutz committed
            });

            this.$Grid.refresh();
            this.$onResize();
        },

        $onResize: function () {
            if (!this.$Grid) {
                return;
            }

            this.$Grid.setHeight(
                this.getContent().getSize().y - 40
            );
        },

        /**
         * Refresh bundle list
         *
         * @param {Object} Grid
         */
        $listRefresh: function (Grid) {
            if (!this.$Grid) {
                return;
            }

            let GridParams = {
                sortOn: Grid.getAttribute('sortOn'),
                sortBy: Grid.getAttribute('sortBy'),
Henning Leutz's avatar
Henning Leutz committed
                perPage: Grid.getAttribute('perPage'),
                page: Grid.getAttribute('page')
Henning Leutz's avatar
Henning Leutz committed
            };

            switch (GridParams.sortOn) {
                case 'status':
                    GridParams.sortOn = 'useDate';
                    break;

                case 'user':
                    GridParams.sortOn = 'userId';
                    break;
            }

            this.Loader.show();

            CouponCodes.getList(GridParams).then((ResultData) => {
                this.Loader.hide();
                this.$setGridData(ResultData);
            });
        },

        /**
         * Set license data to grid
         *
         * @param {Object} GridData
         */
        $setGridData: function (GridData) {
            let textUnlimited = QUILocale.get(lg, 'controls.manager.tbl.validUntil.unlimited');

            for (let i = 0, len = GridData.data.length; i < len; i++) {
                let Row = GridData.data[i];

                let StatusElm = new Element('span', {
                    'class': 'quiqqer-coupons-manager-tbl-status'
                });

                let usageCount = Row.usages.length;

                if (!Row.isValid) {
                    StatusElm.set('html', QUILocale.get(lg, 'controls.manager.tbl.status.invalid', {
                        usageCount: usageCount
                    }));

                    StatusElm.addClass('quiqqer-coupons-manager-tbl-status-invalid');
                } else {
                    StatusElm.set('html', QUILocale.get(lg, 'controls.manager.tbl.status.valid', {
                        usageCount: usageCount
                    }));

                    StatusElm.addClass('quiqqer-coupons-manager-tbl-status-used');
                }

                Row.status = StatusElm;

                if (!Row.validUntilDate) {
                    Row.validUntilDateText = textUnlimited;
                } else {
                    Row.validUntilDateText = Row.validUntilDate;
                }

                if (!Row.title) {
                    Row.title = '-';
                }

                Row.maxUsageLabel = QUILocale.get(lg, 'controls.manager.tbl.maxUsageLabel.' + Row.maxUsages);
            }

            this.$Grid.setData(GridData);
        }
    });
});