Display boolean values as checkboxes

This commit is contained in:
Oliver Walters 2020-10-25 21:33:13 +11:00
parent 3a325399c6
commit 432ecc1d96
3 changed files with 71 additions and 15 deletions

View File

@ -191,6 +191,23 @@ class InvenTreeSetting(models.Model):
else: else:
return '' 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 @classmethod
def get_setting_pk(cls, key): def get_setting_pk(cls, key):
""" """
@ -199,12 +216,11 @@ class InvenTreeSetting(models.Model):
If the setting does not exist, return None If the setting does not exist, return None
""" """
key = str(key).strip().upper() setting = InvenTreeSetting.get_setting_object(cls)
try: if setting:
setting = InvenTreeSetting.objects.filter(key__iexact=key).first()
return setting.pk return setting.pk
except InvenTreeSetting.DoesNotExist: else:
return None return None
@classmethod @classmethod
@ -218,15 +234,12 @@ class InvenTreeSetting(models.Model):
if backup_value is None: if backup_value is None:
backup_value = cls.get_default_value(key) backup_value = cls.get_default_value(key)
try: setting = InvenTreeSetting.get_setting_object(key)
settings = InvenTreeSetting.objects.filter(key__iexact=key)
if len(settings) > 0: if setting:
return settings[0].value return setting.value
else: else:
return backup_value return backup_value
except InvenTreeSetting.DoesNotExist:
return backup_value
@classmethod @classmethod
def set_setting(cls, key, value, user, create=True): def set_setting(cls, key, value, user, create=True):
@ -325,6 +338,15 @@ class InvenTreeSetting(models.Model):
return validator == bool 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): class Currency(models.Model):
""" """

View File

@ -5,7 +5,8 @@ import os
from django import template from django import template
from InvenTree import version, settings from InvenTree import version, settings
from InvenTree.helpers import decimal2string
import InvenTree.helpers
from common.models import InvenTreeSetting, ColorTheme from common.models import InvenTreeSetting, ColorTheme
@ -16,9 +17,15 @@ register = template.Library()
def decimal(x, *args, **kwargs): def decimal(x, *args, **kwargs):
""" Simplified rendering of a decimal number """ """ 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() @register.simple_tag()
def inrange(n, *args, **kwargs): def inrange(n, *args, **kwargs):
""" Return range(n) for iterating through a numeric quantity """ """ Return range(n) for iterating through a numeric quantity """
@ -86,6 +93,19 @@ def inventree_docs_url(*args, **kwargs):
return "https://inventree.readthedocs.io/" 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() @register.simple_tag()
def settings_name(key, *args, **kwargs): def settings_name(key, *args, **kwargs):
""" """

View File

@ -1,10 +1,24 @@
{% load inventree_extras %} {% load inventree_extras %}
{% load i18n %} {% load i18n %}
{% setting_object key as setting %}
<tr> <tr>
<td><b>{% settings_name key %}</b></td> <td><b>{% settings_name key %}</b></td>
<td><b>{% settings_value key %}</b>{% settings_units key %}</td> <td>
<td>{% settings_description key %}</td> {% if setting.is_bool %}
<div>
<input fieldname='{{ setting.key }}' class='slidey' type='checkbox' data-offstyle='warning' data-onstyle='success' data-size='small' data-toggle='toggle' disabled autocomplete='off' {% if setting.as_bool %}checked=''{% endif %}>
</div>
{% else %}
{% if setting.value %}
<b>{% settings_value key %}</b>{% settings_units key %}</td>
{% else %}
<i>{% trans "No value set" %}</i>
{% endif %}
{% endif %}
<td>
{% settings_description key %}
</td>
<td> <td>
<div class='btn-group float-right'> <div class='btn-group float-right'>
<button class='btn btn-default btn-glyph btn-edit-setting' pk='{% settings_pk key %}' setting='{{ key }}' title='{% trans "Edit setting" %}'> <button class='btn btn-default btn-glyph btn-edit-setting' pk='{% settings_pk key %}' setting='{{ key }}' title='{% trans "Edit setting" %}'>