diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index 54204de845..57ffe88cf3 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -277,7 +277,6 @@ class BuildOutputDelete(generics.CreateAPIView): return ctx - class BuildFinish(generics.CreateAPIView): """ API endpoint for marking a build as finished (completed) diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 43899ba819..d242586b3c 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -59,30 +59,6 @@ class BuildOutputCreateForm(HelperForm): ] -class BuildOutputDeleteForm(HelperForm): - """ - Form for deleting a build output. - """ - - confirm = forms.BooleanField( - required=False, - label=_('Confirm'), - help_text=_('Confirm deletion of build output') - ) - - output_id = forms.IntegerField( - required=True, - widget=forms.HiddenInput() - ) - - class Meta: - model = Build - fields = [ - 'confirm', - 'output_id', - ] - - class CancelBuildForm(HelperForm): """ Form for cancelling a build """ diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index fe01844520..efc4665d00 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -157,7 +157,7 @@ class BuildOutputSerializer(serializers.Serializer): raise ValidationError(_("This build output has already been completed")) if to_complete: - + # The build output must have all tracked parts allocated if not build.isFullyAllocated(output): raise ValidationError(_("This build output is not fully allocated")) diff --git a/InvenTree/build/urls.py b/InvenTree/build/urls.py index fecece232e..30a9470ee2 100644 --- a/InvenTree/build/urls.py +++ b/InvenTree/build/urls.py @@ -10,7 +10,6 @@ build_detail_urls = [ url(r'^cancel/', views.BuildCancel.as_view(), name='build-cancel'), url(r'^delete/', views.BuildDelete.as_view(), name='build-delete'), url(r'^create-output/', views.BuildOutputCreate.as_view(), name='build-output-create'), - url(r'^delete-output/', views.BuildOutputDelete.as_view(), name='build-output-delete'), url(r'^.*$', views.BuildDetail.as_view(), name='build-detail'), ] diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 21cf5dda99..a8cf72f5a6 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -12,7 +12,6 @@ from django.forms import HiddenInput from .models import Build from . import forms -from stock.models import StockItem from InvenTree.views import AjaxUpdateView, AjaxDeleteView from InvenTree.views import InvenTreeRoleMixin @@ -192,67 +191,6 @@ class BuildOutputCreate(AjaxUpdateView): return form -class BuildOutputDelete(AjaxUpdateView): - """ - Delete a build output (StockItem) for a given build. - - Form is a simple confirmation dialog - """ - - model = Build - form_class = forms.BuildOutputDeleteForm - ajax_form_title = _('Delete Build Output') - - role_required = 'build.delete' - - def get_initial(self): - - initials = super().get_initial() - - output = self.get_param('output') - - initials['output_id'] = output - - return initials - - def validate(self, build, form, **kwargs): - - data = form.cleaned_data - - confirm = data.get('confirm', False) - - if not confirm: - form.add_error('confirm', _('Confirm unallocation of build stock')) - form.add_error(None, _('Check the confirmation box')) - - output_id = data.get('output_id', None) - output = None - - try: - output = StockItem.objects.get(pk=output_id) - except (ValueError, StockItem.DoesNotExist): - pass - - if output: - if not output.build == build: - form.add_error(None, _('Build output does not match build')) - else: - form.add_error(None, _('Build output must be specified')) - - def save(self, build, form, **kwargs): - - output_id = form.cleaned_data.get('output_id') - - output = StockItem.objects.get(pk=output_id) - - build.deleteBuildOutput(output) - - def get_data(self): - return { - 'danger': _('Build output deleted'), - } - - class BuildDetail(InvenTreeRoleMixin, DetailView): """ Detail view of a single Build object.