From 00f99ce66767dbcf10ff3841fdcd398dee8332e4 Mon Sep 17 00:00:00 2001 From: SDE Date: Thu, 17 Aug 2023 15:04:07 +0300 Subject: [PATCH] 0.3.27 support chat v3 --- ChatServiceApp/funcs.py | 75 ++++++++++++++++--------------- ChatServiceApp/js_views.py | 49 ++++++++++---------- ChatServiceApp/websocket_views.py | 37 ++++++++++++++- 3 files changed, 100 insertions(+), 61 deletions(-) diff --git a/ChatServiceApp/funcs.py b/ChatServiceApp/funcs.py index 2101eca..3517be5 100644 --- a/ChatServiceApp/funcs.py +++ b/ChatServiceApp/funcs.py @@ -77,7 +77,7 @@ def get_update_chat_Dict(data): if ticket: msgs = get_messages_for_ticket(ticket) # если меньше 3 сообщений значит выведена не полная форма - требуется другой шаблон - if len(msgs) < 3 and data['receiver'] == data['cur_user']: + if 'bad_manager' in data and len(msgs) < 3 and data['receiver'] == data['cur_user']: tpl_name = 'blocks/profile/b_support_chat.html' required_full_support_chat_html = True @@ -107,6 +107,7 @@ def send_msg(data): from AuthApp.models import User res_Dict = {} msg = None + required_update_tickets_list_wo_managers = False try: if type(data) == str: @@ -127,6 +128,7 @@ def send_msg(data): # если только что манагер присоединился к тикету if ticket: + required_update_tickets_list_wo_managers = True if not ticket.manager: if sender.is_staff: ticket.manager = sender @@ -135,23 +137,27 @@ def send_msg(data): ticket.save() + # создаем сообщение на базе темы и сообщения введенных пользователем при создании тикета kwargs = { 'sender': ticket.owner, 'receiver': ticket.manager, 'text': ticket.text, + 'group': ticket, } - kwargs.update({'group': ticket}) - msg = Message.objects.create(**kwargs) Message.objects.filter(id=msg.id).update(modifiedDT=ticket.createDT, createDT=ticket.createDT) + # ------------------------ + + else: + if not sender in (ticket.owner, ticket.manager) or not receiver in (ticket.owner, ticket.manager): + return { + 'msg': None, + 'required_update_tickets_list_wo_managers': required_update_tickets_list_wo_managers + } res_Dict.update({ 'ticket': ticket, - # 'cur_receiver': receiver, - # 'messages': get_messages_for_ticket(ticket), - # 'text': data['text'], - # 'modifiedDT': msg.modifiedDT }) msg_create_kwargs.update({ @@ -167,39 +173,38 @@ def send_msg(data): 'text': data['text'] }) - session_data = { - 'for_save_to_session': { - 'user_alerts': { - 'new_message': True - } - } - } - - receiver.user_profile.add_node_to_json_data(session_data, save=True) - msg = Message.objects.create(**msg_create_kwargs) - if ticket: - msgs = get_messages_for_ticket(ticket) - else: - msgs = get_msgs_for_chat_w_users(sender, receiver) - - receivers, unread_msgs_count = get_chat_receivers_for_user(sender) - - res_Dict.update({ - 'messages': msgs, - 'cur_receiver': receiver, - 'receivers': receivers, - 'text': data['text'], - 'modifiedDT': msgs[0].modifiedDT - }) - - html = render_to_string(tpl_name, res_Dict) - return {'html': html, 'sender': data['sender']} + # if ticket: + # msgs = get_messages_for_ticket(ticket) + # else: + # msgs = get_msgs_for_chat_w_users(sender, receiver) + # + # receivers, unread_msgs_count = get_chat_receivers_for_user(sender) + # + # res_Dict.update({ + # 'messages': msgs, + # 'cur_receiver': receiver, + # 'receivers': receivers, + # 'text': data['text'], + # 'modifiedDT': msgs[0].modifiedDT + # }) + # + # html = render_to_string(tpl_name, res_Dict) + # return {'html': html, 'sender': data['sender']} + return { + 'msg': msg, + 'required_update_tickets_list_wo_managers': required_update_tickets_list_wo_managers + } except Exception as e: msg = f'send_msg_ajax Error = {str(e)}' - return {'error': msg} + print(msg) + # return {'error': msg} + return { + 'msg': msg, + 'required_update_tickets_list_wo_managers': required_update_tickets_list_wo_managers + } diff --git a/ChatServiceApp/js_views.py b/ChatServiceApp/js_views.py index acae6a3..5c1c3c1 100644 --- a/ChatServiceApp/js_views.py +++ b/ChatServiceApp/js_views.py @@ -428,30 +428,31 @@ def create_ticket_ajax(request): ticket.enable = True ticket.save() - - # рассылаем всем менеджерам сообщение - - Dict = { - 'ticket': ticket, - 'tickets_wo_manager': get_tickets_wo_manager() - } - tickets_wo_manager_html = render_to_string('widgets/w_tickets_wo_manager.html', Dict, request=request) - - group_name = 'support_managers' - Dict = { - 'type': 'update_chat', - 'tickets_wo_manager_html': tickets_wo_manager_html, - 'required_beep': True, - 'group_name': group_name, - } - channel_layer = get_channel_layer() - async_to_sync(channel_layer.group_send)( - group_name, - Dict - ) - - - # --------------------- + from .websocket_views import send_to_support_managers_list_tickets_wo_manager + send_to_support_managers_list_tickets_wo_manager(ticket, required_beep=True) + # # рассылаем всем менеджерам сообщение + # + # Dict = { + # 'ticket': ticket, + # 'tickets_wo_manager': get_tickets_wo_manager() + # } + # tickets_wo_manager_html = render_to_string('widgets/w_tickets_wo_manager.html', Dict, request=request) + # + # group_name = 'support_managers' + # Dict = { + # 'type': 'update_chat', + # 'tickets_wo_manager_html': tickets_wo_manager_html, + # 'required_beep': True, + # 'group_name': group_name, + # } + # channel_layer = get_channel_layer() + # async_to_sync(channel_layer.group_send)( + # group_name, + # Dict + # ) + # + # + # # --------------------- msgs_for_ticket = get_messages_for_ticket(ticket) Dict = { diff --git a/ChatServiceApp/websocket_views.py b/ChatServiceApp/websocket_views.py index 7e7eb2e..ed25ad4 100644 --- a/ChatServiceApp/websocket_views.py +++ b/ChatServiceApp/websocket_views.py @@ -5,6 +5,35 @@ from asgiref.sync import async_to_sync, sync_to_async from channels.layers import get_channel_layer from django.template.loader import render_to_string + +def send_to_support_managers_list_tickets_wo_manager(ticket, required_beep=False): + from.funcs import get_tickets_wo_manager + + # рассылаем всем менеджерам сообщение + + Dict = { + 'ticket': ticket, + 'tickets_wo_manager': get_tickets_wo_manager() + } + tickets_wo_manager_html = render_to_string('widgets/w_tickets_wo_manager.html', Dict) + + group_name = 'support_managers' + Dict = { + 'type': 'update_chat', + 'tickets_wo_manager_html': tickets_wo_manager_html, + 'required_beep': required_beep, + 'group_name': group_name, + } + channel_layer = get_channel_layer() + async_to_sync(channel_layer.group_send)( + group_name, + Dict + ) + + # --------------------- + return True + + def get_tickets_wo_manager_html(ticket, user, data): from .funcs import get_tickets_wo_manager @@ -45,7 +74,6 @@ class ChatConsumer(WebsocketConsumer): def connect(self): print('ws connect') - self.room_group_name = 'test' async_to_sync(self.channel_layer.group_add)( f'user_{self.scope["user"].id}', @@ -86,7 +114,9 @@ class ChatConsumer(WebsocketConsumer): 'cur_user': sender, 'required_beep': False, }) - send_msg(data) + res = send_msg(data) + if not res['msg'] or type(res['msg']) == str: + data.update({'bad_manager': True}) ticket = None @@ -98,6 +128,9 @@ class ChatConsumer(WebsocketConsumer): ) msgs.update(status='seen') + if 'required_update_tickets_list_wo_managers' in res and res['required_update_tickets_list_wo_managers']: + send_to_support_managers_list_tickets_wo_manager(ticket, required_beep=False) + Dict = get_update_chat_Dict(data)