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 @@
    {% endif %} +
    + +
    - - diff --git a/InvenTree/templates/table_filters.html b/InvenTree/templates/table_filters.html index 5ab0aefec8..ca1f741fa6 100644 --- a/InvenTree/templates/table_filters.html +++ b/InvenTree/templates/table_filters.html @@ -1,10 +1,10 @@ {% load i18n %} {% load inventree_extras %} -