emile 9 months ago
parent badd23ac84
commit 4a72a44ebc

Binary file not shown.

@ -256,7 +256,7 @@ class Osichat(WebsocketConsumer):
class OsichatVisitor(WebsocketConsumer):
def connect(self):
self.visitor_id = self.scope['url_route']['kwargs']['visitor_id']
self.group_name = str(self.visitor_id)
self.group_name = 'V' + str(self.visitor_id)
self.visitor = get_object_or_404(Visitor, id=self.visitor_id)
async_to_sync(self.channel_layer.group_add)(
self.group_name, self.channel_name
@ -300,6 +300,24 @@ class OsichatVisitor(WebsocketConsumer):
'visitor_data': visitor_data,
}, cls=DjangoJSONEncoder))
def new_visitor_update_handler(self, event):
visitor = self.visitor
latest_log = VisitorLog.objects.filter(visitor=self.visitor).last()
if self.client_type == 'mobile_admin':
visitor_data = model_to_dict(visitor)
visitor_data['is_online'] = visitor.is_online
visitor_data['duration'] = visitor.total_duration
visitor_data['flag'] = visitor.flag_image_url
if latest_log:
latest_log_data = model_to_dict(latest_log)
latest_log_data['log_duration'] = latest_log.log_duration
visitor_data['latest_log'] = latest_log_data
self.send(text_data=json.dumps({
'event_type': 'new_visitor_update',
'visitor_data': visitor_data,
'action': event['action'],
}, cls=DjangoJSONEncoder))

@ -124,16 +124,6 @@ class Visitor(models.Model):
else:
return f"{int(minutes):02}:{int(seconds):02}"
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
channel_layer = get_channel_layer()
event = {
'type': 'new_visitor_update_handler',
'visitor_id': self.id,
'action': 'new_visitor'
}
async_to_sync(channel_layer.group_send)("osichat", event)
@ -173,12 +163,23 @@ class VisitorLog(models.Model):
'action': action
}
async_to_sync(channel_layer.group_send)("osichat", event)
group_name = f"V{self.visitor.id}"
async_to_sync(channel_layer.group_send)(group_name, event)
if not self.left_date:
if is_first_log:
self.send_visitor_notification()
else:
last_log = self.visitor.visitorlog_set.exclude(id=self.id).order_by('-visit_date').first()
if last_log:
time_difference = self.visit_date - last_log.visit_date
last_visit_date = last_log.visit_date
current_visit_date = self.visit_date
if timezone.is_naive(last_visit_date):
last_visit_date = timezone.make_aware(last_visit_date)
if timezone.is_naive(current_visit_date):
current_visit_date = timezone.make_aware(current_visit_date)
time_difference = current_visit_date - last_visit_date
if time_difference > timedelta(minutes=5):
self.send_visitor_notification(is_repeat=True)

Loading…
Cancel
Save