diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..b8d20acb6c365ad8036a7b36d47dabd876d08efa --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,3 @@ +include: + - project: 'quiqqer/stabilization/semantic-release' + file: '/ci-templates/.gitlab-ci.yml' diff --git a/LICENCE b/LICENSE similarity index 100% rename from LICENCE rename to LICENSE diff --git a/bin/backend/controls/articles/Article.js b/bin/backend/controls/articles/Article.js index fd0d73961b4f5e46f61ae49c25eea8496a20131c..1b1d7b52c19dc131592730bf47c6aa1587e7bf23 100644 --- a/bin/backend/controls/articles/Article.js +++ b/bin/backend/controls/articles/Article.js @@ -49,7 +49,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ return new Class({ Extends: QUIControl, - Type : 'package/quiqqer/erp/bin/backend/controls/articles/Article', + Type: 'package/quiqqer/erp/bin/backend/controls/articles/Article', Binds: [ '$onEditTitle', @@ -72,41 +72,41 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ ], options: { - id : false, - articleNo : '', - description : '', - discount : '-', - position : 0, - price : 0, - quantity : 1, + id: false, + articleNo: '', + description: '', + discount: '-', + position: 0, + price: 0, + quantity: 1, quantityUnit: '', - title : '', - unitPrice : 0, - vat : '', - 'class' : 'QUI\\ERP\\Accounting\\Article', - params : false, // mixed value for API Articles - currency : false, + title: '', + unitPrice: 0, + vat: '', + 'class': 'QUI\\ERP\\Accounting\\Article', + params: false, // mixed value for API Articles + currency: false, showSelectCheckbox: false, // select this article via checkbox instead of click // Determine article fields that can be edited editFields: { - articleNo : true, + articleNo: true, titleAndDescription: true, - quantity : true, - quantityUnit : true, - unitPrice : true, - vat : true, - discount : true + quantity: true, + quantityUnit: true, + unitPrice: true, + vat: true, + discount: true }, customFields: {}, // Custom fields (=fields where user can select/input a value) 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 + calcByList: true // calculate article prices by the associated ArticleList }, initialize: function (options) { @@ -172,20 +172,20 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ let FieldDataClone = Object.clone(FieldData); CustomFieldValues[fieldId] = { - title : FieldDataClone.title, + title: FieldDataClone.title, valueText: nl2br(FieldDataClone.valueText) }; } this.$Elm.set({ - html : Mustache.render(template, { + html: Mustache.render(template, { showSelectCheckbox: showSelectCheckbox, - customFields : Object.values(CustomFieldValues), - buttonReplace : QUILocale.get(lg, 'articleList.article.button.replace'), - buttonDelete : QUILocale.get(lg, 'articleList.article.button.delete'), + customFields: Object.values(CustomFieldValues), + buttonReplace: QUILocale.get(lg, 'articleList.article.button.replace'), + buttonDelete: QUILocale.get(lg, 'articleList.article.button.delete'), }), 'tabindex': -1, - styles : { + styles: { outline: 'none' } }); @@ -329,15 +329,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ }).inject(this.$Total, 'after'); this.$Loader = new Element('div', { - html : '<span class="fa fa-spinner fa-spin"></span>', + html: '<span class="fa fa-spinner fa-spin"></span>', styles: { background: '#fff', - display : 'none', - left : 0, - padding : 10, - position : 'absolute', - top : 0, - width : '100%' + display: 'none', + left: 0, + padding: 10, + position: 'absolute', + top: 0, + width: '100%' } }).inject(this.$Position); @@ -361,9 +361,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ new QUIButton({ 'class': 'quiqqer-erp-backend-erpArticle-text-btn-editor', - title : QUILocale.get(lg, 'erp.articleList.article.button.editor'), - icon : 'fa fa-edit', - events : { + title: QUILocale.get(lg, 'erp.articleList.article.button.editor'), + icon: 'fa fa-edit', + events: { onClick: this.$onEditDescription } }).inject(this.$Text); @@ -488,7 +488,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ } Node.set({ - html : text, + html: text, title: text }); }; @@ -516,7 +516,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ if (typeof this.$bruttoCalc !== 'undefined' && typeof this.$bruttoCalc.display_unitPrice !== 'undefined') { this.$UnitPriceBrutto.set('html', this.$bruttoCalc.display_unitPrice); - this.$UnitPriceBrutto.set('data-value', this.$bruttoCalc.unitPrice); + //this.$UnitPriceBrutto.set('data-value', this.$bruttoCalc.unitPrice); + this.$UnitPriceBrutto.set('data-value', this.$bruttoCalc.calculated.basisPrice); } if (typeof this.$bruttoCalc !== 'undefined' && @@ -541,8 +542,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ let Calc; const self = this, - attr = self.getAttributes(), - pos = parseInt(attr.position); + attr = self.getAttributes(), + pos = parseInt(attr.position); let calcByList = false; @@ -553,12 +554,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ Calc = new Promise(function (resolve, reject) { QUIAjax.get('package_quiqqer_erp_ajax_products_calc', resolve, { 'package': 'quiqqer/erp', - onError : reject, - articles : JSON.encode({ + onError: reject, + articles: JSON.encode({ articles: [attr] }), - user : JSON.encode(self.$user), - currency : self.getAttribute('currency') + user: JSON.encode(self.$user), + currency: self.getAttribute('currency') }); }); } @@ -633,8 +634,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ 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 }); @@ -644,8 +645,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ console.error(err); this.$Formatter = QUILocale.getNumberFormatter({ - style : 'currency', - currency : 'EUR', + style: 'currency', + currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 }); @@ -838,7 +839,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ setDiscount: function (discount) { const self = this; let value = '', - type = ''; + type = ''; if (discount === '' || !discount) { discount = '-'; @@ -947,14 +948,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ */ openDeleteDialog: function () { new QUIConfirm({ - icon : 'fa fa-trash', - texticon : 'fa fa-trash', - title : QUILocale.get(lg, 'dialog.delete.article.title'), + icon: 'fa fa-trash', + texticon: 'fa fa-trash', + title: QUILocale.get(lg, 'dialog.delete.article.title'), information: QUILocale.get(lg, 'dialog.delete.article.information'), - text : QUILocale.get(lg, 'dialog.delete.article.text'), - maxHeight : 400, - maxWidth : 600, - events : { + text: QUILocale.get(lg, 'dialog.delete.article.text'), + maxHeight: 400, + maxWidth: 600, + events: { onSubmit: this.remove.bind(this) } }).open(); @@ -987,14 +988,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ const self = this; new QUIConfirm({ - title : QUILocale.get(lg, 'dialog.edit.description.title', { - articleNo : this.getAttribute('articleNo'), + title: QUILocale.get(lg, 'dialog.edit.description.title', { + articleNo: this.getAttribute('articleNo'), articleTitle: this.getAttribute('title') }), - icon : 'fa fa-edit', + icon: 'fa fa-edit', maxHeight: 600, - maxWidth : 800, - events : { + maxWidth: 800, + events: { onOpen: function (Win) { Win.Loader.show(); @@ -1006,8 +1007,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ Content.set({ html: '' + - '<label><input type="text" name="title" /></label>' + - '<div class="quiqqer-erp-dialog-edit-article-description-editor"></div>' + '<label><input type="text" name="title" /></label>' + + '<div class="quiqqer-erp-dialog-edit-article-description-editor"></div>' }); const Title = Content.getElement('[name="title"]'); @@ -1028,47 +1029,47 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ [ [ { - type : "button", + type: "button", button: "Source" }, { type: "separator" }, { - type : "button", + type: "button", button: "Bold" }, { - type : "button", + type: "button", button: "Italic" }, { - type : "button", + type: "button", button: "Underline" }, { type: "separator" }, { - type : "button", + type: "button", button: "FontSize" }, { type: "separator" }, { - type : "button", + type: "button", button: "RemoveFormat" }, { type: "separator" }, { - type : "button", + type: "button", button: "NumberedList" }, { - type : "button", + type: "button", button: "BulletedList" } ] @@ -1160,7 +1161,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ events: { onSubmit: function (Win, value, title) { self.setQuantityUnit({ - id : value, + id: value, title: title }); @@ -1301,18 +1302,18 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ return new Promise(function (resolve) { const Edit = new Element('input', { - type : type, - value : value, + type: type, + value: value, styles: { - border : 0, - left : 0, + border: 0, + left: 0, lineHeight: 20, - textAlign : 'right', - padding : 5, - margin : 5, - position : 'absolute', - top : 0, - width : 'calc(100% - 10px)' + textAlign: 'right', + padding: 5, + margin: 5, + position: 'absolute', + top: 0, + width: 'calc(100% - 10px)' } }).inject(Container); @@ -1396,7 +1397,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ if (!PreviousArticle) { PreviousArticle = Cell.getParent('.quiqqer-erp-backend-erpItems-items') - .getLast('.article'); + .getLast('.article'); } Next = PreviousArticle.getLast('.cell-editable'); @@ -1421,7 +1422,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ if (!NextArticle) { NextArticle = Cell.getParent('.quiqqer-erp-backend-erpItems-items') - .getElement('.article'); + .getElement('.article'); } Next = NextArticle.getElement('.cell-editable'); @@ -1472,7 +1473,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ } const result = { - id : i, + id: i, title: title }; @@ -1497,8 +1498,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ return new Promise(function (resolve) { QUIAjax.get('package_quiqqer_erp_ajax_calcNettoPrice', resolve, { 'package': 'quiqqer/erp', - price : value, - vat : self.getAttribute('vat'), + price: value, + vat: self.getAttribute('vat'), formatted: formatted ? 1 : 0 }); }); @@ -1517,8 +1518,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ return new Promise(function (resolve) { QUIAjax.get('package_quiqqer_erp_ajax_calcBruttoPrice', resolve, { 'package': 'quiqqer/erp', - price : value, - vat : self.getAttribute('vat'), + price: value, + vat: self.getAttribute('vat'), formatted: formatted ? 1 : 0 }); }); @@ -1533,9 +1534,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [ $sanitizeArticleDescription: function (description) { return new Promise((resolve, reject) => { QUIAjax.get('package_quiqqer_erp_ajax_utils_sanitizeArticleDescription', resolve, { - 'package' : 'quiqqer/erp', + 'package': 'quiqqer/erp', description: description, - onError : reject + onError: reject }); }); } diff --git a/bin/backend/controls/articles/ArticleList.js b/bin/backend/controls/articles/ArticleList.js index bc4d5084d49827dcdf62ed6954e7d4f67a072f14..a8487494839c608ae00962e7b73ece78622105fa 100644 --- a/bin/backend/controls/articles/ArticleList.js +++ b/bin/backend/controls/articles/ArticleList.js @@ -36,7 +36,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ return new Class({ Extends: QUIControl, - Type : 'package/quiqqer/erp/bin/backend/controls/articles/ArticleList', + Type: 'package/quiqqer/erp/bin/backend/controls/articles/ArticleList', Binds: [ '$onArticleDelete', @@ -53,7 +53,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ ], options: { - currency : false, // bool || string -> EUR, USD ... + currency: false, // bool || string -> EUR, USD ... nettoinput: true }, @@ -69,14 +69,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ this.$calculations = { currencyData: {}, - isEuVat : 0, - isNetto : true, - nettoSubSum : 0, - nettoSum : 0, - subSum : 0, - sum : 0, - vatArray : [], - vatText : [] + isEuVat: 0, + isNetto: true, + nettoSubSum: 0, + nettoSum: 0, + subSum: 0, + sum: 0, + vatArray: [], + vatText: [] }; this.$Container = null; @@ -103,15 +103,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ this.$Elm.set({ html: Mustache.render(template, { - titleArticleNo : QUILocale.get(lg, 'products.articleNo'), - titleDescription : QUILocale.get(lg, 'products.description'), - titleQuantity : QUILocale.get(lg, 'products.quantity'), + titleArticleNo: QUILocale.get(lg, 'products.articleNo'), + titleDescription: QUILocale.get(lg, 'products.description'), + titleQuantity: QUILocale.get(lg, 'products.quantity'), titleQuantityUnit: QUILocale.get(lg, 'products.quantityUnit'), - titleUnitPrice : QUILocale.get(lg, 'products.unitPrice'), - titlePrice : QUILocale.get(lg, 'products.price'), - titleVAT : QUILocale.get(lg, 'products.table.vat'), - titleDiscount : QUILocale.get(lg, 'products.discount'), - titleSum : QUILocale.get(lg, 'products.sum') + titleUnitPrice: QUILocale.get(lg, 'products.unitPrice'), + titlePrice: QUILocale.get(lg, 'products.price'), + titleVAT: QUILocale.get(lg, 'products.table.vat'), + titleDiscount: QUILocale.get(lg, 'products.discount'), + titleSum: QUILocale.get(lg, 'products.sum') }) }); @@ -125,11 +125,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ const SwitchDesc = this.$Elm.getElement('.quiqqer-erp-backend-erpItems-container-switch-desc'); this.$Switch = new QUISwitch({ - switchTextOn : 'netto', - switchTextOnIcon : false, - switchTextOff : 'brutto', + switchTextOn: 'netto', + switchTextOnIcon: false, + switchTextOff: 'brutto', switchTextOffIcon: false, - events : { + events: { onChange: function () { self.$Loader.show(); self.setAttribute('nettoinput', !!self.$Switch.getStatus()); @@ -177,7 +177,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ }); return { - articles : articles, + articles: articles, priceFactors: this.$priceFactors }; }, @@ -319,12 +319,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ Child.setAttribute('List', this); Child.addEvents({ - onDelete : this.$onArticleDelete, - onSelect : this.$onArticleSelect, - onUnSelect : this.$onArticleUnSelect, - onReplace : this.$onArticleReplace, + onDelete: this.$onArticleDelete, + onSelect: this.$onArticleSelect, + onUnSelect: this.$onArticleUnSelect, + onReplace: this.$onArticleReplace, onEditCustomFields: this.$onArticleEditCustomFields, - onCalc : this.$executeCalculation + onCalc: this.$executeCalculation }); if (this.$Container) { @@ -416,7 +416,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ */ $executeCalculation: function () { const self = this; - + if (this.$isIncalculationFrame) { this.fireEvent('calc', [ this, @@ -461,13 +461,13 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ resolve(result); }, { - 'package' : 'quiqqer/erp', - articles : JSON.encode({articles: articles}), + 'package': 'quiqqer/erp', + articles: JSON.encode({articles: articles}), priceFactors: JSON.encode(this.getPriceFactors()), - user : JSON.encode(this.$user), - currency : this.getAttribute('currency'), - nettoInput : this.getAttribute('nettoinput') ? 1 : 0, - onError : function (err) { + user: JSON.encode(this.$user), + currency: this.getAttribute('currency'), + nettoInput: this.getAttribute('nettoinput') ? 1 : 0, + onError: function (err) { console.error(err); reject(); } @@ -639,8 +639,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ enableSorting: function () { const self = this; - const Elm = this.getElm(), - elements = Elm.getElements('.article'); + const Elm = this.getElm(), + elements = Elm.getElements('.article'); elements.each(function (Node) { const Article = QUI.Controls.getById(Node.get('data-quiid')); @@ -652,14 +652,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ new Element('div', { 'class': 'quiqqer-erp-sortableClone-placeholder', - html : Mustache.render(templateSortablePlaceholder, attributes) + html: Mustache.render(templateSortablePlaceholder, attributes) }).inject(Node); }); this.$Sortables = new Sortables(this.$Container, { revert: { - duration : 500, + duration: 500, transition: 'elastic:out' }, @@ -671,16 +671,16 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ } const size = Target.getSize(), - pos = Target.getPosition(self.$Container); + pos = Target.getPosition(self.$Container); return new Element('div', { styles: { background: 'rgba(0,0,0,0.5)', - height : size.y, - position : 'absolute', - top : pos.y, - width : size.x, - zIndex : 1000 + height: size.y, + position: 'absolute', + top: pos.y, + width: size.x, + zIndex: 1000 } }); }, @@ -689,9 +689,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ element.addClass('quiqqer-erp-sortableClone'); self.$Container.setStyles({ - height : self.$Container.getSize().y, + height: self.$Container.getSize().y, overflow: 'hidden', - width : self.$Container.getSize().x + width: self.$Container.getSize().x }); }, @@ -699,9 +699,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ element.removeClass('quiqqer-erp-sortableClone'); self.$Container.setStyles({ - height : null, + height: null, overflow: null, - width : null + width: null }); self.$recalculatePositions(); @@ -718,9 +718,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ disableSorting: function () { this.$sorting = false; - const self = this, - Elm = this.getElm(), - elements = Elm.getElements('.article'); + const self = this, + Elm = this.getElm(), + elements = Elm.getElements('.article'); Elm.getElements('.quiqqer-erp-sortableClone-placeholder').destroy(); @@ -756,8 +756,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ */ $onArticleSetPosition: function (Article) { Article.getElm() - .getElement('.quiqqer-erp-backend-erpArticlePlaceholder-pos') - .set('html', Article.getAttribute('position')); + .getElement('.quiqqer-erp-backend-erpArticlePlaceholder-pos') + .set('html', Article.getAttribute('position')); }, /** @@ -766,8 +766,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ $recalculatePositions: function () { let i, len, Article; - const Elm = this.getElm(), - elements = Elm.getElements('.article'); + const Elm = this.getElm(), + elements = Elm.getElements('.article'); for (i = 0, len = elements.length; i < len; i++) { Article = QUI.Controls.getById(elements[i].get('data-quiid')); @@ -791,7 +791,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ let i, len, Current; - let self = this, + let self = this, articles = [], position = 1; @@ -876,7 +876,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ const AddProductControl = new AddProductWindow({ fieldValues: FieldValues, - editAmount : false + editAmount: false }); const productId = EditArticle.getAttribute('id'); diff --git a/src/QUI/ERP/Output/Output.php b/src/QUI/ERP/Output/Output.php index 47c91f7effce486f34842d0f597816989881c596..08835efcfe19838cdd75559315f168bcb98a11d5 100644 --- a/src/QUI/ERP/Output/Output.php +++ b/src/QUI/ERP/Output/Output.php @@ -164,7 +164,7 @@ public static function getDocumentPdfDownloadUrl($entityId, string $entityType): $url = URL_OPT_DIR . 'quiqqer/erp/bin/output/frontend/download.php?'; $url .= http_build_query([ 'id' => $entityId, - 't' => $entityType + 't' => $entityType ]); return $url; @@ -217,7 +217,7 @@ public static function sendPdfViaMail( $pdfFile = $OutputTemplate->getPDFDocument()->createPDF(); // Re-name PDF - $pdfDir = QUI::getPackage('quiqqer/erp')->getVarDir(); + $pdfDir = QUI::getPackage('quiqqer/erp')->getVarDir(); $mailFile = $pdfDir . $OutputProvider::getDownloadFileName($entityId) . '.pdf'; rename($pdfFile, $mailFile); @@ -247,8 +247,10 @@ public static function sendPdfViaMail( // Additional attachments foreach ($attachedMediaFiles as $MediaFile) { - if (!($MediaFile instanceof QUI\Projects\Media\File) && - !($MediaFile instanceof QUI\Projects\Media\Image)) { + if ( + !($MediaFile instanceof QUI\Projects\Media\File) && + !($MediaFile instanceof QUI\Projects\Media\Image) + ) { continue; } @@ -307,7 +309,7 @@ public static function getOutputTemplateProviderByPackage(string $package) */ public static function getTemplates(string $entityType = null): array { - $templates = []; + $templates = []; $outputProviders = []; if (empty($entityType)) { @@ -322,12 +324,12 @@ public static function getTemplates(string $entityType = null): array foreach (self::getAllOutputTemplateProviders() as $provider) { /** @var OutputTemplateProviderInterface $class */ - $class = $provider['class']; + $class = $provider['class']; $package = $provider['package']; /** @var OutputProviderInterface $OutputProvider */ foreach ($outputProviders as $OutputProvider) { - $entityType = $OutputProvider::getEntityType(); + $entityType = $OutputProvider::getEntityType(); $defaultOutputTemplate = self::getDefaultOutputTemplateForEntityType($entityType); foreach ($class::getTemplates($entityType) as $providerTemplateId) { @@ -342,12 +344,12 @@ public static function getTemplates(string $entityType = null): array $defaultOutputTemplate['id'] === $providerTemplateId; $providerTemplate = [ - 'id' => $providerTemplateId, - 'title' => $templateTitle, - 'provider' => $package, + 'id' => $providerTemplateId, + 'title' => $templateTitle, + 'provider' => $package, 'isSystemDefault' => $provider['isSystemDefault'], - 'isDefault' => $isDefault, - 'entityType' => $entityType, + 'isDefault' => $isDefault, + 'entityType' => $entityType, 'entityTypeTitle' => $OutputProvider::getEntityTypeTitle() ]; @@ -381,13 +383,13 @@ public static function getTemplates(string $entityType = null): array public static function getDefaultOutputTemplateForEntityType(string $entityType): array { $fallBackTemplate = [ - 'id' => 'system_default', - 'provider' => 'quiqqer/erp-accounting-templates', + 'id' => 'system_default', + 'provider' => 'quiqqer/erp-accounting-templates', 'hideSystemDefault' => false ]; try { - $Conf = QUI::getPackage('quiqqer/erp')->getConfig(); + $Conf = QUI::getPackage('quiqqer/erp')->getConfig(); $defaultTemplates = $Conf->get('output', 'default_templates'); if (empty($defaultTemplates)) { @@ -419,7 +421,7 @@ public static function getDefaultOutputTemplateProviderForEntityType(string $ent $defaultEntityTypeTemplate = self::getDefaultOutputTemplateForEntityType($entityType); foreach (self::getAllOutputTemplateProviders() as $provider) { - if ($provider['package'] === $defaultEntityTypeTemplate['provider']) { + if (isset($defaultEntityTypeTemplate['provider']) && $provider['package'] === $defaultEntityTypeTemplate['provider']) { return $provider['class']; } } @@ -427,7 +429,7 @@ public static function getDefaultOutputTemplateProviderForEntityType(string $ent // Fallback: Choose next available provider foreach (self::getAllOutputTemplateProviders() as $provider) { /** @var OutputTemplateProviderInterface $class */ - $class = $provider['class']; + $class = $provider['class']; $providerTemplates = $class::getTemplates($entityType); if (!empty($providerTemplates)) { @@ -445,7 +447,7 @@ public static function getDefaultOutputTemplateProviderForEntityType(string $ent */ protected static function getAllOutputProviders(): array { - $packages = QUI::getPackageManager()->getInstalled(); + $packages = QUI::getPackageManager()->getInstalled(); $providerClasses = []; foreach ($packages as $installedPackage) { @@ -469,7 +471,7 @@ protected static function getAllOutputProviders(): array } $providerClasses[] = [ - 'class' => $class, + 'class' => $class, 'package' => $installedPackage['name'] ]; } @@ -488,7 +490,7 @@ protected static function getAllOutputProviders(): array */ protected static function getAllOutputTemplateProviders(): array { - $packages = QUI::getPackageManager()->getInstalled(); + $packages = QUI::getPackageManager()->getInstalled(); $providerClasses = []; foreach ($packages as $installedPackage) { @@ -512,8 +514,8 @@ protected static function getAllOutputTemplateProviders(): array } $providerClasses[] = [ - 'class' => $class, - 'package' => $installedPackage['name'], + 'class' => $class, + 'package' => $installedPackage['name'], 'isSystemDefault' => $installedPackage['name'] === 'quiqqer/erp-accounting-templates' ]; }