cma_search/server/apps/quality/views.py

93 lines
3.9 KiB
Python

from django.conf import settings
from django.core.cache import cache
from django.db.models import Count, Q
from django.db.models.query import QuerySet
from django.shortcuts import render
from django.utils import timezone
from rest_framework import status
from rest_framework.decorators import action, permission_classes
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from utils.pagination import PageOrNot
from apps.system.mixins import CreateUpdateCustomMixin
from apps.system.models import Organization
from apps.system.permission import get_permission_list, has_permission
from apps.system.permission_data import RbacFilterSet
from .models import *
from .serializers import *
# Create your views here.
class InspectItemViewSet(CreateUpdateCustomMixin, ModelViewSet):
"""
检查表清单:增删改查
"""
perms_map = {'get': '*', 'post': 'inspectitem',
'put': 'inspectitem', 'delete': 'inspectitem'}
queryset = InspectItem.objects.all()
serializer_class = InspectItemSerializer
pagination_class = None
search_fields = ['name', 'require']
filterset_fields = ['type','cate']
ordering = ['sortnum', 'cate__sort', 'create_time']
class InspectTaskViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'inspecttask_create',
'put': 'inspecttask_update', 'delete': 'inspecttask_delete'}
queryset = InspectTask.objects.all()
serializer_class = InspectTaskSerializer
search_fields = ['name']
ordering = ['-create_time']
class SubtaskViewSet(ModelViewSet):
perms_map = {'get': '*', 'post': 'inspecttask_create',
'put': 'inspecttask_update', 'delete': 'inspecttask_delete'}
queryset = SubInspectTask.objects.all()
serializer_class = SubtaskListSerializer
ordering = ['create_time']
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.delete(soft=False)
return Response(status=status.HTTP_204_NO_CONTENT)
def create(self, request, *args, **kwargs):
obj = SubInspectTask()
obj.inspecttask = InspectTask.objects.get(pk=request.data['inspecttask'])
obj.name = request.data['name']
obj.save()
InspectTeam.objects.create(member=User.objects.get(pk=request.data['leader']), type='组长', subtask=obj)
if request.data.get('members', False) and request.data.get('depts', False):
members = []
depts = []
records = []
for dept in request.data['depts']:
mdept = Organization.objects.get(pk=dept)
if not InspectRecord.objects.filter(dept=mdept, subtask=obj).exists():
data = {}
data['dept'] = mdept
data['subtask'] = obj
depts.append(InspectDept(**data))
for i in InspectItem.objects.filter(is_deleted=False):
r = {}
r['dept'] = mdept
r['item'] = i
r['subtask'] = obj
records.append(InspectRecord(**r))
for member in request.data['members']:
mmember = User.objects.get(pk=member)
if not InspectTeam.objects.filter(member=mdept, subtask=obj).exists():
data = {}
data['member'] = mmember
data['subtask'] = obj
members.append(InspectTeam(**data))
InspectTeam.objects.bulk_create(members)
InspectDept.objects.bulk_create(depts)
InspectRecord.objects.bulk_create(records)
return Response(status=status.HTTP_201_CREATED)
return Response('组织和成员不能为空', status=status.HTTP_400_BAD_REQUEST)