Refactor "CreatePartCategory" form to API

(cherry picked from commit 06ff961564)
This commit is contained in:
Oliver 2021-08-04 11:33:20 +10:00
parent 8daf601f00
commit 83d8226ad6
5 changed files with 46 additions and 110 deletions

View File

@ -240,32 +240,20 @@
}); });
$("#cat-create").click(function() { $("#cat-create").click(function() {
launchModalForm(
"{% url 'category-create' %}", var fields = categoryFields();
{
follow: true, {% if category %}
data: { fields.parent.value = {{ category.pk }};
{% if category %} {% endif %}
category: {{ category.id }}
{% endif %} constructForm('{% url "api-part-category-list" %}', {
}, fields: fields,
secondary: [ method: 'POST',
{ title: '{% trans "Create Part Category" %}',
field: 'default_location', follow: true,
label: '{% trans "New Location" %}', });
title: '{% trans "Create new location" %}', });
url: "{% url 'stock-location-create' %}",
},
{
field: 'parent',
label: '{% trans "New Category" %}',
title: '{% trans "Create new category" %}',
url: "{% url 'category-create' %}",
},
]
}
);
})
$("#part-export").click(function() { $("#part-export").click(function() {
@ -286,12 +274,6 @@
{% endif %} {% endif %}
}, },
secondary: [ secondary: [
{
field: 'category',
label: '{% trans "New Category" %}',
title: '{% trans "Create new Part Category" %}',
url: "{% url 'category-create' %}",
},
{ {
field: 'default_location', field: 'default_location',
label: '{% trans "New Location" %}', label: '{% trans "New Location" %}',
@ -307,24 +289,7 @@
{% if category %} {% if category %}
$("#cat-edit").click(function () { $("#cat-edit").click(function () {
constructForm( editCategory({{ category.pk }});
'{% url "api-part-category-detail" category.pk %}',
{
fields: {
name: {},
description: {},
parent: {
help_text: '{% trans "Select parent category" %}',
},
default_location: {},
default_keywords: {
icon: 'fa-key',
}
},
title: '{% trans "Edit Part Category" %}',
reload: true
}
);
}); });
{% if category.parent %} {% if category.parent %}

View File

@ -243,19 +243,6 @@ class PartQRTest(PartViewTestCase):
class CategoryTest(PartViewTestCase): class CategoryTest(PartViewTestCase):
""" Tests for PartCategory related views """ """ Tests for PartCategory related views """
def test_create(self):
""" Test view for creating a new category """
response = self.client.get(reverse('category-create'), {'category': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
self.assertEqual(response.status_code, 200)
def test_create_invalid_parent(self):
""" test creation of a new category with an invalid parent """
response = self.client.get(reverse('category-create'), {'category': 9999}, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
# Form should still return OK
self.assertEqual(response.status_code, 200)
def test_set_category(self): def test_set_category(self):
""" Test that the "SetCategory" view works """ """ Test that the "SetCategory" view works """

View File

@ -65,9 +65,6 @@ category_parameter_urls = [
category_urls = [ category_urls = [
# Create a new category
url(r'^new/', views.CategoryCreate.as_view(), name='category-create'),
# Top level subcategory display # Top level subcategory display
url(r'^subcategory/', views.PartIndex.as_view(template_name='part/subcategory.html'), name='category-index-subcategory'), url(r'^subcategory/', views.PartIndex.as_view(template_name='part/subcategory.html'), name='category-index-subcategory'),

View File

@ -12,7 +12,6 @@ from django.db.utils import IntegrityError
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.shortcuts import HttpResponseRedirect from django.shortcuts import HttpResponseRedirect
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.urls import reverse, reverse_lazy
from django.views.generic import DetailView, ListView from django.views.generic import DetailView, ListView
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from django.forms import HiddenInput, CheckboxInput from django.forms import HiddenInput, CheckboxInput
@ -1905,49 +1904,6 @@ class CategoryDelete(AjaxDeleteView):
} }
class CategoryCreate(AjaxCreateView):
""" Create view to make a new PartCategory """
model = PartCategory
ajax_form_action = reverse_lazy('category-create')
ajax_form_title = _('Create new part category')
ajax_template_name = 'modal_form.html'
form_class = part_forms.EditCategoryForm
def get_context_data(self, **kwargs):
""" Add extra context data to template.
- If parent category provided, pass the category details to the template
"""
context = super(CategoryCreate, self).get_context_data(**kwargs).copy()
parent_id = self.request.GET.get('category', None)
if parent_id:
try:
context['category'] = PartCategory.objects.get(pk=parent_id)
except PartCategory.DoesNotExist:
pass
return context
def get_initial(self):
""" Get initial data for new PartCategory
- If parent provided, pre-fill the parent category
"""
initials = super(CategoryCreate, self).get_initial().copy()
parent_id = self.request.GET.get('category', None)
if parent_id:
try:
initials['parent'] = PartCategory.objects.get(pk=parent_id)
except PartCategory.DoesNotExist:
pass
return initials
class CategoryParameterTemplateCreate(AjaxCreateView): class CategoryParameterTemplateCreate(AjaxCreateView):
""" View for creating a new PartCategoryParameterTemplate """ """ View for creating a new PartCategoryParameterTemplate """

View File

@ -14,6 +14,37 @@ function yesNoLabel(value) {
} }
function categoryFields() {
return {
parent: {
help_text: '{% trans "Parent part category" %}',
},
name: {},
description: {},
default_location: {},
default_keywords: {
icon: 'fa-key',
}
};
}
// Edit a PartCategory via the API
function editCategory(pk, options={}) {
var url = `/api/part/category/${pk}/`;
var fields = categoryFields();
constructForm(url, {
fields: fields,
title: '{% trans "Edit Part Category" %}',
reload: true,
});
}
function editPart(pk, options={}) { function editPart(pk, options={}) {
var url = `/api/part/${pk}/`; var url = `/api/part/${pk}/`;