95 lines
3.9 KiB
Python
95 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
|
|
filterset_fields = ['inspecttask']
|
|
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)
|