diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js
index ff1f475d5d..eb955d7ff0 100644
--- a/InvenTree/templates/js/translated/build.js
+++ b/InvenTree/templates/js/translated/build.js
@@ -1425,19 +1425,36 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
title: '{% trans "Available" %}',
sortable: true,
formatter: function(value, row) {
- var total = row.available_stock + row.available_substitute_stock;
- var text = `${total}`;
+ var url = `/part/${row.sub_part_detail.pk}/?display=part-stock`;
- if (total <= 0) {
+ // Calculate total "available" (unallocated) quantity
+ var base_stock = row.available_stock;
+ var substitute_stock = row.available_substitute_stock || 0;
+ var variant_stock = row.allow_variants ? (row.available_variant_stock || 0) : 0;
+
+ var available_stock = base_stock + substitute_stock + variant_stock;
+
+ var text = `${available_stock}`;
+
+ if (available_stock <= 0) {
text = `{% trans "No Stock Available" %}`;
} else {
- if (row.available_substitute_stock > 0) {
- text += ``;
+ var extra = '';
+ if ((substitute_stock > 0) && (variant_stock > 0)) {
+ extra = '{% trans "Includes variant and substitute stock" %}';
+ } else if (variant_stock > 0) {
+ extra = '{% trans "Includes variant stock" %}';
+ } else if (substitute_stock > 0) {
+ extra = '{% trans "Includes substitute stock" %}';
+ }
+
+ if (extra) {
+ text += ``;
}
}
-
- return text;
+
+ return renderLink(text, url);
}
},
{