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 = {} msg = None 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']) if ticket: res_Dict.update({ 'ticket': ticket, }) msgs = get_messages_for_ticket(ticket) 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: msgs = get_msgs_for_chat_w_users(sender, receiver) users_list_html = render_to_string( 'blocks/profile/b_list_of_users_messenger.html', res_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({ 'messages': msgs, 'cur_receiver': receiver, # 'modifiedDT': msgs[0].modifiedDT }) html = render_to_string(tpl_name, res_Dict, request=request) res_Dict.update({'receivers': get_chat_receivers_for_user(request.user)}) Dict.update({ 'html': html, 'required_beep': True, }) return JsonResponse(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)