diff --git a/InvenTree/InvenTree/static/script/inventree/filters.js b/InvenTree/InvenTree/static/script/inventree/filters.js
index bf22aa4fd7..47b86b227a 100644
--- a/InvenTree/InvenTree/static/script/inventree/filters.js
+++ b/InvenTree/InvenTree/static/script/inventree/filters.js
@@ -97,6 +97,16 @@ function addTableFilter(tableKey, filterKey, filterValue) {
}
+/*
+ * Clear all the custom filters for a given table
+ */
+function clearTableFilters(tableKey) {
+ saveTableFilters(tableKey, {});
+
+ return {};
+}
+
+
/*
* Return a list of the "available" filters for a given table key.
* A filter is "available" if it is not already being used to filter the table.
@@ -208,6 +218,103 @@ function generateFilterInput(tableKey, filterKey) {
}
+/**
+ * Configure a filter list for a given table
+ *
+ * @param {*} tableKey - string lookup key for filter settings
+ * @param {*} table - bootstrapTable element to update
+ * @param {*} target - name of target element on page
+ */
+function setupFilterList(tableKey, table, target) {
+
+ if (!target || target.length == 0) {
+ target = '#filter-list-" + tableKey';
+ }
+
+ var tag = `filter-tag-${tableKey}`;
+ var add = `filter-add-${tableKey}`;
+ var clear = `filter-clear-${tableKey}`;
+ var make = `filter-make-${tableKey}`;
+
+ console.log(`Refilling filter list: ${tableKey}`);
+
+ var filters = loadTableFilters(tableKey);
+
+ var element = $(target);
+
+ element.empty();
+
+ element.append(``);
+ element.append(``);
+
+ for (var key in filters) {
+ var value = getFilterOptionValue(tableKey, key, filters[key]);
+ var title = getFilterTitle(tableKey, key);
+
+ element.append(`
${title} = ${value}x
`);
+ }
+
+ // Add a callback for adding a new filter
+ element.find(`#${add}`).click(function() {
+
+ var html = '
';
+
+ html += generateAvailableFilterList(tableKey);
+ html += generateFilterInput(tableKey);
+
+ html += ``;
+
+ html += '
';
+
+ element.append(html);
+
+ // Add a callback for when the filter tag selection is changed
+ element.find(`#filter-tag-${tableKey}`).on('change', function() {
+ var list = element.find(`#filter-value-${tableKey}`);
+
+ list.replaceWith(generateFilterInput(tableKey, this.value));
+ });
+
+ // Add a callback for when the new filter is created
+ element.find(`#filter-make-${tableKey}`).click(function() {
+ var tag = element.find(`#filter-tag-${tableKey}`).val();
+ var val = element.find(`#filter-value-${tableKey}`).val();
+
+ var filters = addTableFilter(tableKey, tag, val);
+
+ reloadStockTable(table, filters);
+
+ // Run this function again
+ setupFilterList(tableKey, table, target);
+ });
+
+ });
+
+ // Add a callback for clearing all the filters
+ element.find(`#${clear}`).click(function() {
+ var filters = clearTableFilters(tableKey);
+
+ reloadStockTable(table, filters);
+
+ setupFilterList(tableKey, table, target);
+ });
+
+ // Add callback for deleting each filter
+ element.find(".close").click(function(event) {
+ var me = $(this);
+
+ var filter = me.attr(`filter-tag-${tableKey}`);
+
+ var filters = removeTableFilter(tableKey, filter);
+
+ reloadStockTable(table, filters);
+
+ // Run this function again!
+ setupFilterList(tableKey, table, target);
+ });
+}
+
+
/**
* Return the pretty title for the given table and filter selection.
* If no title is provided, default to the key value.
diff --git a/InvenTree/InvenTree/static/script/inventree/stock.js b/InvenTree/InvenTree/static/script/inventree/stock.js
index 56e9954f8a..053dbb81c7 100644
--- a/InvenTree/InvenTree/static/script/inventree/stock.js
+++ b/InvenTree/InvenTree/static/script/inventree/stock.js
@@ -15,73 +15,6 @@ function getStockLocations(filters={}, options={}) {
}
-function createStockFilter() {
-
- var html = generateAvailableFilterList("stock");
-
- // Add in a (blank) selection for filter value
- html += generateFilterInput("stock" );
- //html += `
`;
-
- html += ``;
-
- var div = $("#add-new-filter");
-
- div.html(html);
-
- div.find("#filter-make").click(function() {
- var tag = div.find("#filter-tag-stock").val();
- var val = div.find("#filter-value-stock").val();
-
- addTableFilter("stock", tag, val);
- });
-
- div.find('#filter-tag-stock').on('change', function() {
-
- var list = div.find('#filter-value-stock');
-
- list.replaceWith(generateFilterInput("stock", this.value));
- });
-
-}
-
-function clearStockFilters() {
- // TODO
- console.log("clear stock filters");
-}
-
-function updateStockFilterList(filterListElement, table) {
-
- var filters = loadTableFilters("stock");
-
- for (var key in filters) {
-
- var value = getFilterOptionValue("stock", key, filters[key]);
-
- $(filterListElement).append(`
${key} = ${value}x
` );
- }
-
- // Whenever the callback is called, pass the original parameters through
-
- $(filterListElement).find(".close").click(function(event) {
- var element = $(this);
-
- var tag = element.attr('filter-tag-stock');
-
- // Clear out any existing elements
- $(filterListElement).empty();
-
- var filters = removeTableFilter("stock", tag);
-
- reloadStockTable(table, filters);
-
- // Call this function again to re-update the filterss
- updateStockFilterList(filterListElement, table);
-
- });
-}
-
-
/* Functions for interacting with stock management forms
*/
@@ -160,7 +93,7 @@ function loadStockTable(table, options) {
// It will be required if the table is refreshed
//options.original = original;
- updateStockFilterList(filterListElement, table);
+ setupFilterList("stock", table, filterListElement);
$("#filter-add").click(function() {
createStockFilter();
diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py
index 51987df4b7..3e71262dec 100644
--- a/InvenTree/part/templatetags/inventree_extras.py
+++ b/InvenTree/part/templatetags/inventree_extras.py
@@ -14,6 +14,9 @@ register = template.Library()
@register.simple_tag(takes_context=True)
def load_status_codes(context):
+ """
+ Make the various StatusCodes available to the page context
+ """
context['order_status_codes'] = OrderStatus.list()
context['stock_status_codes'] = StockStatus.list()
diff --git a/InvenTree/templates/stock_table.html b/InvenTree/templates/stock_table.html
index db40da2d87..2106b0a3a4 100644
--- a/InvenTree/templates/stock_table.html
+++ b/InvenTree/templates/stock_table.html
@@ -18,9 +18,10 @@