From 353285c96554d911222246c7f4d7a4c27163875c Mon Sep 17 00:00:00 2001 From: emile Date: Tue, 1 Oct 2024 16:54:05 +0300 Subject: [PATCH] new --- osinaweb/osichat/consumers.py | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py index 8d523b80..fc0dfe6a 100644 --- a/osinaweb/osichat/consumers.py +++ b/osinaweb/osichat/consumers.py @@ -91,6 +91,14 @@ class Osichat(WebsocketConsumer): } self.get_chats_handler(event) + + if event_type == 'get_dms': + event = { + 'type': 'get_dms_handler', + } + self.get_chats_handler(event) + + if event_type == 'get_visitors': event = { 'type': 'get_visitors_handler', @@ -181,6 +189,45 @@ class Osichat(WebsocketConsumer): })) + def get_dms_handler(self, event): + chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent'),order_key=Case( + When(last_update__isnull=True, then=F('date_created')), + default=F('last_update'), + output_field=DateTimeField(),)).filter(chatroomguest__isnull=True, chatmember__member=self.scope["user"]).order_by('-order_key') + context = { + 'chat_rooms': chat_rooms, + } + if self.client_type == 'mobile_admin': + chat_rooms_data = [] + for chat_room in chat_rooms: + chat_room_data = { + 'id': chat_room.id, + 'name': chat_room.name, + 'last_update': chat_room.last_updated, + 'date_created': chat_room.date_created, + 'unread_messages': chat_room.unread_messages(user), + 'last_message': model_to_dict(ChatMessage.objects.filter(room=chat_room).last()) + } + members = chat_room.chatmember_set.all() + member_data = [] + for member in members: + member_data.append({ + 'id': member.member.id, + 'first_name': member.member.first_name, + 'last_name': member.member.last_name, + 'image': member.member.staffprofile.image.url if hasattr(member.member, 'staffprofile') and member.member.staffprofile.image else None, + }) + + chat_room_data['members'] = member_data + + chat_rooms_data.append(chat_room_data) + + self.send(text_data=json.dumps({ + 'event_type': 'get_dms', + 'chat_rooms_data': chat_rooms_data, + }, cls=DjangoJSONEncoder)) + + def get_visitors_handler(self, event): today = timezone.now().date() visitors = Visitor.objects.filter(visitorlog__visit_date__date=today).annotate(latest_visit=Max('visitorlog__visit_date')).order_by('-latest_visit')