feat: Add timezone support

ref: #248 #385 #388 nofusscomputing/centurion_erp_ui#4 nofusscomputing/centurion_erp_ui#26
This commit is contained in:
2024-11-12 06:27:50 +09:30
parent 2b25e2bb02
commit e42a009014
6 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1,38 @@
import zoneinfo
from django.utils import timezone
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
def _activate_tz(tz):
timezone.activate(zoneinfo.ZoneInfo(tz))
# tzname = request.session.get("django_timezone", None)
# if tzname:
# _activate_tz(tzname)
# else:
user = request.user
if hasattr(user, 'user_settings'):
tzname = user.user_settings.all()[0].timezone
# set the cookie
# request.session['django_timezone'] = tzname
_activate_tz(tzname)
else:
timezone.deactivate()
return self.get_response(request)

View File

@ -135,6 +135,7 @@ MIDDLEWARE = [
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'core.middleware.get_request.RequestMiddleware',
'app.middleware.timezone.TimezoneMiddleware',
]

View File

@ -18,6 +18,7 @@ class UserSettingsForm(CommonModelForm):
fields = [
'default_organization',
'timezone',
]
model = UserSettings

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,7 @@
import zoneinfo
from django.contrib.auth.models import User
from django.conf import settings
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
@ -6,6 +9,14 @@ from django.dispatch import receiver
from access.fields import *
from access.models import Organization
sorted_timezones = sorted(zoneinfo.available_timezones())
TIMEZONES = tuple(zip(
sorted_timezones,
sorted_timezones
))
class UserSettingsCommonFields(models.Model):
@ -46,6 +57,7 @@ class UserSettings(UserSettingsCommonFields):
blank= False,
help_text = 'User this Setting belongs to',
on_delete=models.CASCADE,
related_name='user_settings',
verbose_name = 'User'
)
@ -60,6 +72,14 @@ class UserSettings(UserSettingsCommonFields):
verbose_name = 'Default Organization'
)
timezone = models.CharField(
default='UTC',
choices=TIMEZONES,
help_text = 'What Timezone do you wish to have times displayed in',
max_length=32,
verbose_name = 'Your Timezone',
)
def get_organization(self):

View File

@ -43,6 +43,11 @@
<span>{{ settings.default_organization }}</span>
</div>
<div class="detail-view-field">
<label>{{ form.timezone.label }}</label>
<span>{{ settings.timezone }}</span>
</div>
</div>
<div>
<input type="button" value="Edit"