mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 05:05:42 +00:00 
			
		
		
		
	Added form to select category in settings and update context data
This commit is contained in:
		| @@ -12,6 +12,7 @@ from crispy_forms.layout import Layout, Field | |||||||
| from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton, Div | from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton, Div | ||||||
| from django.contrib.auth.models import User | from django.contrib.auth.models import User | ||||||
| from common.models import ColorTheme | from common.models import ColorTheme | ||||||
|  | from part.models import PartCategory | ||||||
|  |  | ||||||
|  |  | ||||||
| class HelperForm(forms.ModelForm): | class HelperForm(forms.ModelForm): | ||||||
| @@ -195,3 +196,36 @@ class ColorThemeSelectForm(forms.ModelForm): | |||||||
|                 css_class='row', |                 css_class='row', | ||||||
|             ), |             ), | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class SettingCategorySelectForm(forms.ModelForm): | ||||||
|  |     """ Form for setting category settings """ | ||||||
|  |  | ||||||
|  |     name = forms.ChoiceField(choices=(), required=False) | ||||||
|  |  | ||||||
|  |     class Meta: | ||||||
|  |         model = PartCategory | ||||||
|  |         fields = [ | ||||||
|  |             'name' | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |     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 | ||||||
|  |         self.helper.layout = Layout( | ||||||
|  |             Div( | ||||||
|  |                 Div(Field('name'), | ||||||
|  |                     css_class='col-sm-6', | ||||||
|  |                     style='width: 200px;'), | ||||||
|  |                 Div(StrictButton(_('Select Category'), css_class='btn btn-primary', type='submit'), | ||||||
|  |                     css_class='col-sm-6', | ||||||
|  |                     style='width: auto;'), | ||||||
|  |                 css_class='row', | ||||||
|  |             ), | ||||||
|  |         ) | ||||||
|   | |||||||
| @@ -36,7 +36,8 @@ from django.views.generic.base import RedirectView | |||||||
| from rest_framework.documentation import include_docs_urls | from rest_framework.documentation import include_docs_urls | ||||||
|  |  | ||||||
| from .views import IndexView, SearchView, DatabaseStatsView | from .views import IndexView, SearchView, DatabaseStatsView | ||||||
| from .views import SettingsView, EditUserView, SetPasswordView, ColorThemeSelectView | from .views import SettingsView, EditUserView, SetPasswordView | ||||||
|  | from .views import ColorThemeSelectView, SettingCategorySelectView | ||||||
| from .views import DynamicJsView | from .views import DynamicJsView | ||||||
|  |  | ||||||
| from common.views import SettingEdit | from common.views import SettingEdit | ||||||
| @@ -75,7 +76,7 @@ settings_urls = [ | |||||||
|     |     | ||||||
|     url(r'^global/?', SettingsView.as_view(template_name='InvenTree/settings/global.html'), name='settings-global'), |     url(r'^global/?', SettingsView.as_view(template_name='InvenTree/settings/global.html'), name='settings-global'), | ||||||
|     url(r'^currency/?', SettingsView.as_view(template_name='InvenTree/settings/currency.html'), name='settings-currency'), |     url(r'^currency/?', SettingsView.as_view(template_name='InvenTree/settings/currency.html'), name='settings-currency'), | ||||||
|     url(r'^category/?', SettingsView.as_view(template_name='InvenTree/settings/category.html'), name='settings-category'), |     url(r'^category/?', SettingCategorySelectView.as_view(), name='settings-category'), | ||||||
|     url(r'^part/?', SettingsView.as_view(template_name='InvenTree/settings/part.html'), name='settings-part'), |     url(r'^part/?', SettingsView.as_view(template_name='InvenTree/settings/part.html'), name='settings-part'), | ||||||
|     url(r'^stock/?', SettingsView.as_view(template_name='InvenTree/settings/stock.html'), name='settings-stock'), |     url(r'^stock/?', SettingsView.as_view(template_name='InvenTree/settings/stock.html'), name='settings-stock'), | ||||||
|     url(r'^build/?', SettingsView.as_view(template_name='InvenTree/settings/build.html'), name='settings-build'), |     url(r'^build/?', SettingsView.as_view(template_name='InvenTree/settings/build.html'), name='settings-build'), | ||||||
|   | |||||||
| @@ -24,7 +24,8 @@ from stock.models import StockLocation, StockItem | |||||||
| from common.models import InvenTreeSetting, ColorTheme | from common.models import InvenTreeSetting, ColorTheme | ||||||
| from users.models import check_user_role, RuleSet | from users.models import check_user_role, RuleSet | ||||||
|  |  | ||||||
| from .forms import DeleteForm, EditUserForm, SetPasswordForm, ColorThemeSelectForm | from .forms import DeleteForm, EditUserForm, SetPasswordForm | ||||||
|  | from .forms import ColorThemeSelectForm, SettingCategorySelectForm | ||||||
| from .helpers import str2bool | from .helpers import str2bool | ||||||
|  |  | ||||||
| from rest_framework import views | from rest_framework import views | ||||||
| @@ -775,6 +776,44 @@ class ColorThemeSelectView(FormView): | |||||||
|             return self.form_invalid(form) |             return self.form_invalid(form) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class SettingCategorySelectView(FormView): | ||||||
|  |     """ View for selecting categories in settings """ | ||||||
|  |  | ||||||
|  |     form_class = SettingCategorySelectForm | ||||||
|  |     success_url = reverse_lazy('settings-category') | ||||||
|  |     template_name = "InvenTree/settings/category.html" | ||||||
|  |  | ||||||
|  |     def get_initial(self): | ||||||
|  |         """ Set category selection """ | ||||||
|  |  | ||||||
|  |         initial = super(SettingCategorySelectView, self).get_initial() | ||||||
|  |  | ||||||
|  |         category = self.request.GET.get('category', None) | ||||||
|  |         if category: | ||||||
|  |             initial['name'] = category | ||||||
|  |  | ||||||
|  |         return initial | ||||||
|  |  | ||||||
|  |     def post(self, request, *args, **kwargs): | ||||||
|  |         """ Handle POST request (which contains category selection). | ||||||
|  |  | ||||||
|  |         Pass the selected category to the page template | ||||||
|  |         """ | ||||||
|  |  | ||||||
|  |         form = self.get_form() | ||||||
|  |  | ||||||
|  |         if form.is_valid(): | ||||||
|  |             category = form.cleaned_data['name'] | ||||||
|  |  | ||||||
|  |             context = self.get_context_data() | ||||||
|  |  | ||||||
|  |             context['category'] = category | ||||||
|  |  | ||||||
|  |             return super(SettingCategorySelectView, self).render_to_response(context) | ||||||
|  |  | ||||||
|  |         return self.form_invalid(form) | ||||||
|  |  | ||||||
|  |  | ||||||
| class DatabaseStatsView(AjaxView): | class DatabaseStatsView(AjaxView): | ||||||
|     """ View for displaying database statistics """ |     """ View for displaying database statistics """ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -179,6 +179,11 @@ class PartCategory(InvenTreeTree): | |||||||
|  |  | ||||||
|         return parent_categories |         return parent_categories | ||||||
|  |  | ||||||
|  |     def get_parameter_templates(self): | ||||||
|  |         """ Return parameter templates associated to category """ | ||||||
|  |  | ||||||
|  |         return PartCategoryParameterTemplate.objects.filter(category=self.id) | ||||||
|  |  | ||||||
|  |  | ||||||
| @receiver(pre_delete, sender=PartCategory, dispatch_uid='partcategory_delete_log') | @receiver(pre_delete, sender=PartCategory, dispatch_uid='partcategory_delete_log') | ||||||
| def before_delete_part_category(sender, instance, using, **kwargs): | def before_delete_part_category(sender, instance, using, **kwargs): | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| {% load i18n %} | {% load i18n %} | ||||||
|  |  | ||||||
| {% block tabs %} | {% block tabs %} | ||||||
| {% include "InvenTree/settings/tabs.html" with tab='part' %} | {% include "InvenTree/settings/tabs.html" with tab='category' %} | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
| {% block subtitle %} | {% block subtitle %} | ||||||
| @@ -11,9 +11,16 @@ | |||||||
|  |  | ||||||
| {% block settings %} | {% block settings %} | ||||||
|  |  | ||||||
| <h4>{% trans "Category Parameter Templates" %}</h4> | <form action="{% url 'settings-category' %}" method="post"> | ||||||
|  |     {% csrf_token %} | ||||||
|  |     {% load crispy_forms_tags %} | ||||||
|  |     {% crispy form %} | ||||||
|  | </form> | ||||||
|  |  | ||||||
| <h5>{% trans "Category: XXX (id = 1)" %}</h5> | {% if category %} | ||||||
|  | <hr> | ||||||
|  |  | ||||||
|  | <h4>{% trans "Category Parameter Templates" %}</h4> | ||||||
|  |  | ||||||
| <div id='param-buttons'> | <div id='param-buttons'> | ||||||
|     <button class='btn btn-success' id='new-param'> |     <button class='btn btn-success' id='new-param'> | ||||||
| @@ -23,18 +30,20 @@ | |||||||
|  |  | ||||||
| <table class='table table-striped table-condensed' id='param-table' data-toolbar='#param-buttons'> | <table class='table table-striped table-condensed' id='param-table' data-toolbar='#param-buttons'> | ||||||
| </table> | </table> | ||||||
|  | {% endif %} | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
| {% block js_ready %} | {% block js_ready %} | ||||||
| {{ block.super }} | {{ block.super }} | ||||||
|  | {% if category %} | ||||||
|  |  | ||||||
| 	$("#new-param").click(function() { | 	$("#new-param").click(function() { | ||||||
|         launchModalForm("{% url 'category-param-template-create' 1 %}", { |         launchModalForm("{% url 'category-param-template-create' category %}", { | ||||||
|             success: function() { |             success: function() { | ||||||
|                 $("#param-table").bootstrapTable('refresh'); |                 $("#param-table").bootstrapTable('refresh'); | ||||||
|             }, |             }, | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
|  |      | ||||||
| {% endblock %} | {% endif %} | ||||||
|  | {% endblock %} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user