Files
Rasadyar_Hamedan/authentication/message/views.py
2026-01-18 11:42:00 +03:30

196 lines
8.1 KiB
Python

from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope
from authentication.message.serializers import UserMessageSerializer
from panel.models import CheckState, OperatorLastTimeEnter
from authentication.sahandsms.sms import sms_reminder
from authentication.models import (
UserMessage,
UserProfile,
SendingMessageMethod,
UserMessageType, SystemUserProfile
)
from django.contrib.auth.models import Group
from rest_framework.response import Response
from notification.models import (
NotificationToken,
NotificationType,
Notification
)
from notification.najva import (
get_segments_detail,
send_notif_to_segments
)
from rest_framework import viewsets
from rest_framework import status
import random
import string
import os
from ticket.helper import send_image_to_server
# آدرس پایه ذخیره عکس مربوط به سیستم پیام کاربر در استوریج آروان
ARVAN_user_message_URL = 'https://profileimagedefault.s3.ir-thr-at1.arvanstorage.ir/'
# ویو ست کلی برای سیستم پیام کاربر که شامل ساخت و ویرایش و حذف می باشد
# برای ساخت چند حالت دارد که یا برای یک شخص ارسال میشه یا جند شخص یا یک نقش خاص
class UserMessageViewSet(viewsets.ModelViewSet):
queryset = UserMessage.objects.all()
serializer_class = UserMessageSerializer
permission_classes = [TokenHasReadWriteScope]
def create(self, request, *args, **kwargs):
try:
images = request.data['image']
request.data.pop('image')
except:
images = None
try:
roles = request.data['roles']
request.data.pop('roles')
except:
roles = None
try:
users = request.data['users']
request.data.pop('users')
except:
users = None
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
user_message = serializer.create(validated_data=request.data)
user_message.sender = SystemUserProfile.objects.get(user=request.user)
if roles == None:
pass
else:
for role in roles:
rol = Group.objects.get(name=role)
user_message.roles.add(rol)
if users == None and roles == None:
for user in SystemUserProfile.objects.all():
user_message.users.add(user)
elif users == None:
user_list = []
for rol in roles:
persons = SystemUserProfile.objects.filter(role__name=rol)
for user in persons:
user_list.append(user.key)
for user in user_list:
user = SystemUserProfile.objects.get(key__exact=user)
user_message.users.add(user)
else:
for user in users:
user = SystemUserProfile.objects.get(key__exact=user)
user_message.users.add(user)
if images == None:
pass
else:
pic = []
for image in images:
pic.append(send_image_to_server(image))
user_message.image = pic
user_message.save()
serializer = self.serializer_class(user_message)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def list(self, request, *args, **kwargs):
if 'sender' in request.GET:
queryset = UserMessage.objects.filter(
sender=SystemUserProfile.objects.get(user=request.user)
)
if 'receiver' in request.GET:
user_id = SystemUserProfile.objects.get(user_id__exact=request.user.id)
queryset = UserMessage.objects.filter(users=user_id)
serializer = UserMessageSerializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
def destroy(self, request, pk=None, *args, **kwargs):
user = SystemUserProfile.objects.get(user_id=request.user.id)
key = request.data['key']
queryset = UserMessage.objects.get(key__exact=key)
queryset.users.remove(user)
queryset.save()
return Response(status=status.HTTP_200_OK)
class SendingMessageMethodViewSet(viewsets.ModelViewSet):
queryset = SendingMessageMethod.objects.all()
permission_classes = [TokenHasReadWriteScope]
serializer_class = UserMessageViewSet
def create(self, request, *args, **kwargs):
if not SendingMessageMethod.objects.filter(level=request.data['level']):
SendingMessageMethod(
level=request.data['level'],
methods='/'.join(request.data['methods'])
).save()
return Response({'msg': 'Done'}, status=status.HTTP_200_OK)
return Response({'msg': 'Method Exist'}, status=status.HTTP_403_FORBIDDEN)
def update(self, request, *args, **kwargs):
method = SendingMessageMethod.objects.get(key__exact=request.data['key'])
method.level = request.data['level']
method.methods = '/'.join(request.data['methods'])
method.save()
return Response({'msg': 'Done'}, status=status.HTTP_200_OK)
class SendSMSViewSet(viewsets.ModelViewSet):
queryset = UserMessage.objects.all()
serializer_class = UserMessageSerializer
permission_classes = [TokenHasReadWriteScope]
def create(self, request, *args, **kwargs):
segments = []
usermessage = UserMessage()
usermessage.message_level = "sms"
if 'value' in request.data.keys():
for key in request.data['value']:
if UserProfile.objects.filter(key__exact=key):
segments.append(UserProfile.objects.get(key__exact=key))
if Group.objects.filter(name__exact=key):
for item in UserProfile.objects.filter(role__name__exact=key):
segments.append(item)
usermessage.message_type = UserMessageType.objects.get(name__exact=request.data['request_type'])
for i in segments:
sms_reminder(
receptor=i.mobile,
title=request.data['heading'],
content=request.data['message'],
link_text=request.data['link_text'],
link=request.data['link'],
time=request.data['time']
)
if not request.data['value']:
for item in UserProfile.objects.filter(role__name__exact="Poultry"):
sms_reminder(
receptor=item.mobile,
title=request.data['heading'],
content=request.data['message'],
link_text=request.data['link_text'],
link=request.data['link'],
time=request.data['time']
)
usermessage.heading = request.data['heading']
usermessage.message = request.data['message']
usermessage.link_text = request.data['link_text']
usermessage.link = request.data['link']
usermessage.time = request.data['time']
usermessage.save()
if 'value' in request.data.keys():
for key in request.data['value']:
if UserProfile.objects.filter(key__exact=key):
usermessage.users.add(UserProfile.objects.get(key__exact=key))
if Group.objects.filter(name__exact=key):
usermessage.roles.add(Group.objects.get(name__exact=key))
request.data.pop('value')
request.data.pop('request_type')
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.create(validated_data=request.data)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors)