From 9986df2074996d00c4f1cb9339d6183089a93421 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 14 May 2019 18:20:54 +1000 Subject: [PATCH] Add confirmation to cancel a build --- InvenTree/build/forms.py | 12 +++++++++ InvenTree/build/templates/build/cancel.html | 6 ++++- InvenTree/build/views.py | 29 ++++++++++++++------- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 66ec98ac77..01024230f4 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -58,6 +58,18 @@ class CompleteBuildForm(HelperForm): ] +class CancelBuildForm(HelperForm): + """ Form for cancelling a build """ + + confirm_cancel = forms.BooleanField(required=False, help_text='Confirm build cancellation') + + class Meta: + model = Build + fields = [ + 'confirm_cancel' + ] + + class EditBuildItemForm(HelperForm): """ Form for adding a new BuildItem to a Build """ diff --git a/InvenTree/build/templates/build/cancel.html b/InvenTree/build/templates/build/cancel.html index d273a14ff5..d7e4d51b10 100644 --- a/InvenTree/build/templates/build/cancel.html +++ b/InvenTree/build/templates/build/cancel.html @@ -1,3 +1,7 @@ +{% extends "modal_form.html" %} + +{% block pre_form_content %} + Are you sure you wish to cancel this build? -{% include "modal_csrf.html" %} \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 85d07858fb..e4149c171b 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -16,6 +16,7 @@ from . import forms from stock.models import StockLocation, StockItem from InvenTree.views import AjaxView, AjaxUpdateView, AjaxCreateView, AjaxDeleteView +from InvenTree.helpers import str2bool class BuildIndex(ListView): @@ -41,31 +42,41 @@ class BuildIndex(ListView): return context -class BuildCancel(AjaxView): +class BuildCancel(AjaxUpdateView): """ View to cancel a Build. Provides a cancellation information dialog """ + model = Build ajax_template_name = 'build/cancel.html' ajax_form_title = 'Cancel Build' context_object_name = 'build' - fields = [] + form_class = forms.CancelBuildForm def post(self, request, *args, **kwargs): """ Handle POST request. Mark the build status as CANCELLED """ - build = get_object_or_404(Build, pk=self.kwargs['pk']) + build = self.get_object() - build.cancelBuild(request.user) + form = self.get_form() - return self.renderJsonResponse(request, None) + valid = form.is_valid() - def get_data(self): - """ Provide JSON context data. """ - return { + confirm = str2bool(request.POST.get('confirm_cancel', False)) + + if confirm: + build.cancelBuild(request.user) + else: + form.errors['confirm_cancel'] = ['Confirm build cancellation'] + valid = False + + data = { + 'form_valid': valid, 'danger': 'Build was cancelled' } + return self.renderJsonResponse(request, form, data=data) + class BuildAutoAllocate(AjaxUpdateView): """ View to auto-allocate parts for a build. @@ -217,7 +228,7 @@ class BuildComplete(AjaxUpdateView): form = self.get_form() - confirm = request.POST.get('confirm', False) + confirm = str2bool(request.POST.get('confirm', False)) loc_id = request.POST.get('location', None)