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
+
-
-
- Name |
- Value |
- Units |
-
- {% for param in part.get_parameters %}
-
- {{ param.template.name }} |
- {{ param.data }} |
- {{ param.template.units }} |
-
- {% endfor %}
+
+
+
+ Name |
+ Value |
+ Units |
+
+
+
+ {% for param in part.get_parameters %}
+
+ {{ param.template.name }} |
+ {{ param.data }} |
+ {{ param.template.units }} |
+
+ {% endfor %}
+
@@ -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