first push
This commit is contained in:
195
authentication/message/views.py
Normal file
195
authentication/message/views.py
Normal file
@@ -0,0 +1,195 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user