newmediamonitoring/polls/views/notice.py

247 lines
9.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.apps import apps
import datetime
from polls.decorators import polls_login_required
from polls.models import Notice
from django.core.exceptions import ObjectDoesNotExist
from dashboard.models import Userprofile
@csrf_exempt
@polls_login_required
def notices(request):
if request.method == 'POST':
return HttpResponse(status=405)
id = request.user.id
notices = Notice.objects.filter(user__id=id)
results = []
for o in notices:
result = dict()
result['id'] = o.id
result['type'] = o.type
result['content'] = o.content
result['isRead'] = o.is_read
result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S")
results.append(result)
return JsonResponse({'status': 'success', 'message': results}, safe=False)
@csrf_exempt
@polls_login_required
def notice_top(request):
if request.method == 'POST':
return HttpResponse(status=405)
id = request.user.id
notices = Notice.objects.filter(user__id=id, is_read=False)[:10]
results = []
for o in notices:
result = dict()
result['id'] = o.id
result['type'] = o.type
result['content'] = o.content
result['isRead'] = o.is_read
result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S")
results.append(result)
return JsonResponse({'status': 'success', 'message': results}, safe=False)
@csrf_exempt
@polls_login_required
def read_notice(request):
if request.method == 'GET':
return HttpResponse(status=405)
id = request.user.id
notice_id = request.POST.get('notice')
if not notice_id:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
try:
notice = Notice.objects.get(id=notice_id)
notice.is_read = True
notice.save()
return JsonResponse({'status': 'success'})
except ObjectDoesNotExist:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
@csrf_exempt
@polls_login_required
def detail_notice(request, notice_id):
if request.method == 'POST':
return HttpResponse(status=405)
if not notice_id:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
try:
notice = Notice.objects.get(id=notice_id)
results = dict()
results['id'] = notice.id
results['category'] = notice.type
results['content'] = notice.content
results['isRead'] = notice.is_read
if notice.type == 1:
ReplyModel = apps.get_model(notice.app, notice.model)
if notice.model == 'Userprofile':
profiles = ReplyModel.objects.filter(organization_id=notice.record_id).exclude(
admin_status__in=[0, 3])
m = []
for p in profiles:
n = dict()
n['id'] = p.user_id
n['name'] = p.name
n['adminStatus'] = p.admin_status
m.append(n)
results['profiles'] = m
else:
m = ReplyModel.objects.get(pk=notice.record_id)
detail = dict()
detail['id'] = m.id
detail['code'] = m.code
if notice.model == 'Weixin':
detail['type'] = 'weixin'
elif notice.model == 'Weibo':
detail['type'] = 'weibo'
elif notice.model == 'Toutiao':
detail['type'] = 'Toutiao'
elif notice.model == 'Douyin':
detail['type'] = 'douyin'
else:
detail['type'] = 'qita'
detail['status'] = m.status
results['media'] = detail
else:
results['groupId'] = notice.group_id
results['added'] = notice.added.strftime("%Y-%m-%d %H:%M:%S")
results['updated'] = notice.updated.strftime("%Y-%m-%d %H:%M:%S")
notice.is_read = True
notice.save()
return JsonResponse({'status': 'success', 'message': results})
except ObjectDoesNotExist:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
@csrf_exempt
@polls_login_required
def pass_notice(request):
if request.method == 'GET':
return HttpResponse(status=405)
id = request.user.id
notice_id = request.POST.get('notice_id')
if not notice_id:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
try:
notice = Notice.objects.get(id=notice_id)
ReplyModel = apps.get_model(notice.app, notice.model)
if notice.model == 'Userprofile':
pass_value = notice.record_pass_value
profiles = ReplyModel.objects.filter(
organization_id=notice.record_id)
if pass_value == '2': # 市级提交1->2, 4->5
for p in profiles:
if p.admin_status == 1:
p.admin_status = 2
p.save()
if p.admin_status == 4:
p.admin_status = 5
p.save()
group_notices = Notice.objects.filter(record_id=notice.record_id)
for n in group_notices:
n.is_read = True
n.save()
admins = Userprofile.level1_admin()
for a in admins:
Notice.create_reply_notice(
a.user.id, notice.content, notice.app, notice.model, notice.field, notice.record_id, '3', '0')
else: # 省级提交
for p in profiles:
if p.admin_status == 5:
p.admin_status = 0
p.save()
if p.admin_status == 2:
p.admin_status = 3
p.save()
group_notices = Notice.objects.filter(record_id=notice.record_id)
for n in group_notices:
n.is_read = True
n.save()
return JsonResponse({'status': 'success', 'message': '申请已同意'})
else:
m = ReplyModel.objects.get(pk=notice.record_id)
setattr(m, notice.field, notice.record_pass_value)
m.save(update_fields=[notice.field])
notice.is_read = True
notice.save()
group_notices = Notice.objects.filter(record_id=notice.record_id)
for n in group_notices:
n.is_read = True
n.save()
pass_value = notice.record_pass_value
if pass_value == '2':
admins = Userprofile.level1_admin()
for a in admins:
Notice.create_reply_notice(
a.user.id, notice.content, notice.app, notice.model, notice.field, notice.record_id, '3', '0')
if pass_value == '5':
admins = Userprofile.level1_admin()
for a in admins:
Notice.create_reply_notice(
a.user.id, notice.content, notice.app, notice.model, notice.field, notice.record_id, '0', '3')
return JsonResponse({'status': 'success', 'message': '申请已同意'})
except ObjectDoesNotExist:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
@csrf_exempt
@polls_login_required
def reject_notice(request):
if request.method == 'GET':
return HttpResponse(status=405)
id = request.user.id
notice_id = request.POST.get('notice_id')
if not notice_id:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
try:
notice = Notice.objects.get(id=notice_id)
ReplyModel = apps.get_model(notice.app, notice.model)
if notice.model == 'Userprofile':
reject_value = notice.record_reject_value
profiles = ReplyModel.objects.filter(
organization_id=notice.record_id)
for p in profiles:
if p.admin_status == 1 or p.admin_status == 2:
p.admin_status = 0
p.save()
if p.admin_status == 4 or p.admin_status == 5:
p.admin_status = 3
p.save()
group_notices = Notice.objects.filter(record_id=notice.record_id)
for n in group_notices:
n.is_read = True
n.save()
return JsonResponse({'status': 'success', 'message': '申请已拒绝'})
else:
m = ReplyModel.objects.get(pk=notice.record_id)
setattr(m, notice.field, notice.record_reject_value)
m.save(update_fields=[notice.field])
notice.is_read = True
notice.save()
group_notices = Notice.objects.filter(record_id=notice.record_id)
for n in group_notices:
n.is_read = True
n.save()
return JsonResponse({'status': 'success', 'message': '申请已拒绝'})
except ObjectDoesNotExist:
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
@csrf_exempt
@polls_login_required
def unread_notice_count(request):
if request.method == 'POST':
return HttpResponse(status=405)
user_id = request.user.id
count = Notice.objects.filter(user_id=user_id, is_read=False).count()
return JsonResponse({'status': 'success', 'message': count})