diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py
index d242586b3c..eaae0636c9 100644
--- a/InvenTree/build/forms.py
+++ b/InvenTree/build/forms.py
@@ -14,51 +14,6 @@ from InvenTree.forms import HelperForm
from .models import Build
-class BuildOutputCreateForm(HelperForm):
- """
- Form for creating a new build output.
- """
-
- def __init__(self, *args, **kwargs):
-
- build = kwargs.pop('build', None)
-
- if build:
- self.field_placeholder['serial_numbers'] = build.part.getSerialNumberString()
-
- super().__init__(*args, **kwargs)
-
- field_prefix = {
- 'serial_numbers': 'fa-hashtag',
- }
-
- output_quantity = forms.IntegerField(
- label=_('Quantity'),
- help_text=_('Enter quantity for build output'),
- )
-
- serial_numbers = forms.CharField(
- label=_('Serial Numbers'),
- required=False,
- help_text=_('Enter serial numbers for build outputs'),
- )
-
- confirm = forms.BooleanField(
- required=True,
- label=_('Confirm'),
- help_text=_('Confirm creation of build output'),
- )
-
- class Meta:
- model = Build
- fields = [
- 'output_quantity',
- 'batch',
- 'serial_numbers',
- 'confirm',
- ]
-
-
class CancelBuildForm(HelperForm):
""" Form for cancelling a build """
diff --git a/InvenTree/build/templates/build/build_output_create.html b/InvenTree/build/templates/build/build_output_create.html
deleted file mode 100644
index 5de41695a6..0000000000
--- a/InvenTree/build/templates/build/build_output_create.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{% extends "modal_form.html" %}
-{% load i18n %}
-{% block pre_form_content %}
-
-{% if build.part.has_trackable_parts %}
-
- {% trans "The Bill of Materials contains trackable parts" %}
- {% trans "Build outputs must be generated individually." %}
- {% trans "Multiple build outputs will be created based on the quantity specified." %}
-
-{% endif %}
-
-{% if build.part.trackable %}
-
- {% trans "Trackable parts can have serial numbers specified" %}
- {% trans "Enter serial numbers to generate multiple single build outputs" %}
-
-{% endif %}
-
-{% endblock %}
\ No newline at end of file
diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html
index 484346f89e..28760c5316 100644
--- a/InvenTree/build/templates/build/detail.html
+++ b/InvenTree/build/templates/build/detail.html
@@ -328,13 +328,6 @@ $('#btn-create-output').click(function() {
trackable_parts: {% if build.part.has_trackable_parts %}true{% else %}false{% endif%},
}
);
-
- return;
- launchModalForm('{% url "build-output-create" build.id %}',
- {
- reload: true,
- }
- );
});
loadStockTable($("#build-stock-table"), {
diff --git a/InvenTree/build/urls.py b/InvenTree/build/urls.py
index 30a9470ee2..0058e8a527 100644
--- a/InvenTree/build/urls.py
+++ b/InvenTree/build/urls.py
@@ -9,7 +9,6 @@ from . import views
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'^.*$', views.BuildDetail.as_view(), name='build-detail'),
]
diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py
index a8cf72f5a6..1051869f68 100644
--- a/InvenTree/build/views.py
+++ b/InvenTree/build/views.py
@@ -76,121 +76,6 @@ class BuildCancel(AjaxUpdateView):
}
-class BuildOutputCreate(AjaxUpdateView):
- """
- Create a new build output (StockItem) for a given build.
- """
-
- model = Build
- form_class = forms.BuildOutputCreateForm
- ajax_template_name = 'build/build_output_create.html'
- ajax_form_title = _('Create Build Output')
-
- def validate(self, build, form, **kwargs):
- """
- Validation for the form:
- """
-
- quantity = form.cleaned_data.get('output_quantity', None)
- serials = form.cleaned_data.get('serial_numbers', None)
-
- if quantity is not None:
- build = self.get_object()
-
- # Check that requested output don't exceed build remaining quantity
- maximum_output = int(build.remaining - build.incomplete_count)
-
- if quantity > maximum_output:
- form.add_error(
- 'output_quantity',
- _('Maximum output quantity is ') + str(maximum_output),
- )
-
- elif quantity <= 0:
- form.add_error(
- 'output_quantity',
- _('Output quantity must be greater than zero'),
- )
-
- # Check that the serial numbers are valid
- if serials:
- try:
- extracted = extract_serial_numbers(serials, quantity, build.part.getLatestSerialNumberInt())
-
- if extracted:
- # Check for conflicting serial numbers
- conflicts = build.part.find_conflicting_serial_numbers(extracted)
-
- if len(conflicts) > 0:
- msg = ",".join([str(c) for c in conflicts])
- form.add_error(
- 'serial_numbers',
- _('Serial numbers already exist') + ': ' + msg,
- )
-
- except ValidationError as e:
- form.add_error('serial_numbers', e.messages)
-
- else:
- # If no serial numbers are provided, should they be?
- if build.part.trackable:
- form.add_error('serial_numbers', _('Serial numbers required for trackable build output'))
-
- def save(self, build, form, **kwargs):
- """
- Create a new build output
- """
-
- data = form.cleaned_data
-
- quantity = data.get('output_quantity', None)
- batch = data.get('batch', None)
-
- serials = data.get('serial_numbers', None)
-
- if serials:
- serial_numbers = extract_serial_numbers(serials, quantity, build.part.getLatestSerialNumberInt())
- else:
- serial_numbers = None
-
- build.create_build_output(
- quantity,
- serials=serial_numbers,
- batch=batch,
- )
-
- def get_initial(self):
-
- initials = super().get_initial()
-
- build = self.get_object()
-
- # Calculate the required quantity
- quantity = max(0, build.remaining - build.incomplete_count)
- initials['output_quantity'] = int(quantity)
-
- return initials
-
- def get_form(self):
-
- build = self.get_object()
- part = build.part
-
- context = self.get_form_kwargs()
-
- # Pass the 'part' through to the form,
- # so we can add the next serial number as a placeholder
- context['build'] = build
-
- form = self.form_class(**context)
-
- # If the part is not trackable, hide the serial number input
- if not part.trackable:
- form.fields['serial_numbers'].widget = HiddenInput()
-
- return form
-
-
class BuildDetail(InvenTreeRoleMixin, DetailView):
"""
Detail view of a single Build object.