From 432ecc1d96e752365847fff26b300f1a1028577c Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 25 Oct 2020 21:33:13 +1100 Subject: [PATCH] Display boolean values as checkboxes --- InvenTree/common/models.py | 44 ++++++++++++++----- .../part/templatetags/inventree_extras.py | 24 +++++++++- .../templates/InvenTree/settings/setting.html | 18 +++++++- 3 files changed, 71 insertions(+), 15 deletions(-) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 5dfc1cd35f..0e778610cb 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -191,6 +191,23 @@ class InvenTreeSetting(models.Model): else: return '' + @classmethod + def get_setting_object(cls, key): + """ + Return an InvenTreeSetting object matching the given key. + + - Key is case-insensitive + - Returns None if no match is made + """ + + key = str(key).strip().upper() + + try: + setting = InvenTreeSetting.objects.filter(key__iexact=key).first() + return setting + except (InvenTreeSetting.DoesNotExist): + return None + @classmethod def get_setting_pk(cls, key): """ @@ -199,12 +216,11 @@ class InvenTreeSetting(models.Model): If the setting does not exist, return None """ - key = str(key).strip().upper() + setting = InvenTreeSetting.get_setting_object(cls) - try: - setting = InvenTreeSetting.objects.filter(key__iexact=key).first() + if setting: return setting.pk - except InvenTreeSetting.DoesNotExist: + else: return None @classmethod @@ -218,14 +234,11 @@ class InvenTreeSetting(models.Model): if backup_value is None: backup_value = cls.get_default_value(key) - try: - settings = InvenTreeSetting.objects.filter(key__iexact=key) + setting = InvenTreeSetting.get_setting_object(key) - if len(settings) > 0: - return settings[0].value - else: - return backup_value - except InvenTreeSetting.DoesNotExist: + if setting: + return setting.value + else: return backup_value @classmethod @@ -325,6 +338,15 @@ class InvenTreeSetting(models.Model): return validator == bool + def as_bool(self): + """ + Return the value of this setting converted to a boolean value. + + Warning: Only use on values where is_bool evaluates to true! + """ + + return InvenTree.helpers.str2bool(self.value) + class Currency(models.Model): """ diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index c5a45bc836..9be02b8273 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -5,7 +5,8 @@ import os from django import template from InvenTree import version, settings -from InvenTree.helpers import decimal2string + +import InvenTree.helpers from common.models import InvenTreeSetting, ColorTheme @@ -16,9 +17,15 @@ register = template.Library() def decimal(x, *args, **kwargs): """ Simplified rendering of a decimal number """ - return decimal2string(x) + return InvenTree.helpers.decimal2string(x) +@register.simple_tag() +def str2bool(x, *args, **kwargs): + """ Convert a string to a boolean value """ + + return InvenTree.helpers.str2bool(x) + @register.simple_tag() def inrange(n, *args, **kwargs): """ Return range(n) for iterating through a numeric quantity """ @@ -86,6 +93,19 @@ def inventree_docs_url(*args, **kwargs): return "https://inventree.readthedocs.io/" +@register.simple_tag() +def setting_object(key, *args, **kwargs): + """ + Return a setting object speciifed by the given key + (Or return None if the setting does not exist) + """ + + setting = InvenTreeSetting.get_setting_object(key) + + print("Setting:", key, setting) + + return setting + @register.simple_tag() def settings_name(key, *args, **kwargs): """ diff --git a/InvenTree/templates/InvenTree/settings/setting.html b/InvenTree/templates/InvenTree/settings/setting.html index 6f6a516b84..0a75b15cdd 100644 --- a/InvenTree/templates/InvenTree/settings/setting.html +++ b/InvenTree/templates/InvenTree/settings/setting.html @@ -1,10 +1,24 @@ {% load inventree_extras %} {% load i18n %} +{% setting_object key as setting %} {% settings_name key %} - {% settings_value key %}{% settings_units key %} - {% settings_description key %} + + {% if setting.is_bool %} +
+ +
+ {% else %} + {% if setting.value %} + {% settings_value key %}{% settings_units key %} + {% else %} + {% trans "No value set" %} + {% endif %} + {% endif %} + + {% settings_description key %} +