cnas/server/apps/project/views.py

217 lines
8.2 KiB
Python

from rest_framework.views import APIView
from apps import project
from django.shortcuts import render
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet, GenericViewSet
from rest_framework.response import Response
from rest_framework import status
from .models import *
from .serializers import *
from apps.system.models import Dict
from apps.system.permission_data import RbacFilterSet
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
import random
from rest_framework.decorators import action
from .filters import *
from utils.pagination import PageOrNot
from rest_framework.exceptions import ParseError, NotAuthenticated
from django.utils import timezone
# Create your views here.
class ApplicationViewSet(RbacFilterSet, ModelViewSet):
"""
认证申请
"""
perms_map = {'get': 'application_view', 'post':'application_create', 'put':'application_update','delete': 'application_delete'}
queryset = Application.objects.all()
serializer_class = ApplicationCreateSerializer
ordering = ['-create_time']
def get_serializer_class(self):
if self.action == 'create':
return ApplicationCreateSerializer
else:
return ApplicationUpdateSerializer
def perform_create(self, serializer):
serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept, number=random.randrange(1000,2000))
class SubApplicationViewSet(RbacFilterSet, ModelViewSet):
"""
子认证申请
"""
perms_map = {'get': 'application_view', 'post':'application_create', 'put':'application_update','delete': 'application_delete'}
queryset = SubApplication.objects.all()
serializer_class = SubApplicationCreateSerializer
filterset_fields = ['application']
ordering = ['-create_time']
def get_serializer_class(self):
if self.action == 'create':
return SubApplicationCreateSerializer
else:
return SubApplicationUpdateSerializer
def create(self, request, *args, **kwargs):
postdata = request.data
postdata['number'] = random.randrange(1000,2000)
serializer = self.get_serializer(data=postdata)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def paginate_queryset(self, queryset):
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('application', None))) or (self.paginator is None):
return None
return self.paginator.paginate_queryset(queryset, self.request, view=self)
class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
"""
申请受理
"""
perms_map = {'get': 'certapp_view', 'post':'certapp_create', 'put':'certapp_update','delete': 'certapp_delete'}
queryset = CertApp.objects.all()
serializer_class = CertappSerializer
ordering = ['-create_time']
filterset_fields = ['status', 'project']
# filterset_class = CertAppFilter
def create(self, request, *args, **kwargs):
postdata = request.data
postdata['number'] = random.randrange(1000,2000)
if postdata.get('field_code', None):
postdata['cert_field'] = Dict.objects.get(code=postdata['field_code']).id
serializer = self.get_serializer(data=postdata)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
@action(methods=['put'], detail=True, perms_map={'put':'complete_certapp'},
url_name='complete_certapp')
def complete(self, request, pk=None):
"""
完成受理
"""
obj = self.get_object()
obj.status = '已受理'
obj.save()
return Response(status=status.HTTP_200_OK)
@action(methods=['put'], detail=False, perms_map={'put':'review_certapp'},
url_name='review_certapp')
def review(self, request, pk=None):
"""
完成评审
"""
certapps = request.data['certapps']
rlist = request.data['rlist']
for i in rlist:
instance = EvaluationDetail.objects.create(item=Evaluations.objects.get(id=i['id']), create_by=request.user, result=i['result'] if 'result' in i and i['result'] else None)
instance.cert_app.add(*certapps)
return Response(status=status.HTTP_200_OK)
class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
"""
受理信息
"""
perms_map = {'get': '*', 'post': 'EvaluationDetail_create',
'put': 'EvaluationDetail_update', 'delete': 'EvaluationDetail_delete'}
queryset = EvaluationDetail.objects
serializer_class = EvaluationDetailSerializer
filterset_fields = ['cert_app']
ordering = ['-create_time']
class UnitViewSet(RbacFilterSet, ModelViewSet):
"""
产品单元
"""
perms_map = {'get': 'certapp_view', 'post':'certapp_create', 'put':'certapp_update','delete': 'certapp_delete'}
queryset = Unit.objects.all()
serializer_class = UnitSerializer
ordering = ['pk']
filterset_fields = ['certapp']
class ProjectViewSet(RbacFilterSet, ModelViewSet):
perms_map = {'get': 'project_view', 'post':'project_create', 'put':'project_update','delete': 'project_delete'}
queryset = Project.objects.all()
serializer_class = ProjectSerializer
ordering = ['pk']
filterset_class = ProjectFilter
search_fields = ['auditee__name', 'plan__name']
def get_serializer_class(self):
if self.action == 'update':
return ProjectUpdateSerializer
return ProjectSerializer
def create(self, request, *args, **kwargs):
postdata = request.data
postdata['number'] = random.randrange(8000,9000)
serializer = self.get_serializer(data=postdata)
serializer.is_valid(raise_exception=True)
if self.request.user is not None:
instance = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
if 'certapps' in postdata and postdata['certapps']:
CertApp.objects.filter(pk__in = postdata['certapps']).update(project=instance, status='进行中')
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
else:
return NotAuthenticated()
@action(methods=['put'], detail=True, perms_map={'put':'project_next'},
url_name='project_next')
def next(self, request, pk=None):
"""
项目流转
"""
obj = self.get_object()
if obj.status == '创建中':
obj.status = '待策划'
obj.save()
return Response(status=status.HTTP_200_OK)
elif obj.status == '策划中' and obj.can_paichai:
obj.status = '待现场审核'
obj.save()
return Response(status=status.HTTP_200_OK)
else:
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=False, perms_map={'put':'project_plan'},
url_name='project_plan')
def plan(self, request, *args, **kwargs):
"""
项目计划
"""
projects = request.data['projects']
plan = request.data['plan']
if projects:
objs = Project.objects.filter(pk__in=projects)
for i in objs:
i.plan=plan
if i.status == '待策划':
i.status == '策划中'
i.save()
return Response(status=status.HTTP_200_OK)
@action(methods=['put'], detail=True, perms_map={'put':'project_edate'},
url_name='project_edate')
def edate(self, request, *args, **kwargs):
"""
制定预期审核时间
"""
obj = self.get_object()
obj.edate0 = request.data['edate0']
obj.edate1 = request.data['edate1']
obj.save()
return Response(status=status.HTTP_200_OK)