339 lines
9.8 KiB
Python
339 lines
9.8 KiB
Python
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
|
||
|
||
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'])
|
||
|
||
res_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})
|
||
else:
|
||
# если есть получатель - получаем сообщения чата
|
||
if receiver:
|
||
msgs = get_msgs_for_chat_w_users(sender, receiver)
|
||
context_Dict.update({'messages': msgs})
|
||
chat_html = render_to_string(tpl_name, context_Dict, request=request)
|
||
res_Dict.update({'chat_html': chat_html})
|
||
|
||
# получаем правую панель с получателями
|
||
receivers = get_chat_receivers_for_user(request.user)
|
||
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})
|
||
|
||
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': True,
|
||
})
|
||
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 = 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)
|
||
|