From c68c79ea43b25e9bd1d60c219e51d97b366a54a2 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Aug 2019 14:14:21 +1000 Subject: [PATCH] Create view / form / URL for PartParameter creation --- InvenTree/part/forms.py | 13 +++++++ InvenTree/part/models.py | 5 +++ InvenTree/part/templates/part/params.html | 46 ++++++++++++++++------- InvenTree/part/urls.py | 7 ++++ InvenTree/part/views.py | 10 +++++ 5 files changed, 68 insertions(+), 13 deletions(-) diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 0d82183a93..c26d670496 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -11,6 +11,7 @@ from django import forms from .models import Part, PartCategory, PartAttachment from .models import BomItem +from .models import PartParameterTemplate, PartParameter class PartImageForm(HelperForm): @@ -98,6 +99,18 @@ class EditPartForm(HelperForm): ] +class EditPartParameterForm(HelperForm): + """ Form for editing a PartParameter object """ + + class Meta: + model = PartParameter + fields = [ + 'part', + 'template', + 'data' + ] + + class EditCategoryForm(HelperForm): """ Form for editing a PartCategory object """ diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index f1a1747e44..aa2aed98a6 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -1066,6 +1066,11 @@ class PartParameterTemplate(models.Model): except PartParameterTemplate.DoesNotExist: pass + @property + def instance_count(self): + """ Return the number of instances of this Parameter Template """ + return self.instances.count() + name = models.CharField(max_length=100, help_text='Parameter Name') units = models.CharField(max_length=25, help_text='Parameter Units', blank=True) diff --git a/InvenTree/part/templates/part/params.html b/InvenTree/part/templates/part/params.html index 8719246223..954541feb2 100644 --- a/InvenTree/part/templates/part/params.html +++ b/InvenTree/part/templates/part/params.html @@ -7,20 +7,29 @@

Part Parameters


+
+
+ +
+
- - - - - - - {% for param in part.get_parameters %} - - - - - - {% endfor %} +
NameValueUnits
{{ param.template.name }}{{ param.data }}{{ param.template.units }}
+ + + + + + + + + {% for param in part.get_parameters %} + + + + + + {% endfor %} +
NameValueUnits
{{ param.template.name }}{{ param.data }}{{ param.template.units }}
@@ -29,4 +38,15 @@ {% block js_ready %} {{ block.super }} + $('#param-table').bootstrapTable({ + search: true, + sortable: true, + }); + + $('#param-create').click(function() { + launchModalForm("{% url 'part-param-create' %}?part={{ part.id }}", { + reload: true, + }); + }); + {% endblock %} \ No newline at end of file diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index 64eebd6dc1..f892cc566b 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -18,6 +18,10 @@ part_attachment_urls = [ url(r'^(?P\d+)/delete/?', views.PartAttachmentDelete.as_view(), name='part-attachment-delete'), ] +part_parameter_urls = [ + url('^new/?', views.PartParameterCreate.as_view(), name='part-param-create'), +] + part_detail_urls = [ url(r'^edit/?', views.PartEdit.as_view(), name='part-edit'), url(r'^delete/?', views.PartDelete.as_view(), name='part-delete'), @@ -91,6 +95,9 @@ part_urls = [ # Part attachments url(r'^attachment/', include(part_attachment_urls)), + # Part parameters + url(r'^parameter/', include(part_parameter_urls)), + # Change category for multiple parts url(r'^set-category/?', views.PartSetCategory.as_view(), name='part-set-category'), diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 3b475cec7b..a6e1fe00aa 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -19,6 +19,7 @@ import tablib from fuzzywuzzy import fuzz from .models import PartCategory, Part, PartAttachment +from .models import PartParameterTemplate, PartParameter from .models import BomItem from .models import match_part_names @@ -1396,6 +1397,15 @@ class PartPricing(AjaxView): return self.renderJsonResponse(request, self.form_class(), data=data, context=self.get_pricing(quantity)) +class PartParameterCreate(AjaxCreateView): + """ View for creating a new PartParameter """ + + model = PartParameter + form_class = part_forms.EditPartParameterForm + ajax_form_title = 'Create Part Parameter' + + + class CategoryDetail(DetailView): """ Detail view for PartCategory """ model = PartCategory