From cf0feffe26e77d48580e283e2d2e7171c6d6471d Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 29 Jun 2021 20:44:44 +1000 Subject: [PATCH] Allow override of values from calling function --- InvenTree/company/serializers.py | 1 + .../company/templates/company/index.html | 86 ++++++++----------- InvenTree/company/test_views.py | 15 ---- InvenTree/company/views.py | 4 - InvenTree/templates/js/company.js | 70 +++++++++++++++ InvenTree/templates/js/forms.js | 21 ++++- 6 files changed, 125 insertions(+), 72 deletions(-) diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index 1e97756987..3dd4e9334e 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -70,6 +70,7 @@ class CompanySerializer(InvenTreeModelSerializer): 'phone', 'address', 'email', + 'currency', 'contact', 'link', 'image', diff --git a/InvenTree/company/templates/company/index.html b/InvenTree/company/templates/company/index.html index 796796528f..025251c883 100644 --- a/InvenTree/company/templates/company/index.html +++ b/InvenTree/company/templates/company/index.html @@ -16,10 +16,7 @@ {% if pagetype == 'manufacturers' and roles.purchase_order.add or pagetype == 'suppliers' and roles.purchase_order.add or pagetype == 'customers' and roles.sales_order.add %}
-
@@ -32,60 +29,49 @@ {% endblock %} {% block js_ready %} {{ block.super }} - $('#new-company').click(function () { - launchModalForm("{{ create_url }}", { - follow: true - }); - }); - $('#new-company-2').click(function() { + $('#new-company').click(function() { + + createCompany({ + fields: { + is_supplier: { + value: {% if pagetype == 'suppliers' %}true{% else %}false{% endif %}, + }, + is_manufacturer: { + value: {% if pagetype == 'manufacturers' %}true{% else %}false{% endif %}, + }, + is_customer: { + value: {% if pagetype == 'customers' %}true{% else %}false{% endif %}, + }, + } + }); + + return; + constructForm( - '{% url "api-build-list" %}', + '{% url "api-company-list" %}', { method: 'POST', - title: '{% trans "Edit Part Details" %}', + title: '{% trans "Create new Company" %}', + follow: true, fields: { - title: { - prefix: `` - }, - reference: {}, - part: { - filters: { - } - }, - quantity: {}, - /* - name: { - onEdit: function() { - console.log('Edited name field'); - } - }, + name: {}, description: {}, - category: { - filters: { - parent: 1, - }, - secondary: { - label: '{% trans "New Category" %}', - }, + website: {}, + address: {}, + currency: {}, + phone: {}, + email: {}, + contact: {}, + is_supplier: { + value: {% if pagetype == 'suppliers' %}true{% else %}false{% endif %}, }, - active: { - onEdit: function() { - console.log('edited active field'); - } + is_manufacturer: { + value: {% if pagetype == 'manufacturers' %}true{% else %}false{% endif %}, + }, + is_customer: { + value: {% if pagetype == 'customers' %}true{% else %}false{% endif %}, }, - purchaseable: {}, - salable: {}, - component: {}, - 'website', - 'address', - 'phone', - 'email', - 'contact', - 'is_supplier', - 'is_manufacturer', - 'is_customer', - */ } } ); diff --git a/InvenTree/company/test_views.py b/InvenTree/company/test_views.py index cdb2d32af9..a2ef75c688 100644 --- a/InvenTree/company/test_views.py +++ b/InvenTree/company/test_views.py @@ -188,21 +188,6 @@ class CompanyViewTest(CompanyViewTestBase): response = self.client.get(reverse('company-index')) self.assertEqual(response.status_code, 200) - def test_company_create(self): - """ - Test the view for creating a company - """ - - # Check that different company types return different form titles - response = self.client.get(reverse('supplier-create'), HTTP_X_REQUESTED_WITH='XMLHttpRequest') - self.assertContains(response, 'Create new Supplier') - - response = self.client.get(reverse('manufacturer-create'), HTTP_X_REQUESTED_WITH='XMLHttpRequest') - self.assertContains(response, 'Create new Manufacturer') - - response = self.client.get(reverse('customer-create'), HTTP_X_REQUESTED_WITH='XMLHttpRequest') - self.assertContains(response, 'Create new Customer') - class ManufacturerPartViewTests(CompanyViewTestBase): """ diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 74a583710a..a5cdcd00a0 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -63,21 +63,18 @@ class CompanyIndex(InvenTreeRoleMixin, ListView): 'title': _('Suppliers'), 'button_text': _('New Supplier'), 'filters': {'is_supplier': 'true'}, - 'create_url': reverse('supplier-create'), 'pagetype': 'suppliers', }, reverse('manufacturer-index'): { 'title': _('Manufacturers'), 'button_text': _('New Manufacturer'), 'filters': {'is_manufacturer': 'true'}, - 'create_url': reverse('manufacturer-create'), 'pagetype': 'manufacturers', }, reverse('customer-index'): { 'title': _('Customers'), 'button_text': _('New Customer'), 'filters': {'is_customer': 'true'}, - 'create_url': reverse('customer-create'), 'pagetype': 'customers', } } @@ -86,7 +83,6 @@ class CompanyIndex(InvenTreeRoleMixin, ListView): 'title': _('Companies'), 'button_text': _('New Company'), 'filters': {}, - 'create_url': reverse('company-create'), 'pagetype': 'companies' } diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js index 078b40f4b9..bd9c1cf458 100644 --- a/InvenTree/templates/js/company.js +++ b/InvenTree/templates/js/company.js @@ -1,5 +1,75 @@ {% load i18n %} +/* + * Launches a form to create a new company. + * As this can be called from many different contexts, + * we abstract it here! + */ +function createCompany(options={}) { + + // Default field set + var fields = { + name: {}, + description: {}, + website: {}, + address: {}, + currency: {}, + phone: {}, + email: {}, + contact: {}, + is_supplier: {}, + is_manufacturer: {}, + is_customer: {} + }; + + // Override / update default fields as required + fields = Object.assign(fields, options.fields || {}); + + constructForm( + '{% url "api-company-list" %}', + { + method: 'POST', + fields: fields, + follow: true, + title: '{% trans "Add new Company" %}', + } + ); +} + + +// Launch form to create a new manufacturer part +function createManufacturerPart(options={}) { + + var fields = { + 'part': { + secondary: { + label: '{% trans "New Part" %}', + } + }, + 'manufacturer': { + secondary: { + label: '{% trans "New Manufacturer" %}', + } + }, + 'MPN': {}, + 'description': {}, + 'link': {}, + }; + + fields = Object.assign(fields, options.fields || {}); + + constructForm( + '{% url "api-manufacturer-part-list" %}', + { + fields: fields, + method: 'POST', + follow: true, + title: '{% trans "Add new Manufacturer Part" %}', + } + ); +} + + function loadCompanyTable(table, url, options={}) { /* * Load company listing data into specified table. diff --git a/InvenTree/templates/js/forms.js b/InvenTree/templates/js/forms.js index 8c74def263..e2ccb096b3 100644 --- a/InvenTree/templates/js/forms.js +++ b/InvenTree/templates/js/forms.js @@ -109,14 +109,24 @@ function getApiEndpointOptions(url, callback, options) { * - */ function constructCreateForm(fields, options) { - + // Check if default values were provided for any fields for (const name in fields) { var field = fields[name]; - if (field.default != null) { - field.value = field.default; + var field_options = options.fields[name] || {}; + + // If a 'value' is not provided for the field, + if (field.value == null) { + + if ('value' in field_options) { + // Client has specified the default value for the field + field.value = field_options.value; + } else if (field.default != null) { + // OPTIONS endpoint provided default value for this field + field.value = field.default; + } } } @@ -278,6 +288,11 @@ function constructFormBody(fields, options) { // Field prefix fields[field].prefix = field_options.prefix; + + // // Field value? + // if (fields[field].value == null) { + // fields[field].value = field_options.value; + // } } }