diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py
index 7d398c6e4f..d3f144800d 100644
--- a/InvenTree/InvenTree/urls.py
+++ b/InvenTree/InvenTree/urls.py
@@ -96,6 +96,7 @@ settings_urls = [
# These javascript files are served "dynamically" - i.e. rendered on demand
dynamic_javascript_urls = [
url(r'^inventree.js', DynamicJsView.as_view(template_name='js/dynamic/inventree.js'), name='inventree.js'),
+ url(r'^settings.js', DynamicJsView.as_view(template_name='js/dynamic/settings.js'), name='settings.js'),
]
# These javascript files are pased through the Django translation layer
diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py
index 72e8cf8060..5131248db4 100644
--- a/InvenTree/common/models.py
+++ b/InvenTree/common/models.py
@@ -38,6 +38,45 @@ class BaseInvenTreeSetting(models.Model):
class Meta:
abstract = True
+ @classmethod
+ def allValues(cls, user=None):
+ """
+ Return a dict of "all" defined global settings.
+
+ This performs a single database lookup,
+ and then any settings which are not *in* the database
+ are assigned their default values
+ """
+
+ keys = set()
+ settings = []
+
+ results = cls.objects.all()
+
+ if user is not None:
+ results = results.filter(user=user)
+
+ # Query the database
+ for setting in results:
+ settings.append({
+ "key": setting.key.upper(),
+ "value": setting.value
+ })
+
+ keys.add(setting.key.upper())
+
+ # Specify any "default" values which are not in the database
+ for key in cls.GLOBAL_SETTINGS.keys():
+
+ if key.upper() not in keys:
+
+ settings.append({
+ "key": key.upper(),
+ "value": cls.get_setting_default(key)
+ })
+
+ return settings
+
@classmethod
def get_setting_name(cls, key):
"""
@@ -739,7 +778,6 @@ class InvenTreeSetting(BaseInvenTreeSetting):
help_text=_('Settings key (must be unique - case insensitive'),
)
-
class InvenTreeUserSetting(BaseInvenTreeSetting):
"""
An InvenTreeSetting object with a usercontext
diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py
index f930fa4467..5ebc939305 100644
--- a/InvenTree/part/templatetags/inventree_extras.py
+++ b/InvenTree/part/templatetags/inventree_extras.py
@@ -207,6 +207,24 @@ def settings_value(key, *args, **kwargs):
return InvenTreeSetting.get_setting(key)
+@register.simple_tag()
+def user_settings(user, *args, **kwargs):
+ """
+ Return all USER settings as a key:value dict
+ """
+
+ return InvenTreeUserSetting.allValues(user=user)
+
+
+@register.simple_tag()
+def global_settings(*args, **kwargs):
+ """
+ Return all GLOBAL InvenTree settings as a key:value dict
+ """
+
+ return InvenTreeSetting.allValues()
+
+
@register.simple_tag()
def get_color_theme_css(username):
try:
diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html
index 72f20404aa..22955e208b 100644
--- a/InvenTree/templates/base.html
+++ b/InvenTree/templates/base.html
@@ -145,8 +145,11 @@
-
-
+
+
+
+
+
diff --git a/InvenTree/templates/js/dynamic/settings.js b/InvenTree/templates/js/dynamic/settings.js
new file mode 100644
index 0000000000..ad4e297c4a
--- /dev/null
+++ b/InvenTree/templates/js/dynamic/settings.js
@@ -0,0 +1,17 @@
+{% load inventree_extras %}
+// InvenTree settings
+
+{% user_settings request.user as USER_SETTINGS %}
+{% global_settings as GLOBAL_SETTINGS %}
+
+var user_settings = {
+ {% for setting in USER_SETTINGS %}
+ {{ setting.key }}: {{ setting.value }},
+ {% endfor %}
+};
+
+var global_settings = {
+ {% for setting in GLOBAL_SETTINGS %}
+ {{ setting.key }}: {{ setting.value }},
+ {% endfor %}
+};
\ No newline at end of file