From e0e560352ea983f740b5052a7093da3fc528da24 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 21 Jun 2021 16:14:58 +1000 Subject: [PATCH] Add forms / views for ManufacturerPartParameter CRUD --- InvenTree/company/forms.py | 17 ++++- .../company/manufacturer_part_suppliers.html | 11 ++++ InvenTree/company/urls.py | 25 +++++--- InvenTree/company/views.py | 64 ++++++++++++++++++- InvenTree/templates/js/company.js | 48 ++++++++++++++ 5 files changed, 152 insertions(+), 13 deletions(-) diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index 6ffa94b746..80673b4fa4 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -16,7 +16,7 @@ from djmoney.forms.fields import MoneyField from common.settings import currency_code_default -from .models import Company +from .models import Company, ManufacturerPartParameter from .models import ManufacturerPart from .models import SupplierPart from .models import SupplierPriceBreak @@ -105,6 +105,21 @@ class EditManufacturerPartForm(HelperForm): ] +class EditManufacturerPartParameterForm(HelperForm): + """ + Form for creating / editing a ManufacturerPartParameter object + """ + + class Meta: + model = ManufacturerPartParameter + fields = [ + 'manufacturer_part', + 'name', + 'value', + 'units', + ] + + class EditSupplierPartForm(HelperForm): """ Form for editing a SupplierPart object """ diff --git a/InvenTree/company/templates/company/manufacturer_part_suppliers.html b/InvenTree/company/templates/company/manufacturer_part_suppliers.html index 7a3f56a152..9f445ec215 100644 --- a/InvenTree/company/templates/company/manufacturer_part_suppliers.html +++ b/InvenTree/company/templates/company/manufacturer_part_suppliers.html @@ -57,6 +57,17 @@ {% block js_ready %} {{ block.super }} +$('#parameter-create').click(function() { + launchModalForm( + "{% url 'manufacturer-part-parameter-create' %}", + { + data: { + manufacturer_part: {{ part.id }}, + } + } + ); +}); + $('#supplier-create').click(function () { launchModalForm( "{% url 'supplier-part-create' %}", diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index 11f1be5339..51aa81f1c7 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -53,20 +53,25 @@ price_break_urls = [ url(r'^(?P\d+)/delete/', views.PriceBreakDelete.as_view(), name='price-break-delete'), ] -manufacturer_part_detail_urls = [ - url(r'^edit/?', views.ManufacturerPartEdit.as_view(), name='manufacturer-part-edit'), - - url(r'^suppliers/', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_suppliers.html'), name='manufacturer-part-suppliers'), - - url('^.*$', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_suppliers.html'), name='manufacturer-part-detail'), -] - manufacturer_part_urls = [ url(r'^new/?', views.ManufacturerPartCreate.as_view(), name='manufacturer-part-create'), - url(r'delete/', views.ManufacturerPartDelete.as_view(), name='manufacturer-part-delete'), + url(r'^delete/', views.ManufacturerPartDelete.as_view(), name='manufacturer-part-delete'), - url(r'^(?P\d+)/', include(manufacturer_part_detail_urls)), + # URLs for ManufacturerPartParameter views (create / edit / delete) + url(r'^parameter/', include([ + url(r'^new/', views.ManufacturerPartParameterCreate.as_view(), name='manufacturer-part-parameter-create'), + url(r'^(?P\d)/', include([ + url(r'^edit/', views.ManufacturerPartParameterEdit.as_view(), name='manufacturer-part-parameter-edit'), + url(r'^delete/', views.ManufacturerPartParameterDelete.as_view(), name='manufacturer-part-parameter-delete'), + ])), + ])), + + url(r'^(?P\d+)/', include([ + url(r'^edit/?', views.ManufacturerPartEdit.as_view(), name='manufacturer-part-edit'), + url(r'^suppliers/', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_suppliers.html'), name='manufacturer-part-suppliers'), + url('^.*$', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_suppliers.html'), name='manufacturer-part-detail'), + ])), ] supplier_part_detail_urls = [ diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 6de1439823..b2f655737f 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -23,14 +23,14 @@ from InvenTree.views import AjaxCreateView, AjaxUpdateView, AjaxDeleteView from InvenTree.helpers import str2bool from InvenTree.views import InvenTreeRoleMixin -from .models import Company +from .models import Company, ManufacturerPartParameter from .models import ManufacturerPart from .models import SupplierPart from .models import SupplierPriceBreak from part.models import Part -from .forms import EditCompanyForm +from .forms import EditCompanyForm, EditManufacturerPartParameterForm from .forms import CompanyImageForm from .forms import EditManufacturerPartForm from .forms import EditSupplierPartForm @@ -504,6 +504,66 @@ class ManufacturerPartDelete(AjaxDeleteView): return self.renderJsonResponse(self.request, data=data, form=self.get_form()) +class ManufacturerPartParameterCreate(AjaxCreateView): + """ + View for creating a new ManufacturerPartParameter object + """ + + model = ManufacturerPartParameter + form_class = EditManufacturerPartParameterForm + ajax_form_title = _('Add Manufacturer Part Parameter') + + def get_form(self): + + form = super().get_form() + + # Hide the manufacturer_part field if specified + if form.initial.get('manufacturer_part', None): + form.fields['manufacturer_part'].widget = HiddenInput() + + return form + + def get_initial(self): + + initials = super().get_initial().copy() + + manufacturer_part = self.get_param('manufacturer_part') + + if manufacturer_part: + try: + initials['manufacturer_part'] = ManufacturerPartParameter.objects.get(pk=manufacturer_part) + except (ValueError, ManufacturerPartParameter.DoesNotExist): + pass + + return initials + + +class ManufacturerPartParameterEdit(AjaxUpdateView): + """ + View for editing a ManufacturerPartParameter object + """ + + model = ManufacturerPartParameter + form_class = EditManufacturerPartParameterForm + ajax_form_title = _('Edit Manufacturer Part Parameter') + + def get_form(self): + + form = super().get_form() + + form.fields['manufacturer_part'].widget = HiddenInput() + + return form + + +class ManufacturerPartParameterDelete(AjaxDeleteView): + """ + View for deleting a ManufacturerPartParameter object + """ + + model = ManufacturerPartParameter + + class SupplierPartDetail(DetailView): """ Detail view for SupplierPart """ model = SupplierPart diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js index f0b0b4bd37..078b40f4b9 100644 --- a/InvenTree/templates/js/company.js +++ b/InvenTree/templates/js/company.js @@ -228,6 +228,7 @@ function loadManufacturerPartParameterTable(table, url, options) { { checkbox: true, switchable: false, + visible: false, }, { field: 'name', @@ -246,8 +247,55 @@ function loadManufacturerPartParameterTable(table, url, options) { title: '{% trans "Units" %}', switchable: true, sortable: true, + }, + { + field: 'actions', + title: '', + switchable: false, + sortable: false, + formatter: function(value, row) { + + var pk = row.pk; + + var html = `
`; + + html += makeIconButton('fa-edit icon-blue', 'button-parameter-edit', pk, '{% trans "Edit parameter" %}'); + html += makeIconButton('fa-trash-alt icon-red', 'button-parameter-delete', pk, '{% trans "Delete parameter" %}'); + + html += `
`; + + return html; + } } ], + onPostBody: function() { + // Setup callback functions + $(table).find('.button-parameter-edit').click(function() { + var pk = $(this).attr('pk'); + + launchModalForm( + `/manufacturer-part/parameter/${pk}/edit/`, + { + success: function() { + $(table).bootstrapTable('refresh'); + } + } + ); + + }); + $(table).find('.button-parameter-delete').click(function() { + var pk = $(this).attr('pk'); + + launchModalForm( + `/manufacturer-part/parameter/${pk}/delete/`, + { + success: function() { + $(table).bootstrapTable('refresh'); + } + } + ); + }); + } }); }