diff --git a/bin/backend/controls/articles/ArticleList.js b/bin/backend/controls/articles/ArticleList.js index fe840c577f129c8f1e8d0ef03802f79b1a92a21c..4f408f9dcbad739aa1f01fc9e9be46b46b041ac9 100644 --- a/bin/backend/controls/articles/ArticleList.js +++ b/bin/backend/controls/articles/ArticleList.js @@ -196,7 +196,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ unserialize: function (list) { const self = this; let data = {}; - + if (typeOf(list) === 'string') { try { data = JSON.stringify(list); @@ -489,6 +489,31 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ this.$priceFactors = newList; }, + /** + * add a price factor + * + * { + * calculation : 2, + * calculation_basis: 2, + * description : Form.elements.title.value, + * identifier : "", + * index : priority, + * nettoSum : data.nettoSum, + * nettoSumFormatted: data.nettoSumFormatted, + * sum : data.sum, + * sumFormatted : data.sumFormatted, + * title : Form.elements.title.value, + * value : data.sum, + * valueText : data.sumFormatted, + * vat : Form.elements.vat.value, + * visible : 1 + * } + * @param priceFactor + */ + addPriceFactor: function (priceFactor) { + this.$priceFactors.push(priceFactor); + }, + /** * Sorting */ diff --git a/bin/backend/controls/articles/ArticleSummary.Window.html b/bin/backend/controls/articles/ArticleSummary.Window.html index c105bd51802bf560badbcd00cf92a57c5f841818..7dea36f806a80bd39db678dd4e6c9a836cf0dc62 100644 --- a/bin/backend/controls/articles/ArticleSummary.Window.html +++ b/bin/backend/controls/articles/ArticleSummary.Window.html @@ -1,4 +1,14 @@ <table class="data-table data-table-flexbox quiqqer-invoice-backend-temporaryInvoice-summaryWin-priceFactors"> + <thead> + <tr> + <th> + <button name="add-pricefactor" disabled class="qui-button" style="float: right"> + <span class="fa fa plus"></span> + <span>Preisfaktor hinzufügen</span> + </button> + </th> + </tr> + </thead> <tbody> {{#priceFactors}} <tr data-index="{{index}}"> diff --git a/bin/backend/controls/articles/ArticleSummary.js b/bin/backend/controls/articles/ArticleSummary.js index 132018ec75c220cb0a15e0459a4dcbb6974b6324..14bce3f13b2fe9dad2eab5165aa78be312144a1b 100644 --- a/bin/backend/controls/articles/ArticleSummary.js +++ b/bin/backend/controls/articles/ArticleSummary.js @@ -60,8 +60,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [ const showPosSummary = this.getAttribute('showPosSummary'); this.$Elm = new Element('div', { - 'class': 'quiqqer-erp-backend-temporaryErp-summary', - html : Mustache.render(template, { + 'data-qui': 'package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', + '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'), @@ -147,6 +148,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [ List.addEvent('onArticleSelect', this.$refreshArticleSelect); }, + // region summary + /** * Open the summary with price factors */ @@ -155,23 +158,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [ return; } - const self = this; - - require(['qui/controls/windows/Popup'], function (Popup) { - new Popup({ - title : QUILocale.get('quiqqer/erp', 'article.summary.window.title'), - buttons : false, - maxHeight: 600, - maxWidth : 600, - events : { - onCreate: function (Win) { - Win.Loader.show(); - - self.$refreshSummaryContent(Win).then(function () { - Win.Loader.hide(); - }); - } - } + require([ + 'package/quiqqer/erp/bin/backend/controls/articles/windows/PriceFactors' + ], (PriceFactorWindow) => { + new PriceFactorWindow({ + ArticleList: this.getAttribute('List') }).open(); }); }, @@ -226,6 +217,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [ }); }, + //endregion + /** * event: onArticleSelect * diff --git a/bin/load.js b/bin/load.js index 1a2c28369faffdfddcdc5de2a7710e9cd655ccb7..e57192d8e7311d3c76bfcfbdf83fdcbdbe90f538 100644 --- a/bin/load.js +++ b/bin/load.js @@ -3,32 +3,30 @@ document.addEvent('domready', function () { require([ 'qui/QUI', - 'package/quiqqer/erp/bin/backend/controls/Panel' - ], function (QUI, Panel) { - var loadExecute = 0; + 'package/quiqqer/erp/bin/backend/controls/Panel', + 'package/quiqqer/erp/bin/backend/controls/articles/windows/PriceFactors', + 'qui/controls/buttons/Separator', + 'Locale' + ], function (QUI, Panel, PriceFactorsWindow, Separator, QUILocale) { + let loadExecute = 0; - var load = function () { + const load = function () { loadExecute++; if (loadExecute === 10) { return; } - var ColumnElm = document.getElement('.qui-column'); + + const ColumnElm = document.getElement('.qui-column'); if (!ColumnElm) { load.delay(100); return; } - // require([ - // 'package/quiqqer/customer/bin/backend/controls/CreateCustomerWindow' - // ], function (Win) { - // new Win().open(); - // }); - - var Column = QUI.Controls.getById(ColumnElm.get('data-quiid')); + const Column = QUI.Controls.getById(ColumnElm.get('data-quiid')); - var panels = Column.getChildren(), + let panels = Column.getChildren(), length = Object.getLength(panels); if (length === 0) { @@ -36,7 +34,7 @@ document.addEvent('domready', function () { return; } - for (var i in panels) { + for (let i in panels) { if (!panels.hasOwnProperty(i)) { continue; } @@ -50,5 +48,49 @@ document.addEvent('domready', function () { }; QUI.addEvent('quiqqerLoaded', load); + + + // extend panels + QUI.addEvent('quiqqerOrderActionButtonCreate', function (Panel, Actions) { + Actions.appendChild(new Separator()); + + Actions.appendChild({ + name : 'priceFactors', + text : QUILocale.get('quiqqer/erp', 'panel.btn.priceFactors'), + icon : 'fa fa-outdent', + disabled: true, + events : { + onClick: function () { + const quiId = Panel.getElm().getElement( + '[data-qui="package/quiqqer/erp/bin/backend/controls/articles/ArticleList"]' + ).get('data-quiid'); + + new PriceFactorsWindow({ + ArticleList: QUI.Controls.getById(quiId) + }).open(); + } + } + }); + + Actions.appendChild(new Separator()); + + QUI.fireEvent('quiqqerOrderActionButtonPriceFactors', [ + Panel, + Actions + ]); + + // factors + const PriceFactors = Actions.getChildren().filter(function (Item) { + return Item.getAttribute('name') === 'priceFactors'; + })[0]; + + Panel.addEvent('categoryEnter', function (Panel, Btn) { + if (Btn.getAttribute('name') === 'articles') { + PriceFactors.enable(); + } else { + PriceFactors.disable(); + } + }); + }); }); }); diff --git a/locale.xml b/locale.xml index ffcb8b8e4ca5cac0ee3bf63c65dd71a63d1c9cca..adf7548303d57743feba82256907828fa26dc556 100644 --- a/locale.xml +++ b/locale.xml @@ -1291,6 +1291,15 @@ Allowed characters: Letters, numbers and _ ä ö ü ß]]></en> <en><![CDATA[Product attributes]]></en> </locale> + <locale name="panel.btn.priceFactors"> + <de><![CDATA[Preisfaktoren bearbeiten]]></de> + <en><![CDATA[Edit pricefactors]]></en> + </locale> + <locale name="pricefactors.summary.window.title"> + <de><![CDATA[Preisfaktoren bearbeiten]]></de> + <en><![CDATA[Edit pricefactors]]></en> + </locale> + <locale name="controls.QuantityUnitWindow.title"> <de><![CDATA[Mengeneinheit]]></de> <en><![CDATA[Quantity unit]]></en> @@ -1307,5 +1316,45 @@ Allowed characters: Letters, numbers and _ ä ö ü ß]]></en> You have selected a variant parent. Please choose a variant. ]]></en> </locale> + + <locale name="calculationBasis"> + <de><![CDATA[Berechnungs-Grundlage]]></de> + <en><![CDATA[Calculation basis]]></en> + </locale> + <locale name="calculationBasis.netto"> + <de><![CDATA[Netto]]></de> + <en><![CDATA[Netto]]></en> + </locale> + <locale name="calculationBasis.calculationBasisCalcPrice"> + <de><![CDATA[Kalkulierter Preis]]></de> + <en><![CDATA[Calculated price]]></en> + </locale> + <locale name="calculationBasis.calculationBasisCalcBrutto"> + <de><![CDATA[ + Kalkulierter Brutto Preis (Geht von dem Nettopreis aus, welcher alle Preisfaktoren beinhaltet, wie z.B. Auswahllisten) + ]]></de> + <en><![CDATA[ + Calculated brutto price (Expects from the netto price which includes all price factors, like attribute lists) + ]]></en> + </locale> + + <locale name="title.price"> + <de><![CDATA[Preis]]></de> + <en><![CDATA[Price]]></en> + </locale> + <locale name="title.title"> + <de><![CDATA[Titel]]></de> + <en><![CDATA[Title]]></en> + </locale> + <locale name="title.priority"> + <de><![CDATA[Priorität]]></de> + <en><![CDATA[Priority]]></en> + </locale> + <locale name="title.vat"> + <de><![CDATA[MwSt.]]></de> + <en><![CDATA[Vat]]></en> + </locale> + + </groups> </locales> diff --git a/src/QUI/ERP/Accounting/Calc.php b/src/QUI/ERP/Accounting/Calc.php index 8a0835245c7784e5a81d2991b486f8999d128543..548274aa87f19e1f63a0d9f3b1b57b88c2caa1ac 100644 --- a/src/QUI/ERP/Accounting/Calc.php +++ b/src/QUI/ERP/Accounting/Calc.php @@ -14,7 +14,6 @@ use QUI\ERP\Accounting\Invoice\InvoiceTemporary; use QUI\ERP\Money\Price; use QUI\Interfaces\Users\User as UserInterface; -use QUI\ERP\Currency\Handler as CurrencyHandler; use function array_map; use function array_sum; @@ -72,7 +71,7 @@ class Calc /** * Basis brutto * include all price factors (from netto calculated price) - * warning: its not brutto VAT + * warning: it's not brutto VAT * * geht vnn der netto basis aus, welche alle price faktoren schon beinhaltet * alle felder sind in diesem price schon enthalten