diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 88ff2f2599..971373ed9b 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -7,6 +7,7 @@ from __future__ import unicode_literals from InvenTree.forms import HelperForm +from mptt.fields import TreeNodeChoiceField from django import forms from django.utils.translation import ugettext as _ @@ -66,6 +67,12 @@ class EditPartAttachmentForm(HelperForm): ] +class SetPartCategoryForm(forms.Form): + """ Form for setting the category of multiple Part objects """ + + part_category = TreeNodeChoiceField(queryset=PartCategory.objects.all(), required=True, help_text=_('Select part category')) + + class EditPartForm(HelperForm): """ Form for editing a Part object """ diff --git a/InvenTree/part/templates/part/set_category.html b/InvenTree/part/templates/part/set_category.html index 7e2dc801ac..71c8cc9975 100644 --- a/InvenTree/part/templates/part/set_category.html +++ b/InvenTree/part/templates/part/set_category.html @@ -2,57 +2,41 @@ {% block form %}
- {% csrf_token %} {% load crispy_forms_tags %} - -
- -
- - {% if category %} -

Select Part Category

- {% else %} -

Select Part Category

- {% endif %} -
-
- +

Set category for the following parts

- + - {% for part in parts %} - - - - - - - - {% endfor %} -
Part Description Category -
- {% include "hover_image.html" with image=part.image hover=False %} - {{ part.full_name }} - - {{ part.description }} - - {{ part.category.pathstring }} - - -
- -
-{% endblock %} \ No newline at end of file + + {% for part in parts %} + + + + {% include "hover_image.html" with image=part.image hover=False %} + {{ part.full_name }} + + + {{ part.description }} + + + {{ part.category.pathstring }} + + + + + + {% endfor %} + + + {% crispy form %} + + + {% endblock %} \ No newline at end of file diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 7d1a3ab633..87a3959266 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -138,11 +138,12 @@ class PartAttachmentDelete(AjaxDeleteView): } -class PartSetCategory(AjaxView): +class PartSetCategory(AjaxUpdateView): """ View for settings the part category for multiple parts at once """ ajax_template_name = 'part/set_category.html' ajax_form_title = 'Set Part Category' + form_class = part_forms.SetPartCategoryForm category = None parts = [] @@ -157,7 +158,7 @@ class PartSetCategory(AjaxView): else: self.parts = [] - return self.renderJsonResponse(request, context=self.get_context_data()) + return self.renderJsonResponse(request, form=self.get_form(), context=self.get_context_data()) def post(self, request, *args, **kwargs): """ Respond to a POST request to this view """ @@ -196,7 +197,7 @@ class PartSetCategory(AjaxView): for part in self.parts: part.set_category(self.category) - return self.renderJsonResponse(request, data=data, context=self.get_context_data()) + return self.renderJsonResponse(request, data=data, form=self.get_form(), context=self.get_context_data()) def get_context_data(self): """ Return context data for rendering in the form """