2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 03:56:43 +00:00

Theme change works but applies to all user

This commit is contained in:
eeintech 2020-09-07 15:15:51 -05:00
parent 0548bee8ad
commit 2e5ec5d249
7 changed files with 65 additions and 17 deletions

View File

@ -9,7 +9,7 @@ from django.utils.translation import ugettext as _
from django import forms from django import forms
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field from crispy_forms.layout import Layout, Field
from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton
from django.contrib.auth.models import User from django.contrib.auth.models import User
from common.models import Theme from common.models import Theme
@ -171,4 +171,16 @@ class ThemeSelectForm(forms.ModelForm):
model = Theme model = Theme
fields = [ fields = [
'theme' 'theme'
] ]
def __init__(self, *args, **kwargs):
super(ThemeSelectForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
# Form rendering
self.helper.form_show_labels = False
self.helper.form_class = 'form-inline'
# self.helper.field_template = 'bootstrap4/layout/inline_field.html'
self.helper.layout = Layout(
Field('theme'),
StrictButton(_('Apply Theme'), css_class='btn btn-primary', type='submit')
)

View File

@ -564,6 +564,32 @@ class ThemeSelectView(FormView):
success_url = reverse_lazy('settings-theme') success_url = reverse_lazy('settings-theme')
template_name = "InvenTree/settings/theme.html" template_name = "InvenTree/settings/theme.html"
def get_initial(self):
""" Select user theme """
initial = super(ThemeSelectView, self).get_initial()
initial['theme'] = Theme.objects.all().get().theme
return initial
def post(self, request, *args, **kwargs):
""" Save user color theme """
form = self.get_form()
if form.is_valid():
theme_select = form.cleaned_data['theme']
try:
user_theme = Theme.objects.all().get()
except Theme.DoesNotExist:
print('No theme selected yet')
user_theme = Theme()
# Set color theme
user_theme.theme = theme_select
user_theme.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
class DatabaseStatsView(AjaxView): class DatabaseStatsView(AjaxView):
""" View for displaying database statistics """ """ View for displaying database statistics """

View File

@ -1,4 +1,4 @@
# Generated by Django 3.0.7 on 2020-09-07 16:12 # Generated by Django 3.0.7 on 2020-09-07 20:12
from django.db import migrations, models from django.db import migrations, models
@ -14,7 +14,7 @@ class Migration(migrations.Migration):
name='Theme', name='Theme',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('theme', models.IntegerField(choices=[(0, 'Default'), (1, 'Darker')], default=0)), ('theme', models.CharField(blank=True, choices=[('', 'Default'), ('-darker', 'Darker')], default='', max_length=20)),
], ],
), ),
] ]

View File

@ -159,12 +159,12 @@ class Currency(models.Model):
class Theme(models.Model): class Theme(models.Model):
""" Color Theme setting """ """ Color Theme setting """
class ThemeChoices(models.IntegerChoices): class ThemeChoices(models.TextChoices):
DEFAULT = 0, _('Default') DEFAULT = '', _('Default')
DARKER = 1, _('Darker') DARKER = '-darker', _('Darker')
theme = models.IntegerField(choices=ThemeChoices.choices, theme = models.CharField(max_length=20,
default=ThemeChoices.DEFAULT) choices=ThemeChoices.choices,
default=ThemeChoices.DEFAULT,
blank=True)
def __str__(self):
return self.theme

View File

@ -3,10 +3,10 @@ over and above the built-in Django tags.
""" """
from django import template from django import template
from InvenTree import version from InvenTree import version, settings
from InvenTree.helpers import decimal2string from InvenTree.helpers import decimal2string
from common.models import InvenTreeSetting from common.models import InvenTreeSetting, Theme
register = template.Library() register = template.Library()
@ -88,3 +88,9 @@ def inventree_docs_url(*args, **kwargs):
@register.simple_tag() @register.simple_tag()
def inventree_setting(key, *args, **kwargs): def inventree_setting(key, *args, **kwargs):
return InvenTreeSetting.get_setting(key) return InvenTreeSetting.get_setting(key)
@register.simple_tag()
def get_theme_css():
user_theme = Theme.objects.all().get().theme
return f'{settings.STATIC_URL}css/inventree' + user_theme + '.css'

View File

@ -1,4 +1,6 @@
{% extends "InvenTree/settings/settings.html" %} {% extends "InvenTree/settings/settings.html" %}
{% load i18n %}
{% load inventree_extras %}
{% block tabs %} {% block tabs %}
{% include "InvenTree/settings/tabs.html" with tab='theme' %} {% include "InvenTree/settings/tabs.html" with tab='theme' %}
@ -16,9 +18,10 @@
<div class='col-sm-6'> <div class='col-sm-6'>
<div style='float: left;'> <div style='float: left;'>
<form action="{% url 'settings-theme' %}" method="post"> <form action="{% url 'settings-theme' %}" method="post">
{% csrf_token %} {% csrf_token %}
{{ form }} {% load crispy_forms_tags %}
<input class='btn btn-primary' type="submit" value='Apply Theme'> {% crispy form %}
{# <button type='submit' class='btn btn-primary'>{% trans "Apply Theme" %}</button> #}
</form> </form>
</div> </div>
</div> </div>

View File

@ -1,5 +1,6 @@
{% load static %} {% load static %}
{% load i18n %} {% load i18n %}
{% load inventree_extras %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
@ -38,7 +39,7 @@
<link rel="stylesheet" href="{% static 'css/select2.css' %}"> <link rel="stylesheet" href="{% static 'css/select2.css' %}">
<link rel="stylesheet" href="{% static 'css/select2-bootstrap.css' %}"> <link rel="stylesheet" href="{% static 'css/select2-bootstrap.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap-toggle.css' %}"> <link rel="stylesheet" href="{% static 'css/bootstrap-toggle.css' %}">
<link rel="stylesheet" href="{% static 'css/inventree.css' %}"> <link rel="stylesheet" href="{% get_theme_css %}">
{% block css %} {% block css %}
{% endblock %} {% endblock %}