From bfc5a7dcf89d03173968a345604c7206354b9c8d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 1 Jul 2021 14:44:23 +1000 Subject: [PATCH] Refactor forms for PartTestTemplate model: - Remove old forms - Remove old views - Add detail endpoint for the API --- InvenTree/part/api.py | 10 ++++ InvenTree/part/forms.py | 26 ++-------- InvenTree/part/templates/part/part_tests.html | 52 +++++++++++++------ InvenTree/part/urls.py | 7 --- InvenTree/part/views.py | 50 ------------------ 5 files changed, 50 insertions(+), 95 deletions(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index d9fa77afd4..b31283e191 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -241,6 +241,15 @@ class PartAttachmentDetail(generics.RetrieveUpdateDestroyAPIView, AttachmentMixi serializer_class = part_serializers.PartAttachmentSerializer +class PartTestTemplateDetail(generics.RetrieveUpdateDestroyAPIView): + """ + Detail endpoint for PartTestTemplate model + """ + + queryset = PartTestTemplate.objects.all() + serializer_class = part_serializers.PartTestTemplateSerializer + + class PartTestTemplateList(generics.ListCreateAPIView): """ API endpoint for listing (and creating) a PartTestTemplate. @@ -1036,6 +1045,7 @@ part_api_urls = [ # Base URL for PartTestTemplate API endpoints url(r'^test-template/', include([ + url(r'^(?P\d+)/', PartTestTemplateDetail.as_view(), name='api-part-test-template-detail'), url(r'^$', PartTestTemplateList.as_view(), name='api-part-test-template-list'), ])), diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 38d9b566aa..36a49006b0 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -5,21 +5,21 @@ Django Forms for interacting with Part objects # -*- coding: utf-8 -*- from __future__ import unicode_literals +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from mptt.fields import TreeNodeChoiceField + from InvenTree.forms import HelperForm from InvenTree.helpers import GetExportFormats from InvenTree.fields import RoundingDecimalFormField -from mptt.fields import TreeNodeChoiceField -from django import forms -from django.utils.translation import ugettext_lazy as _ - import common.models from .models import Part, PartCategory, PartRelated from .models import BomItem from .models import PartParameterTemplate, PartParameter from .models import PartCategoryParameterTemplate -from .models import PartTestTemplate from .models import PartSellPriceBreak, PartInternalPriceBreak @@ -65,22 +65,6 @@ class PartImageForm(HelperForm): ] -class EditPartTestTemplateForm(HelperForm): - """ Class for creating / editing a PartTestTemplate object """ - - class Meta: - model = PartTestTemplate - - fields = [ - 'part', - 'test_name', - 'description', - 'required', - 'requires_value', - 'requires_attachment', - ] - - class BomExportForm(forms.Form): """ Simple form to let user set BOM export options, before exporting a BOM (bill of materials) file. diff --git a/InvenTree/part/templates/part/part_tests.html b/InvenTree/part/templates/part/part_tests.html index dbd439afdb..3c131aa1d4 100644 --- a/InvenTree/part/templates/part/part_tests.html +++ b/InvenTree/part/templates/part/part_tests.html @@ -44,34 +44,52 @@ function reloadTable() { } $("#add-test-template").click(function() { - launchModalForm( - "{% url 'part-test-template-create' %}", - { - data: { - part: {{ part.id }}, - }, - success: reloadTable, - } - ); + + constructForm('{% url "api-part-test-template-list" %}', { + method: 'POST', + fields: { + test_name: {}, + description: {}, + required: {}, + requires_value: {}, + requires_attachment: {}, + part: { + value: {{ part.pk }}, + hidden: true, + } + }, + title: '{% trans "Add Test Result Template" %}', + onSuccess: reloadTable + }); }); $("#test-template-table").on('click', '.button-test-edit', function() { - var button = $(this); + var pk = $(this).attr('pk'); - var url = `/part/test-template/${button.attr('pk')}/edit/`; + var url = `/api/part/test-template/${pk}/`; - launchModalForm(url, { - success: reloadTable, + constructForm(url, { + fields: { + test_name: {}, + description: {}, + required: {}, + requires_value: {}, + requires_attachment: {}, + }, + title: '{% trans "Edit Test Result Template" %}', + onSuccess: reloadTable, }); }); $("#test-template-table").on('click', '.button-test-delete', function() { - var button = $(this); + var pk = $(this).attr('pk'); - var url = `/part/test-template/${button.attr('pk')}/delete/`; + var url = `/api/part/test-template/${pk}/`; - launchModalForm(url, { - success: reloadTable, + constructForm(url, { + method: 'DELETE', + title: '{% trans "Delete Test Result Template" %}', + onSuccess: reloadTable, }); }); diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index 489df6c116..44336ab6a7 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -148,13 +148,6 @@ part_urls = [ # Part internal price breaks url(r'^internal-price/', include(internal_price_break_urls)), - # Part test templates - url(r'^test-template/', include([ - url(r'^new/', views.PartTestTemplateCreate.as_view(), name='part-test-template-create'), - url(r'^(?P\d+)/edit/', views.PartTestTemplateEdit.as_view(), name='part-test-template-edit'), - url(r'^(?P\d+)/delete/', views.PartTestTemplateDelete.as_view(), name='part-test-template-delete'), - ])), - # Part parameters url(r'^parameter/', include(part_parameter_urls)), diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 0f0ccd8ba0..78fd0d7a27 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -36,7 +36,6 @@ from .models import PartParameterTemplate, PartParameter from .models import PartCategoryParameterTemplate from .models import BomItem from .models import match_part_names -from .models import PartTestTemplate from .models import PartSellPriceBreak, PartInternalPriceBreak from common.models import InvenTreeSetting @@ -154,55 +153,6 @@ class PartRelatedDelete(AjaxDeleteView): role_required = 'part.change' -class PartTestTemplateCreate(AjaxCreateView): - """ View for creating a PartTestTemplate """ - - model = PartTestTemplate - form_class = part_forms.EditPartTestTemplateForm - ajax_form_title = _("Create Test Template") - - def get_initial(self): - - initials = super().get_initial() - - try: - part_id = self.request.GET.get('part', None) - initials['part'] = Part.objects.get(pk=part_id) - except (ValueError, Part.DoesNotExist): - pass - - return initials - - def get_form(self): - - form = super().get_form() - form.fields['part'].widget = HiddenInput() - - return form - - -class PartTestTemplateEdit(AjaxUpdateView): - """ View for editing a PartTestTemplate """ - - model = PartTestTemplate - form_class = part_forms.EditPartTestTemplateForm - ajax_form_title = _("Edit Test Template") - - def get_form(self): - - form = super().get_form() - form.fields['part'].widget = HiddenInput() - - return form - - -class PartTestTemplateDelete(AjaxDeleteView): - """ View for deleting a PartTestTemplate """ - - model = PartTestTemplate - ajax_form_title = _("Delete Test Template") - - class PartSetCategory(AjaxUpdateView): """ View for settings the part category for multiple parts at once """