From 907d08d9e544e60fe09f41f70bd08554f176e2fb Mon Sep 17 00:00:00 2001
From: Henning <leutz@pcsg.de>
Date: Fri, 7 Mar 2025 07:44:24 +0100
Subject: [PATCH] feat: article and article list -> new flag, not calculations

The calculation of the article can be deactivated and the calculation values can be transferred directly.
Is required for the electronic invoice.
---
 bin/backend/controls/articles/Article.js      | 257 +++++++++++-------
 bin/backend/controls/articles/ArticleList.js  | 182 +++++++++----
 .../controls/articles/ArticleSummary.js       |  54 ++--
 3 files changed, 306 insertions(+), 187 deletions(-)

diff --git a/bin/backend/controls/articles/Article.js b/bin/backend/controls/articles/Article.js
index 48c385d..8c36c7a 100644
--- a/bin/backend/controls/articles/Article.js
+++ b/bin/backend/controls/articles/Article.js
@@ -43,7 +43,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
     'text!package/quiqqer/erp/bin/backend/controls/articles/Article.html',
     'css!package/quiqqer/erp/bin/backend/controls/articles/Article.css'
 
-], function(
+], function (
     QUI,
     QUIControl,
     QUIButton,
@@ -122,21 +122,30 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
             User: false,        // special user object (see this.addUser)
 
-            deletable: true,   // show "delete" button
+            deletable: true,     // show "delete" button
             replaceable: true,   // show "replace" button
             calcByList: true     // calculate article prices by the associated ArticleList
         },
 
-        initialize: function(options) {
+        initialize: function (options) {
             this.setAttributes(this.__proto__.options); // set the default values
             this.parent(options);
 
             this.$user = {};
+            this.$calculate = true; // calculation is running or not
             this.$calculations = {};
             this.$bruttoCalc = {};
 
             if (typeof options !== 'undefined' && typeof options.calculated !== 'undefined') {
                 this.$calculations = options.calculated;
+
+                if (typeof this.$calculations.bruttoCalculated !== 'undefined') {
+                    this.$bruttoCalc = this.$calculations.bruttoCalculated;
+                }
+            }
+
+            if (typeof options !== 'undefined' && typeof options.calculate !== 'undefined') {
+                this.$calculate = options.calculate;
             }
 
             if (typeof this.$calculations.nettoPriceNotRounded !== 'undefined' && this.$calculations.nettoPriceNotRounded) {
@@ -178,7 +187,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @returns {HTMLDivElement}
          */
-        create: function() {
+        create: function () {
             const self = this;
 
             this.$Elm = this.parent();
@@ -226,7 +235,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
             if (showSelectCheckbox) {
                 this.$SelectCheckbox = this.$Elm.getElement('.quiqqer-erp-backend-erpArticle-selectbox > input');
-                this.$SelectCheckbox.addEvent('change', function(event) {
+                this.$SelectCheckbox.addEvent('change', function (event) {
                     if (event.target.checked) {
                         self.select();
                     } else {
@@ -275,7 +284,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 this.$VAT.addEvent('click', this.$onEditVat);
 
                 // Special VAT cell events
-                this.$VAT.addEvent('keydown', function(event) {
+                this.$VAT.addEvent('keydown', function (event) {
                     if (event.key === 'tab') {
                         this.$editNext(event);
                         return;
@@ -286,7 +295,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     }
                 }.bind(this));
 
-                this.$VAT.addEvent('blur', function(event) {
+                this.$VAT.addEvent('blur', function (event) {
                     if (event.key === 'tab') {
                         this.$editNext(event);
                     }
@@ -305,7 +314,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 this.$QuantityUnit.addEvent('click', this.$onEditQuantityUnit);
 
                 // Special quantity unit cell events
-                this.$QuantityUnit.addEvent('keydown', function(event) {
+                this.$QuantityUnit.addEvent('keydown', function (event) {
                     if (event.key === 'tab') {
                         this.$editNext(event);
                         return;
@@ -316,7 +325,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     }
                 }.bind(this));
 
-                this.$QuantityUnit.addEvent('blur', function(event) {
+                this.$QuantityUnit.addEvent('blur', function (event) {
                     if (event.key === 'tab') {
                         this.$editNext(event);
                     }
@@ -411,7 +420,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             this.setQuantityUnit(this.getAttribute('quantityUnit'));
 
             if (!this.getAttribute('quantityUnit')) {
-                this.$loadDefaultQuantityUnit().catch(function(err) {
+                this.$loadDefaultQuantityUnit().catch(function (err) {
                     console.error(err);
                 });
             }
@@ -438,7 +447,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
             this.calc();
 
-            this.addEvent('onEditKeyDown', function(me, event) {
+            this.addEvent('onEditKeyDown', function (me, event) {
                 if (event.key === 'tab') {
                     this.$editNext(event);
                 }
@@ -454,7 +463,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @fires onRemove [self]
          * @fires onDrop [self]
          */
-        remove: function() {
+        remove: function () {
             this.fireEvent('delete', [this]);
             this.fireEvent('remove', [this]);
             this.fireEvent('drop', [this]);
@@ -465,7 +474,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * Trigger the replace event
          */
-        $onReplaceClick: function() {
+        $onReplaceClick: function () {
             this.fireEvent('replace', [this]);
         },
 
@@ -474,7 +483,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {Object} user
          */
-        setUser: function(user) {
+        setUser: function (user) {
             this.$user = user;
         },
 
@@ -483,7 +492,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @return {Promise}
          */
-        calc: function() {
+        calc: function () {
             if (!this.$created) {
                 return Promise.resolve();
             }
@@ -503,7 +512,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 const price = Formatter.format(product.calculated.nettoSubSum);
                 const total = Formatter.format(product.calculated.nettoSum);
 
-                const setElement = function(Node, text) {
+                const setElement = function (Node, text) {
                     const isInEditMode = Node.getElement('input');
 
                     if (isInEditMode) {
@@ -553,7 +562,10 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 }
 
                 this.hideLoader();
-                this.fireEvent('calc', [this]);
+
+                if (!this.$calculate) {
+                    this.fireEvent('calc', [this]);
+                }
 
                 return product;
             });
@@ -564,11 +576,29 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @return {Promise}
          */
-        $calc: function() {
+        $calc: function () {
+            if (!this.$calculate) {
+                return Promise.resolve({
+                    vat: this.getAttribute('vat'),
+                    unitPrice: this.getAttribute('unitPrice'),
+
+                    id: this.getAttribute('id'),
+                    articleNo: this.getAttribute('articleNo'),
+                    description: this.getAttribute('description'),
+                    discount: this.getAttribute('discount'),
+                    position: this.getAttribute('position'),
+                    price: this.getAttribute('price'),
+                    quantity: this.getAttribute('quantity'),
+                    quantityUnit: this.getAttribute('quantityUnit'),
+                    title: this.getAttribute('title'),
+
+                    calculated: this.$calculations
+                });
+            }
+
             let Calc;
 
-            const self = this,
-                attr = self.getAttributes(),
+            const attr = this.getAttributes(),
                 pos = parseInt(attr.position);
 
             let calcByList = false;
@@ -577,41 +607,47 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 Calc = this.getAttribute('List').$executeCalculation();
                 calcByList = true;
             } else {
-                Calc = new Promise(function(resolve, reject) {
+                Calc = new Promise((resolve, reject) => {
                     QUIAjax.get('package_quiqqer_erp_ajax_products_calc', resolve, {
                         'package': 'quiqqer/erp',
                         onError: reject,
                         articles: JSON.encode({
                             articles: [attr]
                         }),
-                        user: JSON.encode(self.$user),
-                        currency: self.getAttribute('currency')
+                        user: JSON.encode(this.$user),
+                        currency: this.getAttribute('currency')
                     });
                 });
             }
 
-            return Calc.then(function(result) {
+            return Calc.then((result) => {
                 let articleList;
                 let brutto;
-                let articles = result.articles;
+                let articles = [];
 
-                if (!calcByList) {
-                    articleList = articles[0];
-                    brutto = result.brutto.articles[0];
+                if (!result || typeof result.articles === 'undefined') {
+                    brutto = !this.getAttribute('List').$Switch.getStatus();
                 } else {
-                    articleList = articles.filter(function(article) {
-                        return parseInt(article.position) === pos;
-                    })[0];
+                    articles = result.articles;
 
-                    brutto = result.brutto.articles.filter(function(article) {
-                        return parseInt(article.position) === pos;
-                    })[0];
+                    if (!calcByList) {
+                        articleList = articles[0];
+                        brutto = result.brutto.articles[0];
+                    } else {
+                        articleList = articles.filter(function (article) {
+                            return parseInt(article.position) === pos;
+                        })[0];
+
+                        brutto = result.brutto.articles.filter(function (article) {
+                            return parseInt(article.position) === pos;
+                        })[0];
+                    }
                 }
 
-                self.$calculations = articleList;
-                self.$bruttoCalc = brutto;
-                self.fireEvent('calc', [
-                    self,
+                this.$calculations = articleList;
+                this.$bruttoCalc = brutto;
+                this.fireEvent('calc', [
+                    this,
                     result,
                     articleList
                 ]);
@@ -625,7 +661,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @returns {{}|*}
          */
-        getCalculations: function() {
+        getCalculations: function () {
             if (!this.$calculations) {
                 return {};
             }
@@ -633,10 +669,27 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             return this.$calculations.calculated;
         },
 
+        setCalculations: function (calculations) {
+            this.$calculations = calculations;
+        },
+
+        disableCalculations: function () {
+            this.$calculate = false;
+            this.$calculations.calculate = 0;
+        },
+
+        enableCalculations: function () {
+            this.$calculate = true;
+
+            if (typeof this.$calculations.calculate !== 'undefined') {
+                delete this.$calculations.calculate;
+            }
+        },
+
         /**
          * @returns {*}
          */
-        getBruttoCalc: function() {
+        getBruttoCalc: function () {
             return this.$bruttoCalc;
         },
 
@@ -645,7 +698,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @return {Promise|*}
          */
-        getCurrencyFormatter: function() {
+        getCurrencyFormatter: function () {
             if (this.$Formatter) {
                 return Promise.resolve(this.$Formatter);
             }
@@ -687,7 +740,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {String} currency
          */
-        setCurrency: function(currency) {
+        setCurrency: function (currency) {
             if (this.getAttribute('currency') === currency) {
                 return;
             }
@@ -701,7 +754,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {String} title
          */
-        setTitle: function(title) {
+        setTitle: function (title) {
             this.setAttribute('title', title);
             this.$Title.set('html', title);
 
@@ -717,7 +770,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {String} description
          */
-        setDescription: function(description) {
+        setDescription: function (description) {
             this.setAttribute('description', description);
             this.$Description.set('html', description);
 
@@ -739,7 +792,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {String} articleNo
          */
-        setArticleNo: function(articleNo) {
+        setArticleNo: function (articleNo) {
             this.setAttribute('articleNo', articleNo);
             this.$ArticleNo.set('html', articleNo);
 
@@ -755,7 +808,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {Number} pos
          */
-        setPosition: function(pos) {
+        setPosition: function (pos) {
             this.setAttribute('position', parseInt(pos));
 
             if (this.$Position) {
@@ -771,7 +824,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param {Number} quantity
          * @return {Promise}
          */
-        setQuantity: function(quantity) {
+        setQuantity: function (quantity) {
             this.setAttribute('quantity', parseFloat(quantity));
 
             if (this.$Quantity) {
@@ -788,7 +841,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {Object} quantityUnit - {id:'piece', title:''}
          */
-        setQuantityUnit: function(quantityUnit) {
+        setQuantityUnit: function (quantityUnit) {
             if (typeof quantityUnit.id === 'undefined') {
                 return;
             }
@@ -811,7 +864,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param {Number} price
          * @return {Promise}
          */
-        setUnitPrice: function(price) {
+        setUnitPrice: function (price) {
             this.setAttribute('unitPrice', parseFloat(price));
 
             if (this.$UnitPrice) {
@@ -829,7 +882,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param {Number|String} vat
          * @return {Promise}
          */
-        setVat: function(vat) {
+        setVat: function (vat) {
             if (vat === '-' || vat === '') {
                 this.setAttribute('vat', '');
                 this.$VAT.set('html', '-');
@@ -862,7 +915,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param {String|Number} discount - 100 = 100€, 100€ = 100€ or 10% =  calculation
          */
-        setDiscount: function(discount) {
+        setDiscount: function (discount) {
             const self = this;
             let value = '',
                 type = '';
@@ -887,7 +940,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 }
             }
 
-            return Prom.then(function(discountResult) {
+            return Prom.then(function (discountResult) {
                 if (discountResult && type === '%') {
                     discountResult = (discountResult).toString().replace(/\%/g, '') + type;
                     value = discountResult;
@@ -909,21 +962,21 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * Show the loader
          */
-        showLoader: function() {
+        showLoader: function () {
             this.$Loader.setStyle('display', null);
         },
 
         /**
          * Hide the loader
          */
-        hideLoader: function() {
+        hideLoader: function () {
             this.$Loader.setStyle('display', 'none');
         },
 
         /**
          * select the article
          */
-        select: function() {
+        select: function () {
             if (!this.$Elm) {
                 return;
             }
@@ -946,7 +999,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * unselect the article
          */
-        unselect: function() {
+        unselect: function () {
             if (!this.$Elm) {
                 return;
             }
@@ -965,7 +1018,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * @return {boolean}
          */
-        isSelected: function() {
+        isSelected: function () {
             return this.$isSelected;
         },
 
@@ -976,7 +1029,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * Opens the delete dialog
          */
-        openDeleteDialog: function() {
+        openDeleteDialog: function () {
             new QUIConfirm({
                 icon: 'fa fa-trash',
                 texticon: 'fa fa-trash',
@@ -998,11 +1051,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event : on title edit
          */
-        $onEditTitle: function() {
+        $onEditTitle: function () {
             this.$createEditField(
                 this.$Title,
                 this.getAttribute('title')
-            ).then(function(value) {
+            ).then(function (value) {
                 this.setTitle(value);
             }.bind(this));
         },
@@ -1010,7 +1063,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event : on description edit
          */
-        $onEditDescription: function() {
+        $onEditDescription: function () {
             if (this.$Editor) {
                 return;
             }
@@ -1026,7 +1079,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 maxHeight: 600,
                 maxWidth: 800,
                 events: {
-                    onOpen: function(Win) {
+                    onOpen: function (Win) {
                         Win.Loader.show();
 
                         const Content = Win.getContent();
@@ -1050,7 +1103,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                         Title.set('placeholder', QUILocale.get('quiqqer/system', 'title'));
                         Title.focus();
 
-                        Editors.getEditor(null).then(function(Editor) {
+                        Editors.getEditor(null).then(function (Editor) {
                             self.$Editor = Editor;
 
                             // minimal toolbar
@@ -1107,7 +1160,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                                 ]
                             });
 
-                            self.$Editor.addEvent('onLoaded', function() {
+                            self.$Editor.addEvent('onLoaded', function () {
                                 self.$Editor.switchToWYSIWYG();
                                 self.$Editor.showToolbar();
                                 self.$Editor.setContent(self.getAttribute('description'));
@@ -1119,14 +1172,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                             self.$Editor.setHeight(340);
                         });
 
-                        Title.addEvent('keyup', function(event) {
+                        Title.addEvent('keyup', function (event) {
                             if (event.key === 'enter') {
                                 Win.submit();
                             }
                         });
                     },
 
-                    onSubmit: function(Win) {
+                    onSubmit: function (Win) {
                         const description = self.$Editor.getContent();
 
                         Win.Loader.show();
@@ -1145,7 +1198,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                         });
                     },
 
-                    onClose: function() {
+                    onClose: function () {
                         self.$Editor.destroy();
                         self.$Editor = null;
                     }
@@ -1156,11 +1209,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event: on Article-Number edit
          */
-        $onEditArticleNo: function() {
+        $onEditArticleNo: function () {
             this.$createEditField(
                 this.$ArticleNo,
                 this.getAttribute('articleNo')
-            ).then(function(value) {
+            ).then(function (value) {
                 this.setArticleNo(value);
             }.bind(this));
         },
@@ -1168,12 +1221,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event : on quantity edit
          */
-        $onEditQuantity: function() {
+        $onEditQuantity: function () {
             this.$createEditField(
                 this.$Quantity,
                 this.getAttribute('quantity'),
                 'number'
-            ).then(function(value) {
+            ).then(function (value) {
                 this.setQuantity(value);
             }.bind(this));
         },
@@ -1181,15 +1234,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * Edit quantity unit
          */
-        $onEditQuantityUnit: function() {
+        $onEditQuantityUnit: function () {
             const self = this;
 
             require([
                 'package/quiqqer/erp/bin/backend/controls/articles/product/QuantityUnitWindow'
-            ], function(QuantityUnitWindow) {
+            ], function (QuantityUnitWindow) {
                 new QuantityUnitWindow({
                     events: {
-                        onSubmit: function(Win, value, title) {
+                        onSubmit: function (Win, value, title) {
                             self.setQuantityUnit({
                                 id: value,
                                 title: title
@@ -1209,14 +1262,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event : on quantity edit
          */
-        $onEditUnitPriceQuantity: function() {
+        $onEditUnitPriceQuantity: function () {
             const self = this;
 
             this.$createEditField(
                 this.$UnitPrice,
                 this.getAttribute('unitPrice'),
                 'number'
-            ).then(function(value) {
+            ).then(function (value) {
                 self.setUnitPrice(value);
             });
         },
@@ -1224,16 +1277,16 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event : on brutto price edit
          */
-        $onEditBruttoPrice: function() {
+        $onEditBruttoPrice: function () {
             const self = this;
 
             this.$createEditField(
                 this.$UnitPriceBrutto,
                 this.$UnitPriceBrutto.get('data-value'),
                 'number'
-            ).then(function(value) {
+            ).then(function (value) {
                 return self.getNettoPrice(value, false);
-            }).then(function(value) {
+            }).then(function (value) {
                 self.setUnitPrice(value);
             });
         },
@@ -1241,15 +1294,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event: on edit VAT
          */
-        $onEditVat: function() {
+        $onEditVat: function () {
             const self = this;
 
             require([
                 'package/quiqqer/tax/bin/controls/taxList/AvailableTaxListWindow'
-            ], function(AvailableTaxListWindow) {
+            ], function (AvailableTaxListWindow) {
                 new AvailableTaxListWindow({
                     events: {
-                        onSubmit: function(Win, value) {
+                        onSubmit: function (Win, value) {
                             self.setVat(value);
 
                             QUIElements.simulateEvent(
@@ -1265,7 +1318,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event: on edit discount
          */
-        $onEditDiscount: function() {
+        $onEditDiscount: function () {
             let discount = this.getAttribute('discount');
 
             if (discount === '-' || discount === false || !discount) {
@@ -1279,7 +1332,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             this.$createEditField(
                 this.$Discount,
                 discount
-            ).then(function(value) {
+            ).then(function (value) {
                 this.setDiscount(value);
             }.bind(this));
         },
@@ -1287,7 +1340,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * event: on brutto edit discount
          */
-        $onEditBruttoDiscount: function() {
+        $onEditBruttoDiscount: function () {
             const self = this;
             let discount = this.$DiscountBrutto.get('data-value');
 
@@ -1299,7 +1352,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 }
             }
 
-            this.$createEditField(this.$DiscountBrutto, discount).then(function(value) {
+            this.$createEditField(this.$DiscountBrutto, discount).then(function (value) {
                 if (value.match('%')) {
                     return self.setDiscount(value);
                 }
@@ -1308,7 +1361,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     return self.setDiscount(0);
                 }
 
-                return self.getNettoPrice(value).then(function(nettoValue) {
+                return self.getNettoPrice(value).then(function (nettoValue) {
                     self.setDiscount(nettoValue);
                 });
             });
@@ -1317,7 +1370,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         /**
          * Edit custom fields
          */
-        $onCustomFieldClick: function() {
+        $onCustomFieldClick: function () {
             this.fireEvent('editCustomFields', [this]);
         },
 
@@ -1330,12 +1383,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param {Object} [inputAttributes] - input attributes
          * @returns {Promise}
          */
-        $createEditField: function(Container, value, type, inputAttributes) {
+        $createEditField: function (Container, value, type, inputAttributes) {
             const self = this;
 
             type = type || 'text';
 
-            return new Promise(function(resolve) {
+            return new Promise(function (resolve) {
                 const Edit = new Element('input', {
                     type: type,
                     value: value,
@@ -1371,17 +1424,17 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 Edit.focus();
                 Edit.select();
 
-                const onFinish = function() {
+                const onFinish = function () {
                     Edit.destroy();
                     resolve(Edit.value);
                 };
 
                 Edit.addEvents({
-                    click: function(event) {
+                    click: function (event) {
                         event.stop();
                     },
 
-                    keydown: function(event) {
+                    keydown: function (event) {
                         self.fireEvent('editKeyDown', [
                             self,
                             event
@@ -1407,7 +1460,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @param event
          */
-        $editNext: function(event) {
+        $editNext: function (event) {
             let Cell = event.target;
 
             if (!Cell.hasClass('cell')) {
@@ -1483,11 +1536,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          *
          * @return {Promise}
          */
-        $loadDefaultQuantityUnit: function() {
+        $loadDefaultQuantityUnit: function () {
             const self = this;
 
-            return new Promise(function(resolve) {
-                QUIAjax.get('package_quiqqer_erp_ajax_products_getQuantityUnitList', function(unitList) {
+            return new Promise(function (resolve) {
+                QUIAjax.get('package_quiqqer_erp_ajax_products_getQuantityUnitList', function (unitList) {
                     let i, title, entry;
                     let current = QUILocale.getCurrent();
 
@@ -1529,10 +1582,10 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param formatted
          * @return {Promise}
          */
-        getNettoPrice: function(value, formatted) {
+        getNettoPrice: function (value, formatted) {
             const self = this;
 
-            return new Promise(function(resolve) {
+            return new Promise(function (resolve) {
                 QUIAjax.get('package_quiqqer_erp_ajax_calcNettoPrice', resolve, {
                     'package': 'quiqqer/erp',
                     price: value,
@@ -1549,10 +1602,10 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param formatted
          * @return {Promise}
          */
-        getBruttoPrice: function(value, formatted) {
+        getBruttoPrice: function (value, formatted) {
             const self = this;
 
-            return new Promise(function(resolve) {
+            return new Promise(function (resolve) {
                 QUIAjax.get('package_quiqqer_erp_ajax_calcBruttoPrice', resolve, {
                     'package': 'quiqqer/erp',
                     price: value,
@@ -1568,7 +1621,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          * @param {String} description
          * @return {Promise}
          */
-        $sanitizeArticleDescription: function(description) {
+        $sanitizeArticleDescription: function (description) {
             return new Promise((resolve, reject) => {
                 QUIAjax.get('package_quiqqer_erp_ajax_utils_sanitizeArticleDescription', resolve, {
                     'package': 'quiqqer/erp',
diff --git a/bin/backend/controls/articles/ArticleList.js b/bin/backend/controls/articles/ArticleList.js
index b9229a0..dd47118 100644
--- a/bin/backend/controls/articles/ArticleList.js
+++ b/bin/backend/controls/articles/ArticleList.js
@@ -27,8 +27,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
     'text!package/quiqqer/erp/bin/backend/controls/articles/ArticleList.sortablePlaceholder.html',
     'css!package/quiqqer/erp/bin/backend/controls/articles/ArticleList.css'
 
-], function(QUI, QUIControl, QUISwitch, QUILoader, Mustache,
-    QUIAjax, QUILocale, AddProductWindow, Article, Sortables, template, templateSortablePlaceholder
+], function (QUI, QUIControl, QUISwitch, QUILoader, Mustache,
+             QUIAjax, QUILocale, AddProductWindow, Article, Sortables, template, templateSortablePlaceholder
 ) {
     'use strict';
 
@@ -58,7 +58,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             nettoinput: true
         },
 
-        initialize: function(options) {
+        initialize: function (options) {
             this.parent(options);
 
             this.$articles = [];
@@ -68,6 +68,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             this.$calculationTimer = null;
             this.$isIncalculationFrame = false;
 
+            this.$calculate = true; // calculation is running or not
+
             this.$calculations = {
                 currencyData: {},
                 isEuVat: 0,
@@ -95,7 +97,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @returns {HTMLDivElement}
          */
-        create: function() {
+        create: function () {
             const self = this;
 
             this.$Elm = this.parent();
@@ -131,7 +133,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 switchTextOff: 'brutto',
                 switchTextOffIcon: false,
                 events: {
-                    onChange: function() {
+                    onChange: function () {
                         self.$Loader.show();
                         self.setAttribute('nettoinput', !!self.$Switch.getStatus());
                         self.$refreshNettoBruttoDisplay();
@@ -144,7 +146,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 this.$Elm.getElement('.quiqqer-erp-backend-erpItems-container-switch-btn')
             );
 
-            SwitchDesc.addEvent('click', function() {
+            SwitchDesc.addEvent('click', function () {
                 self.$Switch.toggle();
             });
 
@@ -156,8 +158,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         /**
          * event: on inject
          */
-        $onInject: function() {
-            (function() {
+        $onInject: function () {
+            (function () {
                 if (this.$articles.length) {
                     this.$articles[0].select();
                 }
@@ -169,8 +171,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @returns {Object}
          */
-        serialize: function() {
-            const articles = this.$getArticles().map(function(ArticleInstance) {
+        serialize: function () {
+            const articles = this.$getArticles().map(function (ArticleInstance) {
                 const attr = ArticleInstance.getAttributes();
                 attr.control = typeOf(ArticleInstance);
 
@@ -183,21 +185,31 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             };
         },
 
+        getArticles: function () {
+            return this.$getArticles();
+        },
+
         /**
          * Get internal article list
          *
          * @return {[]}
          */
-        $getArticles: function() {
+        $getArticles: function () {
             return this.$articles;
         },
 
+        clear: function () {
+            this.$articles = [];
+            this.$priceFactors = [];
+            this.$Container.innerHTML = '';
+        },
+
         /**
          * Return the articles count
          *
          * @returns {number}
          */
-        count: function() {
+        count: function () {
             return this.$articles.length;
         },
 
@@ -210,7 +222,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          * @param {Object|String} list
          * @return {Promise}
          */
-        unserialize: function(list) {
+        unserialize: function (list) {
             const self = this;
             let data = {};
 
@@ -251,7 +263,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 this.$Container.set('html', '');
             }
 
-            const controls = data.articles.map(function(ArticleInstance) {
+            const controls = data.articles.map(function (ArticleInstance) {
                 if (typeof ArticleInstance.control !== 'undefined' && ArticleInstance.control !== '') {
                     return ArticleInstance.control;
                 }
@@ -259,7 +271,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 return 'package/quiqqer/erp/bin/backend/controls/articles/Article';
             }).unique();
 
-            require(controls, function() { // dont use () => {
+            require(controls, function () { // dont use () => {
                 let i, len, article, index;
 
                 for (i = 0, len = data.articles.length; i < len; i++) {
@@ -294,10 +306,10 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param {Object} user
          */
-        setUser: function(user) {
+        setUser: function (user) {
             this.$user = user;
 
-            this.$articles.each(function(ArticleInstance) {
+            this.$articles.each(function (ArticleInstance) {
                 ArticleInstance.setUser(this.$user);
             }.bind(this));
         },
@@ -307,7 +319,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @return {Object|*|{}}
          */
-        getUser: function() {
+        getUser: function () {
             return this.$user;
         },
 
@@ -317,7 +329,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param {Object} Child
          */
-        addArticle: function(Child) {
+        addArticle: function (Child) {
             if (typeof Child !== 'object') {
                 return;
             }
@@ -330,6 +342,13 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 Child.setCurrency(this.getAttribute('currency'));
             }
 
+            if (!this.$calculate) {
+                console.log('add -> disableCalculation');
+                if (typeof Child.disableCalculation === 'function') Child.disableCalculation();
+            } else {
+                console.log('add -> enableCalculation');
+                if (typeof Child.enableCalculation === 'function') Child.enableCalculation();
+            }
 
             this.$articles.push(Child);
 
@@ -359,7 +378,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          * @param {Object} NewArticle
          * @param {Number} position
          */
-        replaceArticle: function(NewArticle, position) {
+        replaceArticle: function (NewArticle, position) {
             if (typeof NewArticle !== 'object') {
                 return;
             }
@@ -368,7 +387,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 return;
             }
 
-            const Wanted = this.$articles.find(function(ArticleInstance) {
+            const Wanted = this.$articles.find(function (ArticleInstance) {
                 return ArticleInstance.getAttribute('position') === position;
             });
 
@@ -389,7 +408,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         /**
          * Insert a new empty product
          */
-        insertNewProduct: function() {
+        insertNewProduct: function () {
             this.addArticle(new Article());
         },
 
@@ -398,8 +417,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @return {Array}
          */
-        save: function() {
-            return this.$articles.map(function(ArticleInstance) {
+        save: function () {
+            return this.$articles.map(function (ArticleInstance) {
                 return Object.merge(ArticleInstance.getAttributes(), {
                     control: ArticleInstance.getType()
                 });
@@ -409,7 +428,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         /**
          * Calculate the list
          */
-        $calc: function() {
+        $calc: function () {
+            if (!this.$calculate) {
+                return Promise.resolve();
+            }
+
             return new Promise((resolve) => {
                 if (this.$calculationTimer) {
                     clearTimeout(this.$calculationTimer);
@@ -418,7 +441,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
                 const self = this;
 
-                this.$calculationTimer = (function() {
+                this.$calculationTimer = (function () {
                     self.$executeCalculation().then(resolve);
                 }).delay(500);
             });
@@ -433,7 +456,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @returns {Promise}
          */
-        $executeCalculation: function() {
+        $executeCalculation: function () {
+            if (!this.$calculate) {
+                return Promise.resolve();
+            }
+
             const self = this;
 
             if (this.$isIncalculationFrame) {
@@ -486,7 +513,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     user: JSON.encode(this.$user),
                     currency: this.getAttribute('currency'),
                     nettoInput: this.getAttribute('nettoinput') ? 1 : 0,
-                    onError: function(err) {
+                    onError: function (err) {
                         console.error(err);
                         reject();
                     }
@@ -499,27 +526,64 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @return {Array}
          */
-        $getArticleDataForCalculation: function() {
-            return this.$articles.map(function(ArticleInstance) {
+        $getArticleDataForCalculation: function () {
+            return this.$articles.map(function (ArticleInstance) {
                 return ArticleInstance.getAttributes();
             });
         },
 
+        /**
+         * @deprecated use getCalculations()
+         */
+        getCalculation: function () {
+            return this.getCalculations();
+        },
+
         /**
          * Return the current calculations
          *
          * @returns {{currencyData: {}, isEuVat: number, isNetto: boolean, nettoSubSum: number, nettoSum: number, subSum: number, sum: number, vatArray: Array, vatText: Array}|*}
          */
-        getCalculation: function() {
+        getCalculations: function () {
             return this.$calculations;
         },
 
+        setCalculations: function (calculations) {
+            this.$calculations = calculations;
+
+            this.fireEvent('calc', [
+                this,
+                this.$calculations
+            ]);
+        },
+
+        disableCalculations: function () {
+            this.$calculate = false;
+            this.$calculations.calculate = 0;
+
+            this.$articles.forEach((Article) => {
+                Article.disableCalculations();
+            });
+        },
+
+        enableCalculations: function () {
+            this.$calculate = true;
+
+            if (typeof this.$calculations.calculate !== 'undefined') {
+                delete this.$calculations.calculate;
+            }
+
+            this.$articles.forEach((Article) => {
+                Article.disableCalculations();
+            });
+        },
+
         /**
          * Return the first / main vat of the list
          *
          * @returns {number}
          */
-        getVat: function() {
+        getVat: function () {
             const calculations = this.getCalculation();
             const articles = calculations.articles;
             const calc = calculations.calculations;
@@ -543,7 +607,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @return {[]}
          */
-        getPriceFactors: function() {
+        getPriceFactors: function () {
             return this.$priceFactors;
         },
 
@@ -552,7 +616,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param no
          */
-        removePriceFactor: function(no) {
+        removePriceFactor: function (no) {
             let newList = [];
 
             for (let i = 0, len = this.$priceFactors.length; i < len; i++) {
@@ -585,7 +649,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          * }
          * @param priceFactor
          */
-        addPriceFactor: function(priceFactor) {
+        addPriceFactor: function (priceFactor) {
             const prio = priceFactor.index;
 
             if (prio === this.$priceFactors.length) {
@@ -619,7 +683,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          * @param index
          * @param priceFactor
          */
-        editPriceFactor: function(index, priceFactor) {
+        editPriceFactor: function (index, priceFactor) {
             for (let k in priceFactor) {
                 if (priceFactor.hasOwnProperty(k)) {
                     this.$priceFactors[index][k] = priceFactor[k];
@@ -632,7 +696,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @returns {number}
          */
-        countPriceFactors: function() {
+        countPriceFactors: function () {
             return this.$priceFactors.length;
         },
 
@@ -643,7 +707,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         /**
          * Toggles the sorting
          */
-        toggleSorting: function() {
+        toggleSorting: function () {
             if (this.$sorting) {
                 this.disableSorting();
                 return;
@@ -656,13 +720,13 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          * Enables the sorting
          * Articles can be sorted by drag and drop
          */
-        enableSorting: function() {
+        enableSorting: function () {
             const self = this;
 
             const Elm = this.getElm(),
                 elements = Elm.getElements('.article');
 
-            elements.each(function(Node) {
+            elements.each(function (Node) {
                 const ArticleInstance = QUI.Controls.getById(Node.get('data-quiid'));
                 const attributes = ArticleInstance.getAttributes();
 
@@ -683,7 +747,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     transition: 'elastic:out'
                 },
 
-                clone: function(event) {
+                clone: function (event) {
                     let Target = event.target;
 
                     if (!Target.hasClass('article')) {
@@ -705,7 +769,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     });
                 },
 
-                onStart: function(element) {
+                onStart: function (element) {
                     element.addClass('quiqqer-erp-sortableClone');
 
                     self.$Container.setStyles({
@@ -715,7 +779,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     });
                 },
 
-                onComplete: function(element) {
+                onComplete: function (element) {
                     element.removeClass('quiqqer-erp-sortableClone');
 
                     self.$Container.setStyles({
@@ -735,7 +799,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          * Disables the sorting
          * Articles can not be sorted
          */
-        disableSorting: function() {
+        disableSorting: function () {
             this.$sorting = false;
 
             const self = this,
@@ -744,7 +808,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
             Elm.getElements('.quiqqer-erp-sortableClone-placeholder').destroy();
 
-            elements.each(function(Node) {
+            elements.each(function (Node) {
                 const ArticleInstance = QUI.Controls.getById(Node.get('data-quiid'));
 
                 ArticleInstance.removeEvents({
@@ -755,7 +819,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             this.$Sortables.detach();
             this.$Sortables = null;
 
-            this.$articles.sort(function(A, B) {
+            this.$articles.sort(function (A, B) {
                 return A.getAttribute('position') - B.getAttribute('position');
             });
         },
@@ -765,7 +829,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @return {boolean}
          */
-        isSortingEnabled: function() {
+        isSortingEnabled: function () {
             return this.$sorting;
         },
 
@@ -774,7 +838,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param Article
          */
-        $onArticleSetPosition: function(ArticleInstance) {
+        $onArticleSetPosition: function (ArticleInstance) {
             ArticleInstance.getElm().getElement('.quiqqer-erp-backend-erpArticlePlaceholder-pos').set(
                 'html',
                 ArticleInstance.getAttribute('position')
@@ -784,7 +848,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         /**
          * Recalculate the Position of all Articles
          */
-        $recalculatePositions: function() {
+        $recalculatePositions: function () {
             let i, len, ArticleInstance;
 
             const Elm = this.getElm(),
@@ -805,7 +869,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param {Object} ArticleInstance
          */
-        $onArticleDelete: function(ArticleInstance) {
+        $onArticleDelete: function (ArticleInstance) {
             if (this.$selectedArticle) {
                 this.$selectedArticle.unselect();
             }
@@ -830,7 +894,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
             this.$articles = articles;
 
-            this.$executeCalculation().then(function() {
+            this.$executeCalculation().then(function () {
                 if (self.$articles.length) {
                     self.$articles[0].select();
                 }
@@ -842,7 +906,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param {Object} Article
          */
-        $onArticleSelect: function(ArticleInstance) {
+        $onArticleSelect: function (ArticleInstance) {
             if (this.$selectedArticle &&
                 this.$selectedArticle !== ArticleInstance) {
                 this.$selectedArticle.unselect();
@@ -860,7 +924,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param Article
          */
-        $onArticleUnSelect: function(ArticleInstance) {
+        $onArticleUnSelect: function (ArticleInstance) {
             if (this.$selectedArticle === ArticleInstance) {
                 this.$selectedArticle = null;
                 this.fireEvent('articleUnSelect', [
@@ -875,7 +939,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param Article
          */
-        $onArticleReplace: function(ArticleInstance) {
+        $onArticleReplace: function (ArticleInstance) {
             this.fireEvent('articleReplaceClick', [
                 this,
                 ArticleInstance
@@ -887,7 +951,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @param {Object} EditArticle - package/quiqqer/erp/bin/backend/controls/articles/Article
          */
-        $onArticleEditCustomFields: function(EditArticle) {
+        $onArticleEditCustomFields: function (EditArticle) {
             const ArticleCustomFields = EditArticle.getAttribute('customFields');
             const FieldValues = {};
 
@@ -934,14 +998,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          *
          * @returns {null|Object}
          */
-        getSelectedArticle: function() {
+        getSelectedArticle: function () {
             return this.$selectedArticle;
         },
 
         /**
          * refresh the brutto / netto switch display
          */
-        $refreshNettoBruttoDisplay: function() {
+        $refreshNettoBruttoDisplay: function () {
             const SwitchDesc = this.$Elm.getElement('.quiqqer-erp-backend-erpItems-container-switch-desc');
             const Container = this.$Elm.getElement('.quiqqer-erp-backend-erpItems-container-switch');
 
@@ -982,12 +1046,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     require([
                         URL_OPT_DIR + 'quiqqer/core/bin/QUI/lib/tippy/tippy.min.js',
                         'css!' + URL_OPT_DIR + 'quiqqer/core/bin/QUI/lib/tippy/tippy.css'
-                    ], function(tippy) {
+                    ], function (tippy) {
                         tippy(Warning, {
                             animateFill: false,
                             animation: 'shift-away',
                             allowHTML: true,
-                            content: function() {
+                            content: function () {
                                 return warning.replace(/ +(?= )/g, '').replace('\n', '').trim();
                             }
                         });
diff --git a/bin/backend/controls/articles/ArticleSummary.js b/bin/backend/controls/articles/ArticleSummary.js
index f51186f..52e27f2 100644
--- a/bin/backend/controls/articles/ArticleSummary.js
+++ b/bin/backend/controls/articles/ArticleSummary.js
@@ -25,11 +25,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
     return new Class({
 
         Extends: QUIControl,
-        Type   : 'package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary',
+        Type: 'package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary',
 
         options: {
-            List    : null,
-            styles  : false,
+            List: null,
+            styles: false,
             currency: 'EUR',
 
             showPosSummary: true // show summary for selected article
@@ -57,7 +57,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
         },
 
         /**
-         * Create the domnode element
+         * Create the dom-node element
          *
          * @returns {HTMLDivElement}
          */
@@ -66,16 +66,16 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
 
             this.$Elm = new Element('div', {
                 'data-qui': 'package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary',
-                'class'   : 'quiqqer-erp-backend-temporaryErp-summary',
-                html      : Mustache.render(template, {
+                'class': 'quiqqer-erp-backend-temporaryErp-summary',
+                html: Mustache.render(template, {
                     showPosSummary: showPosSummary,
-                    labelPosInfo  : QUILocale.get(lg, 'article.summary.tpl.labelPosInfo'),
-                    labelNet      : QUILocale.get(lg, 'article.summary.tpl.labelNet'),
-                    labelGross    : QUILocale.get(lg, 'article.summary.tpl.labelGross'),
-                    labelSums     : QUILocale.get(lg, 'article.summary.tpl.labelSums'),
-                    labelVat      : QUILocale.get(lg, 'article.summary.tpl.labelVat'),
+                    labelPosInfo: QUILocale.get(lg, 'article.summary.tpl.labelPosInfo'),
+                    labelNet: QUILocale.get(lg, 'article.summary.tpl.labelNet'),
+                    labelGross: QUILocale.get(lg, 'article.summary.tpl.labelGross'),
+                    labelSums: QUILocale.get(lg, 'article.summary.tpl.labelSums'),
+                    labelVat: QUILocale.get(lg, 'article.summary.tpl.labelVat'),
                 }),
-                events    : {
+                events: {
                     mouseenter: this.showPriceFactors,
                     mouseleave: this.hidePriceFactors
                 }
@@ -137,8 +137,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
 
                 Currency.getCurrency(currency).then((currency) => {
                     this.$Formatter = QUILocale.getNumberFormatter({
-                        style                : 'currency',
-                        currency             : currency.code,
+                        style: 'currency',
+                        currency: currency.code,
                         minimumFractionDigits: currency.precision,
                         maximumFractionDigits: currency.precision
                     });
@@ -208,7 +208,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
 
                         Content.set('html', Mustache.render(template, {
                             priceFactors: priceFactors,
-                            vatArray    : Object.values(calculations.vatArray)
+                            vatArray: Object.values(calculations.vatArray)
                         }));
 
                         const Total = Content.getElement('.quiqqer-erp-backend-temporaryErp-summaryWin-total');
@@ -241,7 +241,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
          * @param ArticleInstance
          */
         $refreshArticleSelect: function (List, ArticleInstance) {
-            let calculated = List.getCalculation();
+            let calculated = List.getCalculations();
 
             if (typeof calculated.calculations === 'undefined') {
                 return;
@@ -314,7 +314,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
         showPriceFactors: function () {
             const ArticleList = this.getAttribute('List');
             let priceFactors = ArticleList.getPriceFactors();
-            let calculated = ArticleList.getCalculation();
+            let calculated = ArticleList.getCalculations();
 
             if (typeof calculated.calculations === 'undefined') {
                 calculated.calculations = {};
@@ -326,19 +326,21 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
             }
 
             this.getCurrencyFormatter().then(() => {
+                console.log(calculated.calculations.vatArray);
+
                 const vat = Object.entries(calculated.calculations.vatArray).map((val) => {
                     return {
                         text: val[1].text,
-                        sum : this.$Formatter.format(val[1].sum)
+                        sum: this.$Formatter.format(val[1].sum)
                     };
                 });
-                
+
                 this.$PriceFactors.set('html', Mustache.render(templatePriceFactor, {
-                    valueSubSum : calculated.calculations.display_subSum,
-                    valueSum    : calculated.calculations.display_sum,
-                    vat         : vat,
-                    textSubSum  : QUILocale.get(lg, 'article.list.articles.subtotal'),
-                    textSum     : QUILocale.get(lg, 'article.list.articles.sumtotal'),
+                    valueSubSum: calculated.calculations.display_subSum,
+                    valueSum: calculated.calculations.display_sum,
+                    vat: vat,
+                    textSubSum: QUILocale.get(lg, 'article.list.articles.subtotal'),
+                    textSum: QUILocale.get(lg, 'article.list.articles.sumtotal'),
                     priceFactors: priceFactors
                 }));
 
@@ -347,7 +349,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
                 this.$PriceFactors.setStyle('bottom', 70);
 
                 this.$PFFX.animate({
-                    bottom : 80,
+                    bottom: 80,
                     opacity: 1
                 }, {
                     duration: 300
@@ -357,7 +359,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
 
         hidePriceFactors: function () {
             this.$PFFX.animate({
-                bottom : 70,
+                bottom: 70,
                 opacity: 0
             }, {
                 duration: 300,
-- 
GitLab