Files
tripwithbonus/ChatServiceApp/js_views.py
SDE 2b75e42c4c 0.2.21
chat v2
2023-08-11 17:43:10 +03:00

358 lines
11 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.shortcuts import render
from uuid import uuid1
from .models import *
from django.contrib import auth
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
from .funcs import *
import json
from datetime import datetime, time
@login_required(login_url='/profile/login/')
def show_chat_w_user_ajax(request):
if request.method != 'POST':
raise Http404
try:
data = json.loads(request.body)
Dict = get_chat_page_content_Dict(request, data['user_id'])
tpl_name = 'blocks/profile/b_chats.html'
html = render_to_string(tpl_name, Dict, request=request)
return JsonResponse({'html': html}, status=200)
except Exception as e:
msg = f'show_chat_w_user_ajax Error = {str(e)}'
return JsonResponse({'error': msg}, status=400)
def update_chat_ajax(request):
from AuthApp.models import User
if request.method != 'POST':
raise Http404
res_Dict = {}
msgs = []
Dict = {}
context_Dict = {}
last_message_modifiedDT = None
required_beep = False
try:
data = json.loads(request.body)
ticket = None
tpl_name = 'blocks/profile/b_messages_container.html'
if 'ticket_id' in data and data['ticket_id'] and data['ticket_id'] != 'null':
ticket = MsgGroup.objects.get(id=data['ticket_id'])
if 'last_message_modifiedDT' in data:
last_message_modifiedDT = datetime.strptime(data['last_message_modifiedDT'], '%d.%m.%Y %H:%M:%S:%f')
sender = User.objects.get(id=data['sender'])
receiver = None
if 'receiver' in data and data['receiver']:
receiver = User.objects.get(id=data['receiver'])
context_Dict.update({'cur_receiver': receiver})
if ticket:
context_Dict.update({
'ticket': ticket,
})
msgs = get_messages_for_ticket(ticket)
context_Dict.update({'messages': msgs})
context_Dict = get_ticketsDict_for_staff(request.user)
tickets_list_html = render_to_string(
'blocks/profile/b_list_of_tickets_support_chat.html', context_Dict, request=request)
res_Dict.update({
'tickets_list_html': tickets_list_html,
'msgs_count': len(msgs)
})
else:
# получаем правую панель с получателями
receivers, unread_msgs_count = get_chat_receivers_for_user(request.user, receiver)
saved_unread_msgs_count = request.user.user_profile.get_node_by_name('receivers_unread_msgs_count')
if saved_unread_msgs_count == None or saved_unread_msgs_count != unread_msgs_count:
request.user.user_profile.add_node_to_json_data({'receivers_unread_msgs_count': unread_msgs_count}, save=True)
# if unread_msgs_count:
required_beep = True
context_Dict.update({'receivers': receivers})
users_list_html = render_to_string(
'blocks/profile/b_list_of_users_messenger.html', context_Dict, request=request)
res_Dict.update({
'users_list_html': users_list_html,
'unread_msgs_count': unread_msgs_count
})
# если есть получатель - получаем сообщения чата
if receiver:
msgs = get_msgs_for_chat_w_users(sender, receiver)
unreaded_msgs = msgs.filter(status='sended')
if msgs and unreaded_msgs:
context_Dict.update({'messages': msgs})
chat_html = render_to_string(tpl_name, context_Dict, request=request)
res_Dict.update({'chat_html': chat_html})
required_beep = True
unreaded_msgs.update(status='seen')
# if not msgs or (request.user != msgs[0].receiver) or (not msgs and not last_message_modifiedDT) or (msgs and last_message_modifiedDT and msgs[0].modifiedDT <= last_message_modifiedDT):
# Dict.update({
# 'required_beep': False
# })
# return JsonResponse(Dict, status=200)
res_Dict.update({
'required_beep': required_beep,
})
return JsonResponse(res_Dict, status=200)
except Exception as e:
msg = f'send_msg_ajax Error = {str(e)}'
return JsonResponse({'error': msg}, status=400)
@login_required(login_url='/profile/login/')
def send_msg_ajax(request):
from AuthApp.models import User
if request.method != 'POST':
raise Http404
res_Dict = {}
msg = None
try:
data = json.loads(request.body)
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(request.user))
# 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(request.user)
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, request=request)
return JsonResponse({'html': html}, status=200)
except Exception as e:
msg = f'send_msg_ajax Error = {str(e)}'
return JsonResponse({'error': msg}, status=400)
@login_required(login_url='/profile/login/')
def support_show_chat_by_ticket_ajax(request):
if request.method != 'POST':
raise Http404
try:
data = json.loads(request.body)
ticket = MsgGroup.objects.get(id=data['ticket_id'])
msgs = get_messages_for_ticket(ticket)
new_msg_allow = False
cur_receiver = None
if request.user.is_staff:
cur_receiver = ticket.owner
new_msg_allow = True
else:
if ticket.manager:
cur_receiver = ticket.manager
# if len(msgs) > 1:
new_msg_allow = True
Dict = {
'ticket': ticket,
'messages': msgs,
'cur_receiver': cur_receiver,
'new_msg_allow': new_msg_allow
}
Dict.update(get_ticketsDict_for_staff(request.user))
tpl_name = 'blocks/profile/b_support_chat.html'
html = render_to_string(tpl_name, Dict, request=request)
return JsonResponse({'html': html}, status=200)
except Exception as e:
msg = f'support_show_chat_by_ticket_ajax Error = {str(e)}'
return JsonResponse({'error': msg}, status=400)
@login_required(login_url='/profile/login/')
def support_create_ticket_form_ajax(request):
from ChatServiceApp.forms import TicketForm
if request.method != 'POST':
raise Http404
Dict = {
'form': TicketForm()
}
tpl_name = 'blocks/profile/b_create_ticket.html'
html = render_to_string(tpl_name, Dict, request=request)
return JsonResponse({'html': html}, status=200)
@login_required(login_url='/profile/login/')
def create_ticket_ajax(request):
from ChatServiceApp.forms import TicketForm
if request.method != 'POST':
raise Http404
try:
data = request.POST
form = TicketForm(data)
if not form.is_valid():
form.initial = form.cleaned_data
Dict = {'form': form}
html = render_to_string('blocks/profile/b_create_ticket.html', Dict, request=request)
return JsonResponse({'html': html}, status=400)
ticket = form.save(commit=False)
ticket.owner = request.user
ticket.enable = True
ticket.save()
Dict = {
'ticket': ticket,
'messages': get_messages_for_ticket(ticket)
}
html = render_to_string('blocks/profile/b_support_chat.html', Dict, request=request)
res_Dict = {
'html': html
}
return JsonResponse(res_Dict)
except Exception as e:
errors_Dict = {
'errors': {
'all__': f'ошибка в запросе = {str(e)}'
}
}
Dict = {'form': errors_Dict}
html = render_to_string('blocks/profile/b_create_ticket.html', Dict, request=request)
return JsonResponse({'html': html}, status=400)