from django.shortcuts import render, redirect, reverse from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required from .forms import MessageForm from notificsys.models import UserNotification from django.core.mail import send_mail from django.template.loader import render_to_string from .models import Message from django.contrib import messages from django.http import JsonResponse from notificsys.models import UserNotification from django.urls import reverse_lazy import channels.layers from asgiref.sync import async_to_sync # ALLE STANDARDS EINER AGENTUR @login_required def mainmessageview(request): if request.method == 'POST': context = { 'active_link' : 'messages' } formtocheck = MessageForm(request.user, request.POST) if formtocheck.is_valid(): targetuser_ids = formtocheck.cleaned_data["target_user"] for user in targetuser_ids: targetuser = User.objects.get(pk=user) messagecontent = formtocheck.cleaned_data["message_content"] message = Message.objects.create(target_user=targetuser, agency=request.user.profile.agency, content=messagecontent, created_by=request.user) targeturl = request.build_absolute_uri() + "sl/" + str(message.id) notificationtext = "Sie haben eine neue Mitteilung erhalten: " + message.content if(targetuser.usernotifications.message_received_mail): username = targetuser.first_name + " " + targetuser.last_name msg_html = render_to_string('notificsys/notification_mail.html', {'username': username, 'notificationtext' : notificationtext, 'linktarget' : targeturl}) send_mail( 'Agentur-Benachrichtigung', 'Hallo ' + targetuser.first_name + ' ' + targetuser.last_name + '! ' + notificationtext + " Klicken Sie hier.", 'noreply@digitale-agentur.com', [targetuser.email], html_message=msg_html, fail_silently=True ) if(targetuser.usernotifications.message_received_push): newnotification = UserNotification(touser=targetuser, elementid=message.id, notificationtext='Hallo ' + targetuser.first_name + ' ' + targetuser.last_name + '! ' + notificationtext, notificationtype="messagereceived") newnotification.save() channel_layer = channels.layers.get_channel_layer() async_to_sync(channel_layer.group_send)("user_" + str(targetuser.pk), {'type' : 'pushhandler', 'pushtext' : "pushnotification__Mitteilung | Neue Mitteilung erhalten: " + message.content}) else: messages.warning(request, f'Bitte valide Daten eingeben!') context = { 'active_link' : 'messages', 'form' : MessageForm(request.user), 'usermessages' : Message.objects.filter(target_user=request.user, agency=request.user.profile.agency).order_by('-created_date') } return render (request, 'message/message.html', context) context = { 'active_link' : 'messages', 'form' : MessageForm(request.user), 'usermessages' : Message.objects.filter(target_user=request.user, agency=request.user.profile.agency).order_by('-created_date') } messages.success(request, f'Ihre Nachricht wurde verschickt!') return render (request, 'message/message.html', context) else: context = { 'active_link' : 'messages', 'form' : MessageForm(request.user), 'usermessages' : Message.objects.filter(target_user=request.user, agency=request.user.profile.agency).order_by('-created_date') } # Adding active_link # Loading only user same agency # Change context and return for template-data # # Get all Users of the Same Agency as logged user return render (request, 'message/message.html', context) @login_required def singelmessageview(request, pk): #Notification delete unknownnotification = UserNotification.objects.filter(touser__pk=request.user.pk, elementid=pk).delete() context = { 'active_link' : 'messages', 'mess' : Message.objects.get(pk=pk) } return render (request, 'message/message_single.html', context) @login_required def delsinglemessage(request): if request.method == 'GET': if request.GET['action'] == 'delsingle': Message.objects.get(pk=request.GET['todelid']).delete() UserNotification.objects.filter(elementid=request.GET['todelid']).delete() return JsonResponse({}) @login_required def delsinglemessagefromsingle(request, pk): todelmess = Message.objects.get(pk=pk) if(todelmess.agency == request.user.profile.agency and todelmess.target_user == request.user): messages.success(request, f'Mitteilung gelöscht.') Message.objects.get(pk=pk).delete() UserNotification.objects.filter(elementid=pk).delete() else: messages.success(request, f'Sie dürfen diese Mitteilung nicht löschen.') # Load Context! context = { 'active_link' : 'messages', 'form' : MessageForm(request.user), 'usermessages' : Message.objects.filter(target_user=request.user, agency=request.user.profile.agency).order_by('-created_date') } return redirect ("messages")