Skip to content
Code-Schnipsel Gruppen Projekte
TemporaryInvoice.js 25,6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Henning Leutz's avatar
    Henning Leutz committed
    /**
     * @module package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice
     *
     * Edit a Temporary Invoice and created a posted invoice
     *
     * @require qui/QUI
     * @require qui/controls/desktop/Panel
    
    Henning Leutz's avatar
    Henning Leutz committed
     * @require qui/controls/buttons/Button
     * @require qui/controls/buttons/ButtonMultiple
    
     * @require qui/controls/buttons/Separator
    
    Henning Leutz's avatar
    Henning Leutz committed
     * @require qui/controls/windows/Confirm
     * @require controls/users/address/Select
     * @require package/quiqqer/invoice/bin/Invoices
     * @require Locale
     * @require Mustache
     * @require Users
     * @require text!package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.Data.html',
     * @require css!package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.css'
    
    Henning Leutz's avatar
    Henning Leutz committed
     */
    define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/QUI',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/controls/desktop/Panel',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/controls/buttons/Button',
        'qui/controls/buttons/ButtonMultiple',
    
        'qui/controls/buttons/Separator',
    
        'qui/controls/windows/Confirm',
    
        'qui/utils/Form',
    
        'controls/users/address/Select',
    
        'package/quiqqer/invoice/bin/Invoices',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'package/quiqqer/invoice/bin/backend/controls/articles/Text',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'package/quiqqer/payments/bin/backend/Payments',
    
        'Locale',
        'Mustache',
        'Users',
    
        'text!package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.Data.html',
        'css!package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.css'
    
    
    ], function (QUI, QUIPanel, QUIButton, QUIButtonMultiple, QUISeparator, QUIConfirm, QUIFormUtils,
    
    Henning Leutz's avatar
    Henning Leutz committed
                 AddressSelect, Invoices, TextArticle,
                 Payments, QUILocale, Mustache, Users, templateData) {
    
    Henning Leutz's avatar
    Henning Leutz committed
        "use strict";
    
    
        var lg = 'quiqqer/invoice';
    
    
    Henning Leutz's avatar
    Henning Leutz committed
        return new Class({
    
            Extends: QUIPanel,
    
    Henning Leutz's avatar
    Henning Leutz committed
            Type   : 'package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice',
    
    Henning Leutz's avatar
    Henning Leutz committed
    
            Binds: [
    
    Henning Leutz's avatar
    Henning Leutz committed
                'save',
    
    Henning Leutz's avatar
    Henning Leutz committed
                'openData',
    
    Henning Leutz's avatar
    Henning Leutz committed
                'openArticles',
    
    Henning Leutz's avatar
    Henning Leutz committed
                'openVerification',
                '$openCategory',
                '$closeCategory',
    
    Henning Leutz's avatar
    Henning Leutz committed
                '$onCreate',
    
                '$onInject',
                '$onDestroy',
                '$onDeleteInvoice',
                '$clickDelete'
    
    Henning Leutz's avatar
    Henning Leutz committed
            ],
    
    Henning Leutz's avatar
    Henning Leutz committed
    
            options: {
    
                invoiceId         : false,
                customer_id       : false,
                invoice_address_id: false,
                project_name      : '',
                date              : '',
                time_for_payment  : '',
                data              : {},
                articles          : []
    
    Henning Leutz's avatar
    Henning Leutz committed
            },
    
            initialize: function (options) {
                this.setAttributes({
                    icon: 'fa fa-money'
                });
    
                this.parent(options);
    
                this.$ArticleList        = null;
                this.$ArticleListSummary = null;
                this.$AddProduct         = null;
                this.$AddSeparator       = null;
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$serializedList = {};
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.addEvents({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    onCreate : this.$onCreate,
                    onInject : this.$onInject,
    
                    onDestroy: this.$onDestroy
                });
    
                Invoices.addEvents({
                    onDeleteInvoice: this.$onDeleteInvoice
    
            /**
             * Panel refresh
             */
            refresh: function () {
                var title = this.getAttribute('invoiceId');
    
                title = title + ' (';
    
                if (this.getAttribute('isbrutto')) {
                    title = title + QUILocale.get(lg, 'brutto');
                } else {
                    title = title + QUILocale.get(lg, 'netto');
                }
    
                title = title + ')';
    
                this.setAttribute('title', title);
                this.parent();
            },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
             * Saves the current data
    
    Henning Leutz's avatar
    Henning Leutz committed
             * @return {Promise}
    
    Henning Leutz's avatar
    Henning Leutz committed
            save: function () {
                this.Loader.show();
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$unloadCategory(false);
    
                return Invoices.saveInvoice(
                    this.getAttribute('invoiceId'),
                    this.getCurrentData()
                ).then(function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    this.Loader.hide();
                }.bind(this)).catch(function (err) {
                    console.error(err);
    
                    console.error(err.getMessage());
    
    Henning Leutz's avatar
    Henning Leutz committed
                    this.Loader.hide();
                }.bind(this));
    
             * @returns {{customer_id, invoice_address_id, project_name, articles, date, time_for_payment}}
    
             */
            getCurrentData: function () {
                return {
    
                    customer_id       : this.getAttribute('customer_id'),
                    invoice_address_id: this.getAttribute('invoice_address_id'),
                    project_name      : this.getAttribute('project_name'),
                    articles          : this.getAttribute('articles'),
                    date              : this.getAttribute('date'),
                    time_for_payment  : this.getAttribute('time_for_payment'),
                    payment_method    : this.getAttribute('payment_method')
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * Return the current user data
             */
            getUserData: function () {
                return {
                    uid: this.getAttribute('customer_id'),
    
                    aid: this.getAttribute('invoice_address_id')
    
    Henning Leutz's avatar
    Henning Leutz committed
                };
            },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
             * Open the data category
             *
             * @returns {Promise}
             */
            openData: function () {
                var self = this;
    
                this.Loader.show();
    
                return this.$closeCategory().then(function () {
    
                    var Container = self.getContent().getElement('.container');
    
                    Container.set({
    
    Henning Leutz's avatar
    Henning Leutz committed
                        html: Mustache.render(templateData, {
    
                            textInvoiceData   : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textInvoiceData'),
                            textInvoiceDate   : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textInvoiceDate'),
                            textTermOfPayment : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textTermOfPayment'),
                            textProjectName   : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textProjectName'),
                            textOrderedBy     : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textOrderedBy'),
                            textInvoicePayment: QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textInvoicePayment'),
    
                            textPaymentMethod : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data.textPaymentMethod')
    
    Henning Leutz's avatar
    Henning Leutz committed
                        })
    
                    var Form = Container.getElement('form');
    
                    QUIFormUtils.setDataToForm(self.getAttribute('data'), Form);
    
                    // time fields
                    var time;
    
                    var dateDate = '',
                        dateTime = '';
    
                    if (self.getAttribute('date')) {
                        time = self.getAttribute('date').split(' ');
    
                        dateDate = time[0];
                        dateTime = time[1];
                    }
    
                    if (!dateTime || dateTime === '') {
                        dateTime = '00:00:00';
                    }
    
                    QUIFormUtils.setDataToForm({
                        date_date       : dateDate,
                        date_time       : dateTime,
                        time_for_payment: self.getAttribute('time_for_payment'),
                        project_name    : self.getAttribute('project_name')
                    }, Form);
    
    
                    return QUI.parse(Container);
    
    Henning Leutz's avatar
    Henning Leutz committed
                }).then(function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    var quiId = self.getContent().getElement(
                        '[data-qui="package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.UserData"]'
                    ).get('data-quiid');
    
                    var Data = QUI.Controls.getById(quiId);
    
    Henning Leutz's avatar
    Henning Leutz committed
                    Data.addEvent('onChange', function () {
                        self.setAttribute('customer_id', Data.getValue().userId);
    
                        self.setAttribute('invoice_address_id', Data.getValue().addressId);
    
    Henning Leutz's avatar
    Henning Leutz committed
                    });
    
                    return Data.setValue(
                        self.getAttribute('customer_id'),
    
                        self.getAttribute('invoice_address_id')
    
    Henning Leutz's avatar
    Henning Leutz committed
                    );
                }).then(function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    var Container = self.getContent().getElement('.container');
    
                    new QUIButton({
                        textimage: 'fa fa-list',
    
                        text     : 'Artikel verwalten', // #locale
    
    Henning Leutz's avatar
    Henning Leutz committed
                        styles   : {
                            display: 'block',
                            'float': 'none',
                            margin : '0 auto'
                        },
                        events   : {
                            onClick: function () {
                                self.openArticles();
                            }
                        }
                    }).inject(Container);
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                }).then(function () {
                    return Payments.getPayments();
                }).then(function (payments) {
                    // load payments
    
                    var Payments = self.getContent().getElement('[name="payment_method"]');
    
                    new Element('option', {
                        html : '',
                        value: ''
                    }).inject(Payments);
    
                    for (var payment in payments) {
                        if (!payments.hasOwnProperty(payment)) {
                            continue;
                        }
    
                        new Element('option', {
                            html : payments[payment].title,
                            value: payment
                        }).inject(Payments);
                    }
    
                    Payments.value = self.getAttribute('payment_method');
    
    Henning Leutz's avatar
    Henning Leutz committed
                    self.getCategory('data').setActive();
    
                    self.Loader.hide();
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return self.$openCategory();
                });
            },
    
            /**
             * Open the product category
             *
             * @returns {Promise}
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            openArticles: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.Loader.show();
    
    
                return self.$closeCategory().then(function (Container) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return new Promise(function (resolve) {
                        require([
    
                            'package/quiqqer/invoice/bin/backend/controls/InvoiceArticleList',
                            'package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.Summary'
                        ], function (List, Summary) {
                            self.$ArticleList = new List({
    
                                events: {},
                                styles: {
                                    height: 'calc(100% - 120px)'
                                }
    
    Henning Leutz's avatar
    Henning Leutz committed
                            }).inject(Container);
    
    
                            Container.setStyle('height', '100%');
    
    
                            self.$ArticleListSummary = new Summary({
                                List  : self.$ArticleList,
                                styles: {
    
                                    bottom  : -20,
    
                                    opacity : 0,
    
                                    position: 'absolute'
                                }
                            }).inject(Container.getParent());
    
    
                            moofx(self.$ArticleListSummary.getElm()).animate({
                                bottom : 0,
                                opacity: 1
                            });
    
                            self.$ArticleList.setUser(self.getUserData());
    
    
                            if (self.$serializedList) {
                                self.$ArticleList.unserialize(self.$serializedList);
    
                            self.$AddProduct.show();
                            self.$AddSeparator.show();
                            self.Loader.hide();
    
                            self.getCategory('articles').setActive();
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                            new QUIButton({
                                textimage: 'fa fa-check',
    
                                text     : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.review.btnGoto'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                                styles   : {
                                    display: 'block',
                                    'float': 'none',
    
                                    margin : '20px auto 0'
    
    Henning Leutz's avatar
    Henning Leutz committed
                                },
                                events   : {
    
    Henning Leutz's avatar
    Henning Leutz committed
                                }
                            }).inject(Container);
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                            resolve();
    
                        });
                    });
                }).then(function () {
                    return self.$openCategory();
                });
    
    Henning Leutz's avatar
    Henning Leutz committed
            },
    
            /**
             * Open the verification category
             *
             * @returns {Promise}
             */
            openVerification: function () {
    
                var self      = this,
                    ParentElm = null;
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                this.Loader.show();
    
    
                return this.$closeCategory().then(function (Container) {
    
                    ParentElm = Container;
    
                    return Invoices.getInvoicePreviewHtml(
    
                        self.getAttribute('invoiceId'),
                        self.getCurrentData()
                    ).then(function (html) {
    
                        return new Promise(function (resolve) {
                            require(['qui/controls/elements/Sandbox'], function (Sandbox) {
                                new Sandbox({
                                    content: html,
                                    styles : {
                                        border : '1px solid #DEDEDE',
                                        'float': 'left',
                                        height : 1240,
                                        width  : 874
                                    },
                                    events : {
                                        onLoad: function (Box) {
                                            Box.getBody().style.padding = '20px';
                                        }
    
                                }).inject(Container);
    
                }).then(function () {
                    return Invoices.getMissingAttributes(self.getAttribute('invoiceId'));
                }).then(function (missing) {
                    var Missing = new Element('div', {
                        styles: {
                            'float': 'left',
                            padding: '0 0 0 20px',
                            width  : 'calc(100% - 900)'
                        }
                    }).inject(ParentElm);
    
                    for (var missed in missing) {
                        if (!missing.hasOwnProperty(missed)) {
                            continue;
                        }
    
                        new Element('div', {
                            'class': 'messages-message message-error',
                            html   : missing[missed]
                        }).inject(Missing);
                    }
    
                    self.Loader.hide();
    
                }).then(function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return self.$openCategory();
                });
            },
    
            /**
             * Opens the product search
    
    Henning Leutz's avatar
    Henning Leutz committed
             *
             * @todo only if products are installed
    
    Henning Leutz's avatar
    Henning Leutz committed
             */
            openProductSearch: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var self = this;
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$AddProduct.setAttribute('textimage', 'fa fa-spinner fa-spin');
    
                require([
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'package/quiqqer/invoice/bin/backend/controls/panels/product/AddProductWindow',
    
                    'package/quiqqer/invoice/bin/backend/controls/articles/Article'
    
    Henning Leutz's avatar
    Henning Leutz committed
                ], function (Win, Article) {
                    new Win({
    
    Henning Leutz's avatar
    Henning Leutz committed
                        events: {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            onSubmit: function (Win, article) {
    
                                var Instance = new Article(article);
    
                                if ("calculated_vatArray" in article) {
                                    Instance.setVat(article.calculated_vatArray.vat);
                                }
    
                                self.$ArticleList.addArticle(Instance);
    
    Henning Leutz's avatar
    Henning Leutz committed
                            }
    
    Henning Leutz's avatar
    Henning Leutz committed
                        }
                    }).open();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    self.$AddProduct.setAttribute('textimage', 'fa fa-plus');
                });
    
    Henning Leutz's avatar
    Henning Leutz committed
            },
    
            /**
             * Close the current category
    
    Henning Leutz's avatar
    Henning Leutz committed
             * @returns {Promise}
    
    Henning Leutz's avatar
    Henning Leutz committed
            $closeCategory: function () {
                if (this.$AddProduct) {
                    this.$AddProduct.hide();
                    this.$AddSeparator.hide();
                }
    
    
                    moofx(this.$ArticleListSummary.getElm()).animate({
                        bottom : -20,
                        opacity: 0
                    }, {
                        duration: 250,
                        callback: function () {
                            this.$ArticleListSummary.destroy();
                            this.$ArticleListSummary = null;
                        }.bind(this)
                    });
    
    Henning Leutz's avatar
    Henning Leutz committed
                return new Promise(function (resolve) {
                    var Container = this.getContent().getElement('.container');
    
    Henning Leutz's avatar
    Henning Leutz committed
                    if (!Container) {
                        Container = new Element('div', {
                            'class': 'container',
    
    Henning Leutz's avatar
    Henning Leutz committed
                            styles : {
                                opacity : 0,
    
    Henning Leutz's avatar
    Henning Leutz committed
                                position: 'relative',
    
    Henning Leutz's avatar
    Henning Leutz committed
                                top     : -50
    
    Henning Leutz's avatar
    Henning Leutz committed
                            }
                        }).inject(this.getContent());
                    }
    
                    moofx(Container).animate({
                        opacity: 0,
    
    Henning Leutz's avatar
    Henning Leutz committed
                        top    : -50
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }, {
                        duration: 200,
                        callback: function () {
    
                            this.$unloadCategory();
    
    Henning Leutz's avatar
    Henning Leutz committed
                            Container.set('html', '');
    
                            resolve(Container);
                        }.bind(this)
                    });
                }.bind(this));
            },
    
            /**
             * Open the current category
             *
             * @returns {Promise}
             */
            $openCategory: function () {
                var self = this;
    
                return new Promise(function (resolve) {
                    var Container = self.getContent().getElement('.container');
    
                    if (!Container) {
                        resolve();
                        return;
                    }
    
                    moofx(Container).animate({
                        opacity: 1,
    
    Henning Leutz's avatar
    Henning Leutz committed
                        top    : 0
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }, {
                        duration: 200,
                        callback: resolve
                    });
                });
    
            /**
             * Unload the category and reserve the data
    
    Henning Leutz's avatar
    Henning Leutz committed
             *
             * @param {Boolean} destroyList - destroy the article list, default = true
    
    Henning Leutz's avatar
    Henning Leutz committed
            $unloadCategory: function (destroyList) {
    
                var Container = this.getContent().getElement('.container');
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                destroyList = typeof destroyList === 'undefined' ? true : destroyList;
    
    
                if (this.$ArticleList) {
                    this.setAttribute('articles', this.$ArticleList.save());
                    this.$serializedList = this.$ArticleList.serialize();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    if (destroyList) {
                        this.$ArticleList.destroy();
                        this.$ArticleList = null;
                    }
    
                }
    
                var Form = Container.getElement('form');
    
                if (!Form) {
                    return;
                }
    
                var formData = QUIFormUtils.getFormData(Form);
                var data     = this.getAttribute('data') || {};
    
                // timefields
                if ("date_date" in formData &&
                    "date_time" in formData) {
                    this.setAttribute(
                        'date',
                        formData.date_date + ' ' + formData.date_time
                    );
                }
    
    
                ['time_for_payment', 'project_name', 'payment_method'].each(function (entry) {
    
                    if (!formData.hasOwnProperty(entry)) {
                        return;
                    }
    
                    this.setAttribute(entry, formData[entry]);
                    delete formData[entry];
                }.bind(this));
    
                this.setAttribute('data', Object.merge(data, formData));
            },
    
    
            /**
             * Event Handling
             */
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * event: on create
             */
            $onCreate: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var self = this;
    
                this.$AddProduct = new QUIButtonMultiple({
                    textimage: 'fa fa-plus',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text     : QUILocale.get(lg, 'erp.panel.temporary.invoice.buttonAdd'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events   : {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        onClick: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            if (self.$ArticleList) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                                self.openProductSearch();
                            }
                        }
                    }
                });
    
                this.$AddProduct.hide();
    
                this.$AddProduct.appendChild({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text  : QUILocale.get(lg, 'erp.panel.temporary.invoice.buttonAdd.custom'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            if (self.$ArticleList) {
                                self.$ArticleList.insertNewProduct();
    
    Henning Leutz's avatar
    Henning Leutz committed
                            }
                        }
                    }
                });
    
                this.$AddProduct.appendChild({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text  : QUILocale.get(lg, 'erp.panel.temporary.invoice.buttonAdd.text'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            if (self.$ArticleList) {
                                self.$ArticleList.addArticle(new TextArticle());
    
    Henning Leutz's avatar
    Henning Leutz committed
                            }
                        }
                    }
                });
    
                this.$AddSeparator = new QUISeparator();
    
                // buttons
                this.addButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    name     : 'save',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text     : QUILocale.get('quiqqer/system', 'save'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    textimage: 'fa fa-save',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events   : {
                        onClick: this.save
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }
                });
    
                this.addButton(this.$AddSeparator);
                this.addButton(this.$AddProduct);
    
    
                this.addButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    name  : 'delete',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-trash',
    
                    title : QUILocale.get(lg, 'erp.panel.temporary.invoice.deleteButton.title'),
    
                    styles: {
                        'float': 'right'
                    },
                    events: {
                        onClick: this.$clickDelete
                    }
                });
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                // categories
    
                this.addCategory({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    name  : 'data',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-info',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text  : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.data'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                        onClick: this.openData
    
    Henning Leutz's avatar
    Henning Leutz committed
                    name  : 'articles',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-list',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text  : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.pos'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                        onClick: this.openArticles
    
                this.addCategory({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    name  : 'verification',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-check',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text  : QUILocale.get(lg, 'erp.panel.temporary.invoice.category.review'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                        onClick: this.openVerification
    
    Henning Leutz's avatar
    Henning Leutz committed
            },
    
            /**
             * event: on inject
             */
            $onInject: function () {
                this.Loader.show();
    
                if (!this.getAttribute('invoiceId')) {
                    this.destroy();
                    return;
                }
    
    
                Invoices.getTemporaryInvoice(this.getAttribute('invoiceId')).then(function (data) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    this.setAttributes(data);
    
    
                    if (data.articles.articles.length) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        this.$serializedList = {
    
                            articles: data.articles.articles
    
                    this.refresh();
    
    Henning Leutz's avatar
    Henning Leutz committed
                    this.getCategoryBar().firstChild().click();
    
    Henning Leutz's avatar
    Henning Leutz committed
                    this.Loader.hide();
    
                }.bind(this)).catch(function (Exception) {
                    QUI.getMessageHandler().then(function (MH) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        console.error(Exception);
    
    Henning Leutz's avatar
    Henning Leutz committed
                        MH.addError(Exception.getMessage());
                    });
    
                    this.destroy();
                }.bind(this));
    
            /**
             * event: on panel destroy
             */
            $onDestroy: function () {
                Invoices.removeEvents({
                    onDeleteInvoice: this.$onDeleteInvoice
                });
            },
    
            /**
             * opens the delete dialog
             */
            $clickDelete: function () {
                var self = this;
    
                new QUIConfirm({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title      : QUILocale.get(lg, 'dialog.ti.delete.title'),
                    text       : QUILocale.get(lg, 'dialog.ti.delete.text'),
    
                    information: QUILocale.get(lg, 'dialog.ti.delete.information', {
                        id: this.getAttribute('invoiceId')
                    }),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon       : 'fa fa-trash',
                    texticon   : 'fa fa-trash',
                    maxHeight  : 400,
                    maxWidth   : 600,
                    autoclose  : false,
                    ok_button  : {
                        text     : QUILocale.get('quiqqer/system', 'delete'),
    
                        textimage: 'fa fa-trash'
                    },
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events     : {
    
                        onSubmit: function (Win) {
                            Win.Loader.show();
    
                            Invoices.deleteInvoice(self.getAttribute('invoiceId')).then(function () {
                                Win.close();
                            }).then(function () {
                                Win.Loader.show();
                            });
                        }
                    }
                }).open();
            },
    
            /**
             * event : on invoice deletion
             */
            $onDeleteInvoice: function () {
                this.destroy();