Render filter options as a template

- This allows the values to be seen by the translation layer
- Also means that whenever a new option is added, it will be automatically available to the front-end!
This commit is contained in:
Oliver Walters 2020-04-11 13:24:23 +10:00
parent 57c5d6c97a
commit c1b59eeaab
5 changed files with 78 additions and 46 deletions

View File

@ -97,51 +97,6 @@ function addTableFilter(tableKey, filterKey, filterValue) {
}
/**
* Return the custom filtering options available for a particular table
*
* @param {*} tableKey - string key lookup for the table
*/
function getAvailableTableFilters(tableKey) {
tableKey = tableKey.toLowerCase();
// Filters for the "Stock" table
if (tableKey == 'stock') {
return {
'cascade': {
'type': 'bool',
'description': 'Include stock in sublocations',
'title': 'Include sublocations',
},
'active': {
'type': 'bool',
'title': 'Acitve parts',
'description': 'Show stock for active parts',
},
'status': {
'options': {
'OK': 10,
'ATTENTION': 50,
'DAMAGED': 55,
'DESTROYED': 60,
'LOST': 70
},
'title': 'Stock status',
'description': 'Stock status',
},
'test': {
title: 'A test parameter',
},
};
}
// Finally, no matching key
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.

View File

@ -2,6 +2,26 @@ from django.utils.translation import ugettext as _
class StatusCode:
"""
Base class for representing a set of StatusCodes.
This is used to map a set of integer values to text.
"""
@classmethod
def list(cls):
"""
Return the StatusCode options as a list of mapped key / value items
"""
codes = []
for key in cls.options.keys():
codes.append({
'key': key,
'value': cls.options[key]
})
return codes
@classmethod
def items(cls):

View File

@ -7,10 +7,22 @@ from InvenTree import version
from InvenTree.helpers import decimal2string
from common.models import InvenTreeSetting
from InvenTree.status_codes import OrderStatus, StockStatus, BuildStatus
register = template.Library()
@register.simple_tag(takes_context=True)
def load_status_codes(context):
context['order_status_codes'] = OrderStatus.list()
context['stock_status_codes'] = StockStatus.list()
context['build_status_codes'] = BuildStatus.list()
# Need to return something as the result is rendered to the page
return ''
@register.simple_tag()
def decimal(x, *args, **kwargs):
""" Simplified rendering of a decimal number """

View File

@ -1,4 +1,5 @@
{% load static %}
{% load i18n %}
<!DOCTYPE html>
<html lang="en">
@ -116,7 +117,10 @@ InvenTree
{% block js_load %}
{% endblock %}
{% include "table_filters.html" %}
<script type='text/javascript'>
$(document).ready(function () {
{% block js_ready %}
{% endblock %}
@ -125,6 +129,7 @@ $(document).ready(function () {
showCachedAlerts();
});
</script>
{% block js %}

View File

@ -0,0 +1,40 @@
{% load i18n %}
{% load inventree_extras %}
<script type='text/javascript'>
{% load_status_codes %}
function getAvailableTableFilters(tableKey) {
// Filters for the "Stock" table
if (tableKey == 'stock') {
return {
'cascade': {
'type': 'bool',
'description': '{% trans "Include stock in sublocations" %}',
'title': '{% trans "Include sublocations" %}',
},
'active': {
'type': 'bool',
'title': '{% trans "Active parts" %}',
'description': '{% trans "Show stock for active parts" %}',
},
'status': {
'options': {
{% for opt in stock_status_codes %}'{{ opt.value }}': '{{ opt.key }}',
{% endfor %}
},
'title': 'Stock status',
'description': 'Stock status',
},
'test': {
title: 'A test parameter',
},
};
}
// Finally, no matching key
return {};
}
</script>