diff --git a/ajax/backend/create/createCustomer.php b/ajax/backend/create/createCustomer.php index 91f0201342b4473a05c08c3c61a6e9dca6542899..d807f356832358a7264bbf93d0777b4a4763c58b 100644 --- a/ajax/backend/create/createCustomer.php +++ b/ajax/backend/create/createCustomer.php @@ -12,9 +12,10 @@ QUI::$Ajax->registerFunction( 'package_quiqqer_customer_ajax_backend_create_createCustomer', - function ($customerId, $address, $groups) { + function ($customerId, $address, $groups, $attributes) { $address = json_decode($address, true); $groups = json_decode($groups, true); + $attributes = json_decode($attributes, true); $User = QUI\ERP\Customer\Customers::getInstance()->createCustomer( $customerId, @@ -22,8 +23,13 @@ function ($customerId, $address, $groups) { $groups ); + if (is_array($attributes)) { + $User->setAttributes($attributes); + $User->save(); + } + return $User->getUUID(); }, - ['customerId', 'address', 'groups'], + ['customerId', 'address', 'groups', 'attributes'], 'Permission::checkAdminUser' ); diff --git a/ajax/backend/getBusinessType.php b/ajax/backend/getBusinessType.php new file mode 100644 index 0000000000000000000000000000000000000000..eb2a3ffb72c58ae1b921e01d876d770aef3dbc60 --- /dev/null +++ b/ajax/backend/getBusinessType.php @@ -0,0 +1,18 @@ +<?php + +/** + * This file contains package_quiqqer_customer_ajax_backend_getBusinessType + */ + +/** + * Return the shop business type + */ + +QUI::$Ajax->registerFunction( + 'package_quiqqer_customer_ajax_backend_getBusinessType', + function () { + return QUI\ERP\Utils\Shop::getBusinessType(); + }, + false, + 'Permission::checkAdminUser' +); diff --git a/bin/backend/controls/create/Customer.html b/bin/backend/controls/create/Customer.html index 91fd442de5c276a263083bed0bf5986e852f2906..388ff10be476f8041175168321027d84d570b006 100644 --- a/bin/backend/controls/create/Customer.html +++ b/bin/backend/controls/create/Customer.html @@ -34,6 +34,20 @@ </label> </td> </tr> + <tr> + <td> + <label class="field-container"> + <span class="field-container-item"> + {{textIsNettoBruttoUser}} + </span> + <select name="quiqqer.erp.isNettoUser" class="field-container-field"> + <option value=""></option> + <option value="2">{{textBrutto}}</option> + <option value="1">{{textNetto}}</option> + </select> + </label> + </td> + </tr> <tr> <td> <label class="field-container"> diff --git a/bin/backend/controls/create/Customer.js b/bin/backend/controls/create/Customer.js index 101a268a2725b053f464ed79a8d302b6b68f6ecb..8233f75430c4d9b43bcbb868d5f3fd53ea0f3ada 100644 --- a/bin/backend/controls/create/Customer.js +++ b/bin/backend/controls/create/Customer.js @@ -21,7 +21,7 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ ], function(QUI, QUIControl, Countries, Handler, QUILocale, QUIAjax, Mustache, template) { 'use strict'; - var lg = 'quiqqer/customer'; + const lg = 'quiqqer/customer'; return new Class({ @@ -66,6 +66,9 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ customerGroupsHeader: QUILocale.get(lg, 'window.customer.creation.groups.title'), customerGroupsText: QUILocale.get(lg, 'window.customer.creation.groups.text'), labelPrefix: QUILocale.get(lg, 'window.customer.creation.customerNo.labelPrefix'), + textIsNettoBruttoUser: QUILocale.get(lg, 'customer.user.information.textBruttoNetto'), + textNetto: QUILocale.get('quiqqer/erp', 'user.settings.userNettoStatus.netto'), + textBrutto: QUILocale.get('quiqqer/erp', 'user.settings.userNettoStatus.brutto'), textAddressCompany: QUILocale.get('quiqqer/core', 'company'), textAddressSalutation: QUILocale.get('quiqqer/core', 'salutation'), @@ -86,10 +89,10 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ this.$Form = this.$Elm.getElement('form'); // key events - var self = this; - var CustomerId = this.$Elm.getElement('[name="customerId"]'); - var Company = this.$Elm.getElement('[name="address-company"]'); - var Country = this.$Elm.getElement('[name="address-country"]'); + const self = this; + const CustomerId = this.$Elm.getElement('[name="customerId"]'); + const Company = this.$Elm.getElement('[name="address-company"]'); + const Country = this.$Elm.getElement('[name="address-country"]'); CustomerId.addEvent('keydown', function(event) { if (event.key === 'tab') { @@ -140,13 +143,13 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ * event: on inject */ $onInject: function() { - var self = this; - var Group = this.$Elm.getElement('[name="group"]'); + const self = this; + const Group = this.$Elm.getElement('[name="group"]'); Countries.getCountries().then(function(countries) { - var CountrySelect = self.$Elm.getElement('[name="address-country"]'); + const CountrySelect = self.$Elm.getElement('[name="address-country"]'); - for (var code in countries) { + for (let code in countries) { if (!countries.hasOwnProperty(code)) { continue; } @@ -160,10 +163,32 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ if (QUIQQER_CONFIG.globals.country) { CountrySelect.value = QUIQQER_CONFIG.globals.country; } + }).then(() => { + const Select = this.$Elm.getElement('[name="quiqqer.erp.isNettoUser"]') + + return new Promise((resolve) => { + QUIAjax.get('package_quiqqer_customer_ajax_backend_getBusinessType', (businessType) => { + switch (businessType.toLowerCase()) { + case 'b2b': + case 'b2b-b2c': + Select.value = '1'; + break; + + case 'b2c': + case 'b2c-b2b': + Select.value = '2'; + break; + } + + resolve(); + }, { + 'package': 'quiqqer/customer', + }); + }); }).then(function() { return QUI.parse(self.$Elm); }).then(function() { - var GroupControl = QUI.Controls.getById(Group.get('data-quiid')); + const GroupControl = QUI.Controls.getById(Group.get('data-quiid')); GroupControl.disable(); self.showCustomerNumber(); @@ -174,12 +199,12 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ * Create the customer */ createCustomer: function() { - var self = this; - var elements = this.$Form.elements; - var customerId = elements.customerId.value; - var groups = elements.groups.value.split(','); + const self = this; + const elements = this.$Form.elements; + const customerId = elements.customerId.value; + const groups = elements.groups.value.split(','); - var address = { + const address = { 'salutation': elements['address-salutation'].value, 'firstname': elements['address-firstname'].value, 'lastname': elements['address-lastname'].value, @@ -200,7 +225,10 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ 'package': 'quiqqer/customer', customerId: customerId, address: JSON.encode(address), - groups: JSON.encode(groups) + groups: JSON.encode(groups), + attributes: JSON.encode({ + 'quiqqer.erp.isNettoUser': this.$Elm.getElement('[name="quiqqer.erp.isNettoUser"]').value + }) }); }, @@ -212,16 +240,16 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ return this.createCustomer(); } - var self = this; - var steps = this.$List.getElements('li'); - var pos = this.$List.getPosition(this.$Container); - var top = pos.y; + const self = this; + const steps = this.$List.getElements('li'); + const pos = this.$List.getPosition(this.$Container); + const top = pos.y; - var height = this.$Container.getSize().y; - var scrollHeight = this.$Container.getScrollSize().y; - var newTop = this.$roundToStepPos(top - height); + const height = this.$Container.getSize().y; + const scrollHeight = this.$Container.getScrollSize().y; + const newTop = this.$roundToStepPos(top - height); - var step = 1; + let step = 1; if ((top * -1) / height) { step = Math.round(((top * -1) / height) + 1); @@ -239,11 +267,11 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ } return new Promise(function(resolve) { - var checkPromises = []; + const checkPromises = []; if (step === 1) { - var elements = self.$Form.elements; - var customerId = elements.customerId.value; + const elements = self.$Form.elements; + const customerId = elements.customerId.value; checkPromises.push(Handler.validateCustomerNo(customerId)); } @@ -267,12 +295,12 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ * Previous next step */ previous: function() { - var self = this; - var pos = this.$List.getPosition(this.$Container); - var top = pos.y; + const self = this; + const pos = this.$List.getPosition(this.$Container); + const top = pos.y; - var height = this.$Container.getSize().y; - var newTop = this.$roundToStepPos(top + height); + const height = this.$Container.getSize().y; + let newTop = this.$roundToStepPos(top + height); this.$Next.set('html', QUILocale.get(lg, 'window.customer.creation.next')); this.$Next.set('data-last', null); @@ -297,11 +325,11 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ * refresh the step display */ refreshStepDisplay: function() { - var step = 1; - var steps = this.$List.getElements('li'); - var pos = this.$List.getPosition(this.$Container); - var top = pos.y; - var height = this.$Container.getSize().y; + let step = 1; + const steps = this.$List.getElements('li'); + const pos = this.$List.getPosition(this.$Container); + const top = pos.y; + const height = this.$Container.getSize().y; if ((top * -1) / height) { step = Math.round(((top * -1) / height) + 1); @@ -329,8 +357,8 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ * @return {number} */ $roundToStepPos: function(currentPos) { - var height = this.$Container.getSize().y; - var pos = Math.round(currentPos / height) * -1; + const height = this.$Container.getSize().y; + const pos = Math.round(currentPos / height) * -1; return pos * height * -1; }, @@ -339,7 +367,7 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ * Show the customer number step */ showCustomerNumber: function() { - var self = this; + const self = this; this.$Next.disabled = true; @@ -347,8 +375,8 @@ define('package/quiqqer/customer/bin/backend/controls/create/Customer', [ Handler.getNewCustomerNo(), Handler.getCustomerIdPrefix() ]).then(function(result) { - var Input = self.$Elm.getElement('input[name="customerId"]'); - var InputPrefix = self.$Elm.getElement('input[name="prefix"]'); + const Input = self.$Elm.getElement('input[name="customerId"]'); + const InputPrefix = self.$Elm.getElement('input[name="prefix"]'); if (result[1]) { InputPrefix.value = result[1]; diff --git a/bin/backend/controls/create/CustomerWindow.js b/bin/backend/controls/create/CustomerWindow.js index c05f30e40c8c00f8fa86b54f9217c26e6a98bd6b..e48837162ead532919b8744cae5457ad876d4f71 100644 --- a/bin/backend/controls/create/CustomerWindow.js +++ b/bin/backend/controls/create/CustomerWindow.js @@ -24,7 +24,7 @@ define('package/quiqqer/customer/bin/backend/controls/create/CustomerWindow', [ ], options: { - maxHeight: 700, + maxHeight: 750, maxWidth: 600, buttons: false }, @@ -50,6 +50,7 @@ define('package/quiqqer/customer/bin/backend/controls/create/CustomerWindow', [ this.getContent().set('html', ''); this.getContent().setStyle('padding', 0); + this.Loader.show(); new CreateCustomer({ events: { diff --git a/src/QUI/ERP/Customer/Customers.php b/src/QUI/ERP/Customer/Customers.php index e80b53af6ea37610a9273d37f957286ed52dee84..04398f7b8d6f19f929f61b7f9878be83a7539ce8 100644 --- a/src/QUI/ERP/Customer/Customers.php +++ b/src/QUI/ERP/Customer/Customers.php @@ -67,11 +67,7 @@ public function createCustomer($customerId, array $address = [], array $groupIds $User->save(); if (!empty($address)) { - try { - $Address = $User->getStandardAddress(); - } catch (QUI\Exception) { - $Address = $User->addAddress(); - } + $Address = $User->getStandardAddress(); $needles = [ 'salutation',