diff --git a/osinaweb/support/__pycache__/consumers.cpython-310.pyc b/osinaweb/support/__pycache__/consumers.cpython-310.pyc index 7e41e5f7..f664b3e4 100644 Binary files a/osinaweb/support/__pycache__/consumers.cpython-310.pyc and b/osinaweb/support/__pycache__/consumers.cpython-310.pyc differ diff --git a/osinaweb/support/consumers.py b/osinaweb/support/consumers.py index 1a3125df..476b39ba 100644 --- a/osinaweb/support/consumers.py +++ b/osinaweb/support/consumers.py @@ -198,6 +198,46 @@ class TicketRoomConsumer(WebsocketConsumer): })) + +class NewTicketConsumer(WebsocketConsumer): + def connect(self): + self.user = self.scope['user'] + async_to_sync(self.channel_layer.group_add)( + "new_ticket_group", + self.channel_name + ) + self.accept() + + def disconnect(self, close_code): + async_to_sync(self.channel_layer.group_discard)( + "new_ticket_group", + self.channel_name + ) + + def new_ticket_event(self, event): + ticket_id = event['ticket_id'] + ticket = Ticket.objects.get(id=ticket_id) + is_ticketstaff_member = ( + hasattr(self.user, 'staffprofile') and + (self.user.staffprofile in ticket.get_all_ticket_staff() or self.user.is_superuser) + ) + is_ticket_customer = ( + hasattr(self.user, 'customerprofile') and + (self.user.customerprofile == ticket.customer)) + if is_ticketstaff_member or is_ticket_customer: + context = {'ticket': ticket, 'new': True} + if is_ticketstaff_member: + html = render_to_string("details_templates/partials/staff-ticket-display.html", context) + else: + html = render_to_string("details_templates/partials/customer-ticket-display.html", context) + self.send(text_data=json.dumps({ + 'event_type': 'new_ticket', + 'html': html, + 'ticket_id': ticket_id + })) + + + class NewTicketUpdateConsumer(WebsocketConsumer): def connect(self): self.user = self.scope['user']