cma_search/server/apps/supervision/views.py

163 lines
6.1 KiB
Python

from django.shortcuts import render
from rest_framework.mixins import ListModelMixin
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from .models import *
from .serializers import *
from rest_framework.decorators import action
from django.conf import settings
from rest_framework import status
from rest_framework.response import Response
from apps.system.models import Organization
from django.db.models import Count
from utils.pagination import PageOrNot
from apps.system.mixins import OptimizationMixin
from apps.system.mixins import CreateUpdateCustomMixin
from django.utils import timezone
from .filters import RecordFilter
# Create your views here.
class ContentViewSet(CreateUpdateCustomMixin, ModelViewSet):
"""
资料清单:增删改查
"""
perms_map = {'get': '*', 'post': 'content_create',
'put': 'content_update', 'delete': 'content_delete'}
queryset = Content.objects.all()
serializer_class = ContentSerializer
pagination_class = None
search_fields = ['name', 'desc']
filterset_fields = ['type']
ordering = ['type__sort', 'create_time']
class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'task_create',
'put': 'task_update', 'delete': 'task_delete'}
queryset = Task.objects.all()
search_fields = ['name']
ordering = ['-create_time']
def get_serializer_class(self):
if self.action in ['create', 'update']:
return TaskCreateUpdateSerializer
elif self.action == 'retrieve':
return TaksDetailSerializer
return TaskListSerializer
@action(methods=['post'], detail=False, perms_map = {'post':'task_createself'})
def createself(self, request):
"""
主动报送
"""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save(is_self=True, create_by=request.user, belong_dept=request.user.dept)
return Response(serializer.data, status=status.HTTP_201_CREATED)
@action(methods=['post'], detail=True, perms_map = {'post':'task_init'})
def init(self, request, *args, **kwargs):
"""
初始化任务,生成记录
"""
obj = self.get_object()
depts = request.data['depts']
contents = request.data['contents']
if depts and contents:
record_list = []
for m in depts:
for n in contents:
data={}
data['content'] = Content.objects.get(pk=n)
data['belong_dept'] = Organization.objects.get(pk=m)
data['task'] = obj
data['end_date'] = obj.end_date
data['create_by'] = request.user
record_list.append(Record(**data))
Record.objects.bulk_create(record_list)
obj.state = '执行中'
obj.save()
return Response(status=status.HTTP_200_OK)
return Response('单位或清单不能为空', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['get'], detail=True, perms_map = {'get':'*'})
def contents(self, request, *args, **kwargs):
"""
聚合
"""
obj = self.get_object()
serializer = ContentListSerializer(obj.contents.distinct(), many=True)
return Response(serializer.data)
@action(methods=['get'], detail=True, perms_map = {'get':'*'})
def depts(self, request, *args, **kwargs):
"""
聚合
"""
obj = self.get_object()
serializer = OrganizationSimpleSerializer(obj.depts.distinct(), many=True)
return Response(serializer.data)
class RecordViewSet(OptimizationMixin,PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'record_create',
'put': 'record_update', 'delete': 'record_delete'}
queryset = Record.objects.all()
serializer_class = RecordSerializer
search_fields = ['content__name','task__name']
ordering = ['-create_time']
filter_class = RecordFilter # 过滤类
def update(self, request, *args, **kwargs):
instance = self.get_object()
instance.note = request.data.get('note', None)
instance.save()
return Response(status=status.HTTP_200_OK)
@action(methods=['put'], detail=True, perms_map = {'post':'record_up'})
def up(self, request, *args, **kwargs):
"""
上报
"""
obj = self.get_object()
if obj.state == '待上报' or obj.state == '待整改':
if request.data.get('files', None):
obj.files = request.data['files']
if request.data.get('noteb', None):
obj.noteb = request.data['noteb']
if request.data.get('is_yes', True):
obj.is_yes = request.data.get('is_yes')
obj.state = '已上报'
obj.up_user = request.user
obj.up_date = timezone.now()
obj.save()
return Response(status=status.HTTP_200_OK)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'post':'record_reject'})
def reject(self, request, *args, **kwargs):
"""
驳回
"""
obj = self.get_object()
if obj.state == '已上报':
if request.data.get('note', None):
obj.note = request.data['note']
obj.save()
return Response(status=status.HTTP_200_OK)
else:
return Response('请填写备注', status=status.HTTP_200_OK)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'post':'record_confirm'})
def confirm(self, request, *args, **kwargs):
"""
确认
"""
obj = self.get_object()
if obj.state == '已上报':
obj.state = '已确认'
obj.save()
return Response(status=status.HTTP_200_OK)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)