diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js
index aa35d4c011..820f78f47b 100644
--- a/InvenTree/templates/js/translated/build.js
+++ b/InvenTree/templates/js/translated/build.js
@@ -931,8 +931,6 @@ function loadBuildOutputTable(build_info, options={}) {
rows.forEach(function(row) {
row.allocations = allocations[row.pk] || [];
$(table).bootstrapTable('updateByUniqueId', row.pk, row, true);
-
- console.log("Updating row for stock item", row.pk);
});
}
}
@@ -1280,24 +1278,37 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
}
- function sumAllocations(row) {
- // Calculat total allocations for a given row
- if (!row.allocations) {
- row.allocated = 0;
- return 0;
- }
+ function getAllocationsForRow(row) {
+ var part_id = row.sub_part;
- var quantity = 0;
+ var allocations = [];
- row.allocations.forEach(function(item) {
- quantity += item.quantity;
+ allocated_items.forEach(function(allocation) {
+ if (allocation.bom_part == part_id) {
+ allocations.push(allocation);
+ }
});
- row.allocated = parseFloat(quantity.toFixed(15));
+ return allocations;
+ }
+
+ function sumAllocations(row) {
+
+ var allocated_quantity = 0;
+
+ getAllocationsForRow(row).forEach(function(allocation) {
+ allocated_quantity += allocation.quantity;
+ });
+
+ row.allocated = parseFloat(allocated_quantity.toFixed(15));
return row.allocated;
}
+ function isRowFullyAllocated(row) {
+ return sumAllocations(row) >= requiredQuantity(row);
+ }
+
function setupCallbacks() {
// Register button callbacks once table data are loaded
@@ -1408,128 +1419,12 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
onPostBody: function(data) {
// Setup button callbacks
setupCallbacks();
- // },
- // onLoadSuccess: function(tableData) {
- // Once the BOM data are loaded, request allocation data for this build output
-
- console.log("old onLoadSuccess");
- return;
-
- var params = {
- build: buildId,
- part_detail: true,
- location_detail: true,
- };
-
- if (output) {
- params.sub_part_trackable = true;
- params.output = outputId;
- } else {
- params.sub_part_trackable = false;
- }
-
- inventreeGet('/api/build/item/',
- params,
- {
- success: function(data) {
- // Iterate through the returned data, and group by the part they point to
- var allocations = {};
-
- // Total number of line items
- var totalLines = tableData.length;
-
- // Total number of "completely allocated" lines
- var allocatedLines = 0;
-
- data.forEach(function(item) {
-
- // Group BuildItem objects by part
- var part = item.bom_part || item.part;
- var key = parseInt(part);
-
- if (!(key in allocations)) {
- allocations[key] = [];
- }
-
- allocations[key].push(item);
- });
-
- // Now update the allocations for each row in the table
- for (var key in allocations) {
-
- // Select the associated row in the table
- var tableRow = $(table).bootstrapTable('getRowByUniqueId', key);
-
- if (!tableRow) {
- continue;
- }
-
- // Set the allocation list for that row
- tableRow.allocations = allocations[key];
-
- // Calculate the total allocated quantity
- var allocatedQuantity = sumAllocations(tableRow);
-
- var requiredQuantity = 0;
-
- if (output) {
- requiredQuantity = tableRow.quantity * output.quantity;
- } else {
- requiredQuantity = tableRow.quantity * buildInfo.quantity;
- }
-
- // Is this line item fully allocated?
- if (allocatedQuantity >= requiredQuantity) {
- allocatedLines += 1;
- }
-
- // Push the updated row back into the main table
- $(table).bootstrapTable('updateByUniqueId', key, tableRow, true);
- }
-
- // Update any rows which we did not receive allocation information for
- var td = $(table).bootstrapTable('getData');
-
- td.forEach(function(tableRow) {
- if (tableRow.allocations == null) {
-
- tableRow.allocations = [];
-
- $(table).bootstrapTable('updateByUniqueId', tableRow.pk, tableRow, true);
- }
- });
-
- // Update the progress bar for this build output
- var build_progress = $(`#output-progress-${outputId}`);
-
- if (build_progress.exists()) {
- if (totalLines > 0) {
-
- var progress = makeProgressBar(
- allocatedLines,
- totalLines,
- {
- max_width: '150px',
- }
- );
-
- build_progress.html(progress);
- } else {
- build_progress.html('');
- }
-
- } else {
- console.warn(`Could not find progress bar for output ${outputId}`);
- }
- }
- }
- );
},
sortable: true,
showColumns: false,
detailView: true,
detailFilter: function(index, row) {
- return row.allocations != null;
+ return sumAllocations(row) > 0;
},
detailFormatter: function(index, row, element) {
// Contruct an 'inner table' which shows which stock items have been allocated
@@ -1543,7 +1438,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
var subTable = $(`#${subTableId}`);
subTable.bootstrapTable({
- data: row.allocations,
+ data: getAllocationsForRow(row),
showHeader: true,
columns: [
{
@@ -1565,7 +1460,6 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
var url = '';
-
var serial = row.serial;
if (row.stock_item_detail) {
@@ -1744,19 +1638,9 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
title: '{% trans "Allocated" %}',
sortable: true,
formatter: function(value, row) {
- var allocated = 0;
-
- if (row.allocations != null) {
- row.allocations.forEach(function(item) {
- allocated += item.quantity;
- });
-
- var required = requiredQuantity(row);
-
- return makeProgressBar(allocated, required);
- } else {
- return `{% trans "loading" %}...`;
- }
+ var allocated = sumAllocations(row);
+ var required = requiredQuantity(row)
+ return makeProgressBar(allocated, required);
},
sorter: function(valA, valB, rowA, rowB) {
// Custom sorting function for progress bars