add button to delete all test data for a given stock item

This commit is contained in:
Oliver Walters 2020-05-18 14:29:35 +10:00
parent 05e4c8f825
commit fce8e3fe05
4 changed files with 70 additions and 3 deletions

View File

@ -5,6 +5,7 @@ Helper forms which subclass Django forms to provide additional functionality
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from django.utils.translation import ugettext as _
from django import forms from django import forms
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field from crispy_forms.layout import Layout, Field
@ -92,6 +93,20 @@ class HelperForm(forms.ModelForm):
self.helper.layout = Layout(*layouts) self.helper.layout = Layout(*layouts)
class ConfirmForm(forms.Form):
""" Generic confirmation form """
confirm = forms.BooleanField(
required=False, initial=False,
help_text=_("Confirm")
)
class Meta:
fields = [
'confirm'
]
class DeleteForm(forms.Form): class DeleteForm(forms.Form):
""" Generic deletion form which provides simple user confirmation """ Generic deletion form which provides simple user confirmation
""" """
@ -99,7 +114,7 @@ class DeleteForm(forms.Form):
confirm_delete = forms.BooleanField( confirm_delete = forms.BooleanField(
required=False, required=False,
initial=False, initial=False,
help_text='Confirm item deletion' help_text=_('Confirm item deletion')
) )
class Meta: class Meta:
@ -131,14 +146,14 @@ class SetPasswordForm(HelperForm):
required=True, required=True,
initial='', initial='',
widget=forms.PasswordInput(attrs={'autocomplete': 'off'}), widget=forms.PasswordInput(attrs={'autocomplete': 'off'}),
help_text='Enter new password') help_text=_('Enter new password'))
confirm_password = forms.CharField(max_length=100, confirm_password = forms.CharField(max_length=100,
min_length=8, min_length=8,
required=True, required=True,
initial='', initial='',
widget=forms.PasswordInput(attrs={'autocomplete': 'off'}), widget=forms.PasswordInput(attrs={'autocomplete': 'off'}),
help_text='Confirm new password') help_text=_('Confirm new password'))
class Meta: class Meta:
model = User model = User

View File

@ -14,6 +14,9 @@
<div class='button-toolbar container-fluid' style="float: right;"> <div class='button-toolbar container-fluid' style="float: right;">
<div class='btn-group' role='group'> <div class='btn-group' role='group'>
<button type='button' class='btn btn-success' id='add-test-result'>{% trans "Add Test Data" %}</button> <button type='button' class='btn btn-success' id='add-test-result'>{% trans "Add Test Data" %}</button>
{% if user.is_staff %}
<button type='button' class='btn btn-danger' id='delete-test-results'>{% trans "Delete Test Data" %}</button>
{% endif %}
</div> </div>
<div class='filter-list' id='filter-list-stocktests'> <div class='filter-list' id='filter-list-stocktests'>
<!-- Empty div --> <!-- Empty div -->
@ -40,6 +43,17 @@ function reloadTable() {
//$("#test-result-table").bootstrapTable("refresh"); //$("#test-result-table").bootstrapTable("refresh");
} }
{% if user.is_staff %}
$("#delete-test-results").click(function() {
launchModalForm(
"{% url 'stock-item-delete-test-data' item.id %}",
{
success: reloadTable,
}
);
});
{% endif %}
$("#add-test-result").click(function() { $("#add-test-result").click(function() {
launchModalForm( launchModalForm(
"{% url 'stock-item-test-create' %}", { "{% url 'stock-item-test-create' %}", {

View File

@ -21,6 +21,7 @@ stock_item_detail_urls = [
url(r'^serialize/', views.StockItemSerialize.as_view(), name='stock-item-serialize'), url(r'^serialize/', views.StockItemSerialize.as_view(), name='stock-item-serialize'),
url(r'^delete/', views.StockItemDelete.as_view(), name='stock-item-delete'), url(r'^delete/', views.StockItemDelete.as_view(), name='stock-item-delete'),
url(r'^qr_code/', views.StockItemQRCode.as_view(), name='stock-item-qr'), url(r'^qr_code/', views.StockItemQRCode.as_view(), name='stock-item-qr'),
url(r'^delete_test_data/', views.StockItemDeleteTestData.as_view(), name='stock-item-delete-test-data'),
url(r'^add_tracking/', views.StockItemTrackingCreate.as_view(), name='stock-tracking-create'), url(r'^add_tracking/', views.StockItemTrackingCreate.as_view(), name='stock-tracking-create'),

View File

@ -17,6 +17,7 @@ from django.utils.translation import ugettext as _
from InvenTree.views import AjaxView from InvenTree.views import AjaxView
from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView
from InvenTree.views import QRCodeView from InvenTree.views import QRCodeView
from InvenTree.forms import ConfirmForm
from InvenTree.helpers import str2bool, DownloadFile, GetExportFormats from InvenTree.helpers import str2bool, DownloadFile, GetExportFormats
from InvenTree.helpers import ExtractSerialNumbers from InvenTree.helpers import ExtractSerialNumbers
@ -229,6 +230,42 @@ class StockItemAttachmentDelete(AjaxDeleteView):
} }
class StockItemDeleteTestData(AjaxUpdateView):
"""
View for deleting all test data
"""
model = StockItem
form_class = ConfirmForm
ajax_form_title = _("Delete All Test Data")
def get_form(self):
return ConfirmForm()
def post(self, request, *args, **kwargs):
valid = False
stock_item = StockItem.objects.get(pk=self.kwargs['pk'])
form = self.get_form()
confirm = str2bool(request.POST.get('confirm', False))
if confirm is not True:
form.errors['confirm'] = [_('Confirm test data deletion')]
form.non_field_errors = [_('Check the confirmation box')]
else:
stock_item.test_results.all().delete()
valid = True
data = {
'form_valid': valid,
}
return self.renderJsonResponse(request, form, data)
class StockItemTestResultCreate(AjaxCreateView): class StockItemTestResultCreate(AjaxCreateView):
""" """
View for adding a new StockItemTestResult View for adding a new StockItemTestResult