Fix quantity aggregation for stock table (#5188) (#5190)

* Fix quantity aggregation for stock table

- Stock quantity can only be added together if units are the same

* Add stock total footer to part table

(cherry picked from commit 773dd3b210)

Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
This commit is contained in:
github-actions[bot] 2023-07-06 12:55:22 +10:00 committed by GitHub
parent c59eee7359
commit eab3fdcf2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 1 deletions

View File

@ -2368,6 +2368,38 @@ function loadPartTable(table, url, options={}) {
});
return text;
},
footerFormatter: function(data) {
// Display "total" stock quantity of all rendered rows
// Requires that all parts have the same base units!
let total = 0;
let units = new Set();
data.forEach(function(row) {
units.add(row.units || null);
if (row.total_in_stock != null) {
total += row.total_in_stock;
}
});
if (data.length == 0) {
return '-';
} else if (units.size > 1) {
return '-';
} else {
let output = `${total}`;
if (units.size == 1) {
let unit = units.values().next().value;
if (unit) {
output += ` [${unit}]`;
}
}
return output;
}
}
});
@ -2443,6 +2475,7 @@ function loadPartTable(table, url, options={}) {
showColumns: true,
showCustomView: grid_view,
showCustomViewButton: false,
showFooter: true,
onPostBody: function() {
grid_view = inventreeLoad('part-grid-view') == 1;
if (grid_view) {

View File

@ -2068,13 +2068,36 @@ function loadStockTable(table, options) {
// Display "total" stock quantity of all rendered rows
let total = 0;
// Keep track of the whether all units are the same
// If different units are found, we cannot aggregate the quantities
let units = new Set();
data.forEach(function(row) {
units.add(row.part_detail.units || null);
if (row.quantity != null) {
total += row.quantity;
}
});
return total;
if (data.length == 0) {
return '-';
} else if (units.size > 1) {
return '-';
} else {
let output = `${total}`;
if (units.size == 1) {
let unit = units.values().next().value;
if (unit) {
output += ` [${unit}]`;
}
}
return output;
}
}
};