diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py
index 0ea90a00ba..699671642f 100644
--- a/InvenTree/build/api.py
+++ b/InvenTree/build/api.py
@@ -70,6 +70,10 @@ class BuildItemList(generics.ListCreateAPIView):
query = BuildItem.objects.all()
+ query = query.select_related('stock_item')
+ query = query.prefetch_related('stock_item__part')
+ query = query.prefetch_related('stock_item__part__category')
+
if part_pk:
query = query.filter(stock_item__part=part_pk)
diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py
index d644cbdc35..dd4a568187 100644
--- a/InvenTree/build/serializers.py
+++ b/InvenTree/build/serializers.py
@@ -45,6 +45,7 @@ class BuildItemSerializer(InvenTreeModelSerializer):
part = serializers.IntegerField(source='stock_item.part.pk', read_only=True)
part_name = serializers.CharField(source='stock_item.part.full_name', read_only=True)
+ part_image = serializers.CharField(source='stock_item.part.image.url', read_only=True)
stock_item_detail = StockItemSerializerBrief(source='stock_item', read_only=True)
class Meta:
@@ -54,6 +55,7 @@ class BuildItemSerializer(InvenTreeModelSerializer):
'build',
'part',
'part_name',
+ 'part_image',
'stock_item',
'stock_item_detail',
'quantity'
diff --git a/InvenTree/build/templates/build/allocate.html b/InvenTree/build/templates/build/allocate.html
index 6d7017bcf2..3ad123da7f 100644
--- a/InvenTree/build/templates/build/allocate.html
+++ b/InvenTree/build/templates/build/allocate.html
@@ -10,39 +10,11 @@ InvenTree | Allocate Parts
{% include "build/tabs.html" with tab='allocate' %}
-
Allocate Parts for Build
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Part
-
-
-
Available
-
-
-
Required
-
-
-
Allocated
-
-
-
-{% for bom_item in bom_items.all %}
-{% include "build/allocation_item.html" with item=bom_item build=build collapse_id=bom_item.id %}
-{% endfor %}
-
+{% if editing %}
+{% include "build/allocate_edit.html" %}
+{% else %}
+{% include "build/allocate_view.html" %}
+{% endif %}
{% endblock %}
@@ -55,6 +27,8 @@ InvenTree | Allocate Parts
{% block js_ready %}
{{ block.super }}
+ {% if editing %}
+
{% for bom_item in bom_items.all %}
loadAllocationTable(
@@ -86,4 +60,37 @@ InvenTree | Allocate Parts
);
});
+ {% else %}
+
+ $("#build-item-table").bootstrapTable({
+ url: "{% url 'api-build-item-list' %}",
+ queryParams: {
+ build: {{ build.id }},
+ },
+ search: true,
+ columns: [
+ {
+ field: 'part_name',
+ title: 'Part',
+ formatter: function(value, row, index, field) {
+ return imageHoverIcon(row.part_image) + value;
+ }
+ },
+ {
+ field: 'stock_item_detail.location_name',
+ title: 'Location',
+ },
+ {
+ field: 'quantity',
+ title: 'Quantity Allocated',
+ },
+ ]
+ });
+
+ $("#btn-allocate").click(function() {
+ location.href = "{% url 'build-allocate' build.id %}?edit=1";
+ });
+
+ {% endif %}
+
{% endblock %}
diff --git a/InvenTree/build/templates/build/allocate_edit.html b/InvenTree/build/templates/build/allocate_edit.html
new file mode 100644
index 0000000000..3040997fb9
--- /dev/null
+++ b/InvenTree/build/templates/build/allocate_edit.html
@@ -0,0 +1,32 @@
+Allocate Stock to Build
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Part
+
+
+
Available
+
+
+
Required
+
+
+
Allocated
+
+
+
+{% for bom_item in bom_items.all %}
+{% include "build/allocation_item.html" with item=bom_item build=build collapse_id=bom_item.id %}
+{% endfor %}
diff --git a/InvenTree/build/templates/build/allocate_view.html b/InvenTree/build/templates/build/allocate_view.html
new file mode 100644
index 0000000000..9cef45bbbc
--- /dev/null
+++ b/InvenTree/build/templates/build/allocate_view.html
@@ -0,0 +1,10 @@
+Stock Allocated to Build
+
+
+
+
\ No newline at end of file
diff --git a/InvenTree/build/templates/build/required.html b/InvenTree/build/templates/build/required.html
index 831d8d03b3..6ab16032ab 100644
--- a/InvenTree/build/templates/build/required.html
+++ b/InvenTree/build/templates/build/required.html
@@ -33,4 +33,12 @@
+{% endblock %}
+
+{% block js_ready %}
+
+{{ block.super }}
+
+ $("#build-list").bootstrapTable({});
+
{% endblock %}
\ No newline at end of file
diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py
index 14e22a3fe8..e325d3cc5b 100644
--- a/InvenTree/build/views.py
+++ b/InvenTree/build/views.py
@@ -294,6 +294,9 @@ class BuildAllocate(DetailView):
context['part'] = part
context['bom_items'] = bom_items
+ if str2bool(self.request.GET.get('edit', None)):
+ context['editing'] = True
+
return context
diff --git a/InvenTree/company/templates/company/detail_part.html b/InvenTree/company/templates/company/detail_part.html
index 48e9cb1a77..ec6f80c652 100644
--- a/InvenTree/company/templates/company/detail_part.html
+++ b/InvenTree/company/templates/company/detail_part.html
@@ -18,7 +18,7 @@
-