diff --git a/AuthApp/funcs.py b/AuthApp/funcs.py index aa77bc8..ab412bd 100644 --- a/AuthApp/funcs.py +++ b/AuthApp/funcs.py @@ -1,5 +1,19 @@ from django.template.loader import render_to_string + +def get_user_timezone_Dict(user, request=None): + tz = None + if request: + tz = request.COOKIES.get("user_tz") + if not tz and user.is_authenticated: + tz = user.user_profile.get_timezone() + + if not tz: + from django.conf import settings + tz = settings.TIME_ZONE + + return {'user_tz': tz} + def get_dashboard_page_content_html(request): from ChatServiceApp.funcs import get_unanswered_msgs_count_for_user diff --git a/AuthApp/js_views.py b/AuthApp/js_views.py index 83773ab..d064ff9 100644 --- a/AuthApp/js_views.py +++ b/AuthApp/js_views.py @@ -232,6 +232,7 @@ def chats_ajax(request): 'receivers': receivers, # 'messages': cur_chat_msgs } + Dict.update(get_user_timezone_Dict(request.user, request=request)) html = render_to_string('blocks/profile/b_chats.html', Dict, request=request) return JsonResponse({'html': html}, status=200) diff --git a/AuthApp/models.py b/AuthApp/models.py index 3ed08e8..56e0d9b 100644 --- a/AuthApp/models.py +++ b/AuthApp/models.py @@ -53,6 +53,12 @@ class UserProfile(BaseModel): mailing_on = models.BooleanField(default=False, verbose_name=_('Рассылка')) + def get_timezone(self): + tz = None + if 'user_timezone' in self.json_data: + tz = self.json_data['user_timezone'] + return tz + def save_user_alerts_to_session(self, request): for_save_to_session = self.get_node_by_name('for_save_to_session') if for_save_to_session: diff --git a/ChatServiceApp/funcs.py b/ChatServiceApp/funcs.py index 14baba2..4df1ded 100644 --- a/ChatServiceApp/funcs.py +++ b/ChatServiceApp/funcs.py @@ -13,7 +13,7 @@ from django.urls import reverse import json from datetime import datetime, time from django.conf import settings - +from AuthApp.funcs import get_user_timezone_Dict def get_unanswered_msgs_count_for_user(user): @@ -56,7 +56,6 @@ def get_update_chat_Dict(data): if data['sender'] == data['cur_user']: user = copy.copy(sender) cur_receiver = copy.copy(receiver) - # context_Dict.update({'user': sender}) else: user = copy.copy(receiver) cur_receiver = copy.copy(sender) @@ -65,8 +64,9 @@ def get_update_chat_Dict(data): # context_Dict.update({'cur_receiver': receiver}) context_Dict.update({ 'cur_receiver': cur_receiver, - 'user': user + 'user': user, }) + context_Dict.update(get_user_timezone_Dict(user)) if sender == receiver: print('!') @@ -112,7 +112,7 @@ def get_update_chat_Dict(data): context_Dict.update({ 'messages': msgs, - 'MEDIA_URL': settings.MEDIA_URL + 'MEDIA_URL': settings.MEDIA_URL, }) html = render_to_string(tpl_name, context_Dict) if required_full_support_chat_html: @@ -288,10 +288,7 @@ def send_msg(data): def get_chat_page_content_html(request, receiver_id=None): from AuthApp.models import User - from django.utils import timezone - - msg = f'now {timezone.now()}' - print(msg) + from AuthApp.funcs import get_user_timezone_Dict msgs = [] try: @@ -311,6 +308,7 @@ def get_chat_page_content_html(request, receiver_id=None): 'receivers': receivers, 'page': 'chat', } + Dict.update(get_user_timezone_Dict(request.user, request=request)) tpl_name = 'blocks/profile/b_chats.html' html = render_to_string(tpl_name, Dict, request=request) diff --git a/ChatServiceApp/js_views.py b/ChatServiceApp/js_views.py index 1a13962..c896c34 100644 --- a/ChatServiceApp/js_views.py +++ b/ChatServiceApp/js_views.py @@ -53,6 +53,7 @@ def show_chat_w_user_ajax(request): data = json.loads(request.body) Dict = get_chat_page_content_Dict(request, data['user_id']) + Dict.update(get_user_timezone_Dict(request.user, request=request)) tpl_name = 'blocks/profile/b_chats.html' @@ -99,7 +100,7 @@ def update_chat_ajax2(request): receiver = User.objects.get(id=data['receiver']) context_Dict.update({'cur_receiver': receiver}) - + context_Dict.update(get_user_timezone_Dict(request.user, request=request)) if not ticket: @@ -190,6 +191,7 @@ def update_chat_ajax(request): receiver = User.objects.get(id=data['receiver']) context_Dict.update({'cur_receiver': receiver}) + context_Dict.update(get_user_timezone_Dict(request.user, request=request)) if ticket: diff --git a/TWB/tz_middelware.py b/TWB/tz_middelware.py index 4b58bd9..5c22305 100644 --- a/TWB/tz_middelware.py +++ b/TWB/tz_middelware.py @@ -9,8 +9,13 @@ class TimezoneMiddleware: def __call__(self, request): tz = request.COOKIES.get("user_tz") if tz: - msg = f'user={str(request.user.id)} tz={str(tz)}' - print(msg) + if request.user.is_authenticated: + if not 'user_timezone' in request.user.user_profile.json_data or request.user.user_profile.json_data['user_timezone'] != tz: + request.user.user_profile.json_data['user_timezone'] = tz + request.user.user_profile.save(update_fields=['json_data']) + + msg = f'user={str(request.user.id)} tz={str(tz)}' + print(msg) timezone.activate(zoneinfo.ZoneInfo(tz)) else: timezone.activate(zoneinfo.ZoneInfo("UTC")) diff --git a/templates/blocks/profile/b_messages_container.html b/templates/blocks/profile/b_messages_container.html index 1af33bd..f7aab90 100644 --- a/templates/blocks/profile/b_messages_container.html +++ b/templates/blocks/profile/b_messages_container.html @@ -1,5 +1,5 @@ {% load static %} - +{% load tz %} {#{% include "widgets/w_file.html" %}#} {% if not messages and ticket %} @@ -8,7 +8,9 @@ {% for msg in messages %} {% include "widgets/w_message.html" %} {% if forloop.first %} - + {% timezone user_tz %} + + {% endtimezone %} {% endif %} {% endfor %} {% endif %} diff --git a/templates/widgets/w_file.html b/templates/widgets/w_file.html index e0fb852..bf11392 100644 --- a/templates/widgets/w_file.html +++ b/templates/widgets/w_file.html @@ -1,5 +1,6 @@ {% load static %} {% load tt_chat %} +{% load tz %}