|
|
|
@ -10,6 +10,7 @@ from customercore.models import *
|
|
|
|
|
import json
|
|
|
|
|
from django.template.loader import render_to_string
|
|
|
|
|
from asgiref.sync import async_to_sync
|
|
|
|
|
|
|
|
|
|
class TicketRoomConsumer(WebsocketConsumer):
|
|
|
|
|
def connect(self):
|
|
|
|
|
self.user = self.scope['user']
|
|
|
|
@ -169,9 +170,17 @@ class TicketRoomConsumer(WebsocketConsumer):
|
|
|
|
|
|
|
|
|
|
def modify_online_user(self):
|
|
|
|
|
connections = TicketConnection.objects.filter(ticket=self.ticket, terminated_at__isnull=True)
|
|
|
|
|
connections_serial = []
|
|
|
|
|
for connection in connections:
|
|
|
|
|
connection_data = {
|
|
|
|
|
'first_name': connection.user.first_name,
|
|
|
|
|
'last_name': connection.user.last_name,
|
|
|
|
|
}
|
|
|
|
|
connections_serial.append(connection_data)
|
|
|
|
|
event = {
|
|
|
|
|
'type': 'user_connection_handler',
|
|
|
|
|
'connections': connections,
|
|
|
|
|
'user': self.user,
|
|
|
|
|
'connections': connections_serial,
|
|
|
|
|
}
|
|
|
|
|
async_to_sync(self.channel_layer.group_send)(
|
|
|
|
|
self.ticket_number, event
|
|
|
|
@ -180,6 +189,7 @@ class TicketRoomConsumer(WebsocketConsumer):
|
|
|
|
|
def user_connection_handler(self, event):
|
|
|
|
|
context = {
|
|
|
|
|
'connections': event['connections'],
|
|
|
|
|
'user': event['user']
|
|
|
|
|
}
|
|
|
|
|
html = render_to_string("details_templates/partials/ticket-online-users.html", context=context)
|
|
|
|
|
self.send(text_data=json.dumps({
|
|
|
|
@ -188,45 +198,6 @@ 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']
|
|
|
|
|