mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Refactor forms for editing and deleting a PartParameter
- PartParameters now loaded using the API, not pre-rendered
This commit is contained in:
parent
cbd291849c
commit
cbf0e0bd4a
@ -1115,10 +1115,10 @@ part_api_urls = [
|
|||||||
|
|
||||||
# Base URL for PartParameter API endpoints
|
# Base URL for PartParameter API endpoints
|
||||||
url(r'^parameter/', include([
|
url(r'^parameter/', include([
|
||||||
url(r'^template/$', PartParameterTemplateList.as_view(), name='api-part-param-template-list'),
|
url(r'^template/$', PartParameterTemplateList.as_view(), name='api-part-parameter-template-list'),
|
||||||
|
|
||||||
url(r'^(?P<pk>\d+)/', PartParameterDetail.as_view(), name='api-part-param-detail'),
|
url(r'^(?P<pk>\d+)/', PartParameterDetail.as_view(), name='api-part-parameter-detail'),
|
||||||
url(r'^.*$', PartParameterList.as_view(), name='api-part-param-list'),
|
url(r'^.*$', PartParameterList.as_view(), name='api-part-parameter-list'),
|
||||||
])),
|
])),
|
||||||
|
|
||||||
url(r'^thumbs/', include([
|
url(r'^thumbs/', include([
|
||||||
|
@ -2164,7 +2164,7 @@ class PartParameterTemplate(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_api_url():
|
def get_api_url():
|
||||||
return reverse('api-part-param-template-list')
|
return reverse('api-part-parameter-template-list')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
s = str(self.name)
|
s = str(self.name)
|
||||||
@ -2205,7 +2205,7 @@ class PartParameter(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_api_url():
|
def get_api_url():
|
||||||
return reverse('api-part-param-list')
|
return reverse('api-part-parameter-list')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
# String representation of a PartParameter (used in the admin interface)
|
# String representation of a PartParameter (used in the admin interface)
|
||||||
|
@ -508,19 +508,6 @@ class BomItemSerializer(InvenTreeModelSerializer):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class PartParameterSerializer(InvenTreeModelSerializer):
|
|
||||||
""" JSON serializers for the PartParameter model """
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = PartParameter
|
|
||||||
fields = [
|
|
||||||
'pk',
|
|
||||||
'part',
|
|
||||||
'template',
|
|
||||||
'data'
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class PartParameterTemplateSerializer(InvenTreeModelSerializer):
|
class PartParameterTemplateSerializer(InvenTreeModelSerializer):
|
||||||
""" JSON serializer for the PartParameterTemplate model """
|
""" JSON serializer for the PartParameterTemplate model """
|
||||||
|
|
||||||
@ -533,6 +520,22 @@ class PartParameterTemplateSerializer(InvenTreeModelSerializer):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class PartParameterSerializer(InvenTreeModelSerializer):
|
||||||
|
""" JSON serializers for the PartParameter model """
|
||||||
|
|
||||||
|
template_detail = PartParameterTemplateSerializer(source='template', many=False, read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = PartParameter
|
||||||
|
fields = [
|
||||||
|
'pk',
|
||||||
|
'part',
|
||||||
|
'template',
|
||||||
|
'template_detail',
|
||||||
|
'data'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class CategoryParameterTemplateSerializer(InvenTreeModelSerializer):
|
class CategoryParameterTemplateSerializer(InvenTreeModelSerializer):
|
||||||
""" Serializer for PartCategoryParameterTemplate """
|
""" Serializer for PartCategoryParameterTemplate """
|
||||||
|
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
{% extends "modal_delete_form.html" %}
|
|
||||||
|
|
||||||
{% block pre_form_content %}
|
|
||||||
Are you sure you want to remove this parameter?
|
|
||||||
{% endblock %}
|
|
@ -21,41 +21,23 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table id='param-table' class='table table-condensed table-striped' data-toolbar='#button-toolbar'>
|
<table id='parameter-table' class='table table-condensed table-striped' data-toolbar="#button-toolbar"></table>
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th data-field='name' data-serachable='true'>{% trans "Name" %}</th>
|
|
||||||
<th data-field='value' data-searchable='true'>{% trans "Value" %}</th>
|
|
||||||
<th data-field='units' data-searchable='true'>{% trans "Units" %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for param in part.get_parameters %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ param.template.name }}</td>
|
|
||||||
<td>{{ param.data }}</td>
|
|
||||||
<td>
|
|
||||||
{{ param.template.units }}
|
|
||||||
<div class='btn-group' style='float: right;'>
|
|
||||||
{% if roles.part.change %}
|
|
||||||
<button title='{% trans "Edit" %}' class='btn btn-default btn-glyph param-edit' url="{% url 'part-param-edit' param.id %}" type='button'><span class='fas fa-edit'/></button>
|
|
||||||
{% endif %}
|
|
||||||
{% if roles.part.change %}
|
|
||||||
<button title='{% trans "Delete" %}' class='btn btn-default btn-glyph param-delete' url="{% url 'part-param-delete' param.id %}" type='button'><span class='fas fa-trash-alt icon-red'/></button>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block js_ready %}
|
{% block js_ready %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
|
|
||||||
|
loadPartParameterTable(
|
||||||
|
'#parameter-table',
|
||||||
|
'{% url "api-part-parameter-list" %}',
|
||||||
|
{
|
||||||
|
params: {
|
||||||
|
part: {{ part.pk }},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
$('#param-table').inventreeTable({
|
$('#param-table').inventreeTable({
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -805,7 +805,7 @@ class PartParameterTest(InvenTreeAPITestCase):
|
|||||||
Test for listing part parameters
|
Test for listing part parameters
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = reverse('api-part-param-list')
|
url = reverse('api-part-parameter-list')
|
||||||
|
|
||||||
response = self.client.get(url, format='json')
|
response = self.client.get(url, format='json')
|
||||||
|
|
||||||
@ -838,7 +838,7 @@ class PartParameterTest(InvenTreeAPITestCase):
|
|||||||
Test that we can create a param via the API
|
Test that we can create a param via the API
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = reverse('api-part-param-list')
|
url = reverse('api-part-parameter-list')
|
||||||
|
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
url,
|
url,
|
||||||
@ -860,7 +860,7 @@ class PartParameterTest(InvenTreeAPITestCase):
|
|||||||
Tests for the PartParameter detail endpoint
|
Tests for the PartParameter detail endpoint
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = reverse('api-part-param-detail', kwargs={'pk': 5})
|
url = reverse('api-part-parameter-detail', kwargs={'pk': 5})
|
||||||
|
|
||||||
response = self.client.get(url)
|
response = self.client.get(url)
|
||||||
|
|
||||||
|
@ -35,8 +35,6 @@ part_parameter_urls = [
|
|||||||
url(r'^template/(?P<pk>\d+)/delete/', views.PartParameterTemplateDelete.as_view(), name='part-param-template-edit'),
|
url(r'^template/(?P<pk>\d+)/delete/', views.PartParameterTemplateDelete.as_view(), name='part-param-template-edit'),
|
||||||
|
|
||||||
url(r'^new/', views.PartParameterCreate.as_view(), name='part-param-create'),
|
url(r'^new/', views.PartParameterCreate.as_view(), name='part-param-create'),
|
||||||
url(r'^(?P<pk>\d+)/edit/', views.PartParameterEdit.as_view(), name='part-param-edit'),
|
|
||||||
url(r'^(?P<pk>\d+)/delete/', views.PartParameterDelete.as_view(), name='part-param-delete'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
part_detail_urls = [
|
part_detail_urls = [
|
||||||
|
@ -2307,28 +2307,6 @@ class PartParameterCreate(AjaxCreateView):
|
|||||||
return form
|
return form
|
||||||
|
|
||||||
|
|
||||||
class PartParameterEdit(AjaxUpdateView):
|
|
||||||
""" View for editing a PartParameter """
|
|
||||||
|
|
||||||
model = PartParameter
|
|
||||||
form_class = part_forms.EditPartParameterForm
|
|
||||||
ajax_form_title = _('Edit Part Parameter')
|
|
||||||
|
|
||||||
def get_form(self):
|
|
||||||
|
|
||||||
form = super().get_form()
|
|
||||||
|
|
||||||
return form
|
|
||||||
|
|
||||||
|
|
||||||
class PartParameterDelete(AjaxDeleteView):
|
|
||||||
""" View for deleting a PartParameter """
|
|
||||||
|
|
||||||
model = PartParameter
|
|
||||||
ajax_template_name = 'part/param_delete.html'
|
|
||||||
ajax_form_title = _('Delete Part Parameter')
|
|
||||||
|
|
||||||
|
|
||||||
class CategoryDetail(InvenTreeRoleMixin, DetailView):
|
class CategoryDetail(InvenTreeRoleMixin, DetailView):
|
||||||
""" Detail view for PartCategory """
|
""" Detail view for PartCategory """
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@
|
|||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
|
|
||||||
$("#param-table").inventreeTable({
|
$("#param-table").inventreeTable({
|
||||||
url: "{% url 'api-part-param-template-list' %}",
|
url: "{% url 'api-part-parameter-template-list' %}",
|
||||||
queryParams: {
|
queryParams: {
|
||||||
ordering: 'name',
|
ordering: 'name',
|
||||||
},
|
},
|
||||||
|
@ -741,19 +741,19 @@ function handleFormSuccess(response, options) {
|
|||||||
var cache = (options.follow && response.url) || options.redirect || options.reload;
|
var cache = (options.follow && response.url) || options.redirect || options.reload;
|
||||||
|
|
||||||
// Display any messages
|
// Display any messages
|
||||||
if (response.success) {
|
if (response && response.success) {
|
||||||
showAlertOrCache("alert-success", response.success, cache);
|
showAlertOrCache("alert-success", response.success, cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.info) {
|
if (response && response.info) {
|
||||||
showAlertOrCache("alert-info", response.info, cache);
|
showAlertOrCache("alert-info", response.info, cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.warning) {
|
if (response && response.warning) {
|
||||||
showAlertOrCache("alert-warning", response.warning, cache);
|
showAlertOrCache("alert-warning", response.warning, cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.danger) {
|
if (response && response.danger) {
|
||||||
showAlertOrCache("alert-danger", response.danger, cache);
|
showAlertOrCache("alert-danger", response.danger, cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,6 +220,107 @@ function loadSimplePartTable(table, url, options={}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function loadPartParameterTable(table, url, options) {
|
||||||
|
|
||||||
|
var params = options.params || {};
|
||||||
|
|
||||||
|
// Load filters
|
||||||
|
var filters = loadTableFilters("part-parameters");
|
||||||
|
|
||||||
|
for (var key in params) {
|
||||||
|
filters[key] = params[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
// setupFilterLsit("#part-parameters", $(table));
|
||||||
|
|
||||||
|
$(table).inventreeTable({
|
||||||
|
url: url,
|
||||||
|
original: params,
|
||||||
|
queryParams: filters,
|
||||||
|
name: 'partparameters',
|
||||||
|
groupBy: false,
|
||||||
|
formatNoMatches: function() { return '{% trans "No parameters found" %}'; },
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
checkbox: true,
|
||||||
|
switchable: false,
|
||||||
|
visible: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
title: '{% trans "Name" %}',
|
||||||
|
switchable: false,
|
||||||
|
sortable: true,
|
||||||
|
formatter: function(value, row) {
|
||||||
|
return row.template_detail.name;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'data',
|
||||||
|
title: '{% trans "Value" %}',
|
||||||
|
switchable: false,
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'units',
|
||||||
|
title: '{% trans "Units" %}',
|
||||||
|
switchable: true,
|
||||||
|
sortable: true,
|
||||||
|
formatter: function(value, row) {
|
||||||
|
return row.template_detail.units;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'actions',
|
||||||
|
title: '',
|
||||||
|
switchable: false,
|
||||||
|
sortable: false,
|
||||||
|
formatter: function(value, row) {
|
||||||
|
var pk = row.pk;
|
||||||
|
|
||||||
|
var html = `<div class='btn-group float-right' role='group'>`;
|
||||||
|
|
||||||
|
html += makeIconButton('fa-edit icon-blue', 'button-parameter-edit', pk, '{% trans "Edit parameter" %}');
|
||||||
|
html += makeIconButton('fa-trash-alt icon-red', 'button-parameter-delete', pk, '{% trans "Delete parameter" %}');
|
||||||
|
|
||||||
|
html += `</div>`;
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
onPostBody: function() {
|
||||||
|
// Setup button callbacks
|
||||||
|
$(table).find('.button-parameter-edit').click(function() {
|
||||||
|
var pk = $(this).attr('pk');
|
||||||
|
|
||||||
|
constructForm(`/api/part/parameter/${pk}/`, {
|
||||||
|
fields: {
|
||||||
|
data: {},
|
||||||
|
},
|
||||||
|
title: '{% trans "Edit Parameter" %}',
|
||||||
|
onSuccess: function() {
|
||||||
|
$(table).bootstrapTable('refresh');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(table).find('.button-parameter-delete').click(function() {
|
||||||
|
var pk = $(this).attr('pk');
|
||||||
|
|
||||||
|
constructForm(`/api/part/parameter/${pk}/`, {
|
||||||
|
method: 'DELETE',
|
||||||
|
title: '{% trans "Delete Parameter" %}',
|
||||||
|
onSuccess: function() {
|
||||||
|
$(table).bootstrapTable('refresh');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function loadParametricPartTable(table, options={}) {
|
function loadParametricPartTable(table, options={}) {
|
||||||
/* Load parametric table for part parameters
|
/* Load parametric table for part parameters
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user