diff --git a/ChatServiceApp/funcs.py b/ChatServiceApp/funcs.py index 0316624..bf9fcaf 100644 --- a/ChatServiceApp/funcs.py +++ b/ChatServiceApp/funcs.py @@ -1,5 +1,115 @@ from .models import * from django.db.models import Q +from django.http import HttpResponse, Http404, JsonResponse +from django.template import loader, RequestContext +from django.contrib.auth.decorators import login_required +from BaseModels.mailSender import techSendMail +from django.utils.translation import gettext as _ +from datetime import datetime +from django.template.loader import render_to_string +from django.urls import reverse +import json +from datetime import datetime, time + +def send_msg(data): + from AuthApp.models import User + res_Dict = {} + msg = None + + try: + + data = json.loads(data) + ticket = None + + tpl_name = 'blocks/profile/b_messages_container.html' + + if data['text']: + + if 'ticket_id' in data: + ticket = MsgGroup.objects.get(id=data['ticket_id']) + + sender = User.objects.get(id=data['sender']) + receiver = User.objects.get(id=data['receiver']) + + msg_create_kwargs = {} + + # если только что манагер присоединился к тикету + if ticket: + if not ticket.manager: + if sender.is_staff: + ticket.manager = sender + else: + ticket.manager = receiver + + ticket.save() + + kwargs = { + 'sender': ticket.owner, + 'receiver': ticket.manager, + 'text': ticket.text, + } + + kwargs.update({'group': ticket}) + + msg = Message.objects.create(**kwargs) + Message.objects.filter(id=msg.id).update(modifiedDT=ticket.createDT, createDT=ticket.createDT) + + res_Dict.update({ + 'ticket': ticket, + # 'cur_receiver': receiver, + # 'messages': get_messages_for_ticket(ticket), + # 'text': data['text'], + # 'modifiedDT': msg.modifiedDT + }) + + msg_create_kwargs.update({ + 'group': ticket, + }) + + res_Dict.update(get_ticketsDict_for_staff(sender)) + + # if not msg: + msg_create_kwargs.update({ + 'sender': sender, + 'receiver': receiver, + '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} + + except Exception as e: + msg = f'send_msg_ajax Error = {str(e)}' + return {'error': msg} + + def get_chat_page_content_Dict(request, receiver_id=None): diff --git a/ChatServiceApp/websocket_views.py b/ChatServiceApp/websocket_views.py index b148664..864abee 100644 --- a/ChatServiceApp/websocket_views.py +++ b/ChatServiceApp/websocket_views.py @@ -1,33 +1,47 @@ import json from channels.generic.websocket import WebsocketConsumer from asgiref.sync import async_to_sync - +# from .funcs import * class ChatConsumer(WebsocketConsumer): def connect(self): + print('ws connect') self.room_group_name = 'test' async_to_sync(self.channel_layer.group_add)( self.room_group_name, self.channel_name ) + print(f'self.room_group_name = {self.room_group_name}') + print(f'self.channel_name = {self.channel_name}') self.accept() def receive(self, text_data): - text_data_json = json.loads(text_data) - message = text_data_json['message'] - sender = text_data_json['sender'] + print(f'ws receive text_data = {text_data}') - async_to_sync(self.channel_layer.group_send)( - self.room_group_name, - { - 'type': 'chat_message', - 'message': message, - 'sender': sender - } - ) + from .funcs import send_msg + resDict = send_msg(text_data) + # resDict.update({ + # 'type': 'chat_message', + # + # }) + print(f'send_msg res = {resDict}') + + self.send(json.dumps(resDict)) + + # async_to_sync(self.channel_layer.group_send)( + # self.room_group_name, + # resDict + # # { + # # 'type': 'chat_message', + # # 'message': message, + # # 'sender': sender + # # } + # ) def chat_message(self, event): + print('ws chat_message') + message = event['message'] sender = event['sender']