From 083d7671d0ab5e7f0b8343d8220666dcaa4caa2f Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 24 Nov 2020 21:19:19 +1100 Subject: [PATCH] Bug fix for BOM table If the BOM for part included a BomItem with the same PK as the top-level part, the bootstrap-tree-grid library borked Probably for good reason, too! So we now ensure that the top-level key is unique --- InvenTree/templates/js/bom.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/InvenTree/templates/js/bom.js b/InvenTree/templates/js/bom.js index 9bbf8127e8..299045cfa5 100644 --- a/InvenTree/templates/js/bom.js +++ b/InvenTree/templates/js/bom.js @@ -140,6 +140,12 @@ function loadBomTable(table, options) { }); } + // Set the parent ID of the multi-level table. + // We prepend this with the literal string value 'top-level-', + // because otherwise the unfortunate situation where BomItem.pk == BomItem.part.pk + // AND THIS BREAKS EVERYTHING + var parent_id = `top-level-${options.parent_id}`; + // Part column cols.push( { @@ -197,11 +203,11 @@ function loadBomTable(table, options) { text = parseFloat(text); if (row.optional) { - text += " ({% trans "Optional" %})"; + text += ' ({% trans "Optional" %})'; } if (row.overage) { - text += " (+" + row.overage + ") "; + text += ` (${row.overage}) `; } return text; @@ -233,7 +239,7 @@ function loadBomTable(table, options) { // TODO - Re-introduce the pricing column at a later stage, // once the pricing has been "fixed" // O.W. 2020-11-24 - + cols.push( { field: 'price_range', @@ -334,9 +340,8 @@ function loadBomTable(table, options) { table.inventreeTable({ treeEnable: !options.editable, - rootParentId: options.parent_id, + rootParentId: parent_id, idField: 'pk', - //uniqueId: 'pk', parentIdField: 'parentId', treeShowField: 'sub_part', showColumns: true, @@ -345,12 +350,18 @@ function loadBomTable(table, options) { search: true, rowStyle: function(row, index) { if (row.validated) { - return {classes: 'rowvalid'}; + return { + classes: 'rowvalid' + }; } else { - return {classes: 'rowinvalid'}; + return { + classes: 'rowinvalid' + }; } }, - formatNoMatches: function() { return '{% trans "No BOM items found" %}'; }, + formatNoMatches: function() { + return '{% trans "No BOM items found" %}'; + }, clickToSelect: true, queryParams: filters, original: params, @@ -383,7 +394,7 @@ function loadBomTable(table, options) { } // Set the parent ID of the top-level rows - row.parentId = options.parent_id; + row.parentId = parent_id; table.bootstrapTable('updateRow', idx, row, true);