From 978b5f869da1ccf7ff836e620846a105e53bf1e3 Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 2 Nov 2020 12:20:29 -0500 Subject: [PATCH] Added checkbox to add parameter template to all categories --- InvenTree/InvenTree/forms.py | 10 +++----- InvenTree/part/forms.py | 5 ++++ InvenTree/part/models.py | 5 +--- InvenTree/part/views.py | 47 +++++++++++++++++++++++++++++++++--- 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/InvenTree/InvenTree/forms.py b/InvenTree/InvenTree/forms.py index 707c0c5c79..43454374ac 100644 --- a/InvenTree/InvenTree/forms.py +++ b/InvenTree/InvenTree/forms.py @@ -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', ), ) diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 81a75a22fb..f553229b5c 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -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', ] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 37788ae56a..55eef73018 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -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)) diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 09eb8b8a4f..e913bda57d 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -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