Added checkbox to add parameter template to all categories

This commit is contained in:
eeintech 2020-11-02 12:20:29 -05:00
parent 3a347fba21
commit 978b5f869d
4 changed files with 53 additions and 14 deletions

View File

@ -201,7 +201,8 @@ class ColorThemeSelectForm(forms.ModelForm):
class SettingCategorySelectForm(forms.ModelForm):
""" Form for setting category settings """
name = forms.ChoiceField(choices=(), required=False)
name = forms.ChoiceField(choices=[('', '-' * 10)] + PartCategory.get_parent_categories(),
required=False)
class Meta:
model = PartCategory
@ -212,9 +213,6 @@ class SettingCategorySelectForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SettingCategorySelectForm, self).__init__(*args, **kwargs)
# Populate category choices
self.fields['name'].choices = PartCategory.get_parent_categories()
self.helper = FormHelper()
# Form rendering
self.helper.form_show_labels = False
@ -222,10 +220,10 @@ class SettingCategorySelectForm(forms.ModelForm):
Div(
Div(Field('name'),
css_class='col-sm-6',
style='width: 200px;'),
style='width: auto;'),
Div(StrictButton(_('Select Category'), css_class='btn btn-primary', type='submit'),
css_class='col-sm-6',
style='width: auto;'),
style='width: auto; padding-left: 0;'),
css_class='row',
),
)

View File

@ -251,12 +251,17 @@ class EditCategoryForm(HelperForm):
class EditCategoryParameterTemplateForm(HelperForm):
""" Form for editing a PartCategoryParameterTemplate object """
add_to_all_categories = forms.BooleanField(required=False,
initial=False,
help_text=_('Add parameter template to all categories'))
class Meta:
model = PartCategoryParameterTemplate
fields = [
'category',
'parameter_template',
'default_value',
'add_to_all_categories',
]

View File

@ -167,13 +167,10 @@ class PartCategory(InvenTreeTree):
def get_parent_categories(cls):
""" Return tuple list of parent (root) categories """
# Store parent categories (add empty label)
parent_categories = [
('', '-' * 10)
]
# Get root nodes
root_categories = cls.objects.filter(level=0)
parent_categories = []
for category in root_categories:
parent_categories.append((category.id, category.name))

View File

@ -7,6 +7,7 @@ from __future__ import unicode_literals
from django.core.exceptions import ValidationError
from django.db import transaction
from django.db.utils import IntegrityError
from django.shortcuts import get_object_or_404
from django.shortcuts import HttpResponseRedirect
from django.utils.translation import gettext_lazy as _
@ -2178,7 +2179,7 @@ class CategoryParameterTemplateCreate(AjaxCreateView):
# Get category
category = self.get_initial()['category']
# Get existing related parts
# Get existing parameter templates
parameters = [template.parameter_template.pk
for template in category.get_parameter_templates()]
@ -2188,13 +2189,51 @@ class CategoryParameterTemplateCreate(AjaxCreateView):
if (choice[0] not in parameters):
updated_choices.append(choice)
# Update choices for related part
# Update choices for parameter templates
form.fields['parameter_template'].choices = updated_choices
except KeyError:
pass
return form
def post(self, request, *args, **kwargs):
""" Capture the POST request
- If the add_to_all_categories object is set, link parameter template to
all categories
"""
form = self.get_form()
valid = form.is_valid()
if valid:
all_categories = form.cleaned_data['add_to_all_categories']
if all_categories:
selected_category = int(self.kwargs.get('pk', 0))
parameter_template = form.cleaned_data['parameter_template']
default_value = form.cleaned_data['default_value']
# Add parameter template and default value to all categories
for category_id, category_name in PartCategory.get_parent_categories():
# Change category_id type to integer
category_id = int(category_id)
# Skip selected category (will be processed in the post call)
if category_id != selected_category:
# Get category
category = PartCategory.objects.get(pk=category_id)
try:
cat_template = PartCategoryParameterTemplate.objects.create(category=category,
parameter_template=parameter_template,
default_value=default_value)
cat_template.save()
except IntegrityError:
# Parameter template is already linked to category
pass
return super().post(request, *args, **kwargs)
class CategoryParameterTemplateEdit(AjaxUpdateView):
""" View for editing a PartCategoryParameterTemplate """
@ -2230,7 +2269,7 @@ class CategoryParameterTemplateEdit(AjaxUpdateView):
# Get category
category = PartCategory.objects.get(pk=self.kwargs.get('pk', None))
# Get existing related parts
# Get existing parameter templates
parameters = [template.parameter_template.pk
for template in category.get_parameter_templates()]
@ -2240,7 +2279,7 @@ class CategoryParameterTemplateEdit(AjaxUpdateView):
if (choice[0] not in parameters):
updated_choices.append(choice)
# Update choices for related part
# Update choices for parameter templates
form.fields['parameter_template'].choices = updated_choices
except KeyError:
pass