411 lines
17 KiB
Python
411 lines
17 KiB
Python
import re
|
|
from django.http import request
|
|
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.laboratory.models import TestOrg
|
|
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
|
|
from rest_framework.mixins import ListModelMixin
|
|
# 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 = ['state', 'project', 'cert_field']
|
|
# 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)
|
|
obj = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept, state='受理')
|
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, data=serializer.data, operation='创建申请', state='申请')
|
|
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':'certapp_complete'},
|
|
url_name='complete_certapp')
|
|
def complete(self, request, pk=None):
|
|
"""
|
|
完成受理
|
|
"""
|
|
obj = self.get_object()
|
|
obj.state = '策划'
|
|
obj.save()
|
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='完成受理', state='受理')
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
@action(methods=['put'], detail=False, perms_map={'put':'certapp_review'},
|
|
url_name='review_certapp')
|
|
def review(self, request, pk=None):
|
|
"""
|
|
完成评审
|
|
"""
|
|
certapps = request.data['certapps']
|
|
rlist = request.data['rlist']
|
|
for i in rlist:
|
|
obj = EvaluationDetail.objects.create(item=Evaluations.objects.get(id=i['id']),item_v=i['content'], create_by=request.user, result=i['result'] if 'result' in i and i['result'] else None)
|
|
obj.cert_app.add(*certapps)
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certapp_access')
|
|
def access(self, request, pk=None):
|
|
"""
|
|
评定
|
|
"""
|
|
# obj, ok = Certaccess.objects.get_or_create(certapp=self.get_object(), defaults={'certapp':self.get_object()
|
|
# , 'conclusion':Dict.objects.get(pk=request.data['conclusion']), 'score':request.data['score']})
|
|
# if not ok:
|
|
obj = self.get_object()
|
|
oldstate = obj.state
|
|
obj.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
|
obj.score = request.data['score']
|
|
obj.state = '出证'
|
|
obj.save()
|
|
obj.nonitems.clear()
|
|
obj.nonitems.add(*request.data['nonitems'])
|
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='提交评定结论', state=oldstate)
|
|
return Response({'state':obj.state}, status=status.HTTP_200_OK)
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_feedback'},
|
|
url_name='certapp_feedback')
|
|
def feedback(self, request, *args, **kwargs):
|
|
"""
|
|
业务反馈
|
|
"""
|
|
obj = self.get_object()
|
|
if obj.state in ['现场审核', '产品检测']:
|
|
oldstate = obj.state
|
|
if obj.cert_field.parent.code == 'PRO':
|
|
obj.state = '产品检测'
|
|
else:
|
|
obj.state = '评定'
|
|
obj.save()
|
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='提交现场审核反馈', state=oldstate)
|
|
return Response({'state':obj.state}, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['get'], detail=True, perms_map={'get':'*'},
|
|
url_name='certapp_flow')
|
|
def flow(self, request, *args, **kwargs):
|
|
"""
|
|
业务流程进度
|
|
"""
|
|
objs = CertAppFlow.objects.filter(certapp__pk=kwargs['pk'])
|
|
serializer = CertappflowSerializer(objs, many=True)
|
|
return Response(serializer.data)
|
|
|
|
|
|
|
|
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']
|
|
def reviewupdate(self, request, pk=None):
|
|
"""
|
|
完成评审
|
|
"""
|
|
|
|
rlist = request.data['rlist']
|
|
for i in rlist:
|
|
obj = EvaluationDetail.objects.update(item=Evaluations.objects.get(id=i['id']),item_v=i['content'], update_by=request.user, result=i['result'] )
|
|
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
|
|
|
|
class CertappunitViewset(PageOrNot, ModelViewSet):
|
|
perms_map={'get': '*', '*':'certapp_view'}
|
|
queryset = Certappunit.objects.all()
|
|
serializer_class = CertappunitSerializer
|
|
filterset_fields = ['certapp']
|
|
ordering= ['-id']
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certappunit_access')
|
|
def access(self, request, pk=None):
|
|
"""
|
|
单元评定
|
|
"""
|
|
obj = self.get_object()
|
|
if request.data['decision']:
|
|
obj.decision = Dict.objects.get(pk=request.data['decision'])
|
|
else:
|
|
obj.decision = None
|
|
obj.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_testtask'}, url_name='certappunit_testtask')
|
|
def testtask(self, request, pk=None):
|
|
"""
|
|
检测任务
|
|
"""
|
|
obj = self.get_object()
|
|
obj.testorg = TestOrg.objects.get(pk=request.data['testorg'])
|
|
obj.remark = request.data['remark']
|
|
obj.sampledec = request.data['sampledec']
|
|
obj.detnumber = request.data['detnumber']
|
|
obj.testitem = request.data['testitem']
|
|
obj.charge = request.data['charge']
|
|
obj.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_teststate'}, url_name='certappunit_teststate')
|
|
def teststate(self, request, pk=None):
|
|
"""
|
|
修改检测任务状态
|
|
"""
|
|
obj = self.get_object()
|
|
if obj.teststate == "待CTC下达":
|
|
obj.teststate = request.data['teststate']
|
|
obj.inspectionstate = "待检验"
|
|
obj.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
else:
|
|
return Response('检测任务异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_createsamples'}, url_name='certappunit_createsamples')
|
|
def createsamples(self, request, pk=None):
|
|
"""
|
|
实验室任务反馈
|
|
"""
|
|
obj = self.get_object()
|
|
obj.teststate = '到样检测中'
|
|
obj.sampledate = request.data['sampledate']
|
|
obj.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_createcomplete'}, url_name='certappunit_createcomplete')
|
|
def createcomplete(self, request, pk=None):
|
|
"""
|
|
实验室任务反馈
|
|
"""
|
|
obj = self.get_object()
|
|
obj.teststate = '待提取报告'
|
|
obj.path = request.data['path']
|
|
obj.conclusion = request.data['conclusion']
|
|
obj.completedate = request.data['completedate']
|
|
obj.issuancedate = request.data['issuancedate']
|
|
obj.resultremark = request.data['resultremark']
|
|
obj.remarks = request.data['remarks']
|
|
obj.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
|
|
|
|
|
|
from apps.plan.models import Member
|
|
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)
|
|
obj = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
|
|
obj.state = '创建中'
|
|
if 'certapps' in postdata and postdata['certapps']:
|
|
CertApp.objects.filter(pk__in = postdata['certapps']).update(project=obj)
|
|
obj.state = '待策划'
|
|
obj.save()
|
|
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':'project_assgin'},
|
|
url_name='project_assgin')
|
|
def assgin(self, request, pk=None):
|
|
"""
|
|
审核任务下达
|
|
"""
|
|
obj = self.get_object()
|
|
if obj.state == '策划中':
|
|
obj.state = '审核任务已下达'
|
|
obj.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
else:
|
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'project_toplan'},
|
|
url_name='project_toplan')
|
|
def toplan(self, request, *args, **kwargs):
|
|
"""
|
|
转入策划
|
|
"""
|
|
obj = self.get_object()
|
|
if CertApp.objects.filter(project=obj, is_deleted=False).exists():
|
|
obj.state = '待策划'
|
|
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.objects.get(pk=plan)
|
|
if i.state == '待策划':
|
|
i.state = '策划中'
|
|
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()
|
|
if obj.state == '审核任务已接受':
|
|
obj.edate0 = request.data['edate0']
|
|
obj.edate1 = request.data['edate1']
|
|
obj.state = '待现场审核'
|
|
obj.save()
|
|
for i in obj.certapp_project.all():
|
|
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='已安排现场审核时间', state='现场审核')
|
|
return Response({'edate0':obj.edate0, 'edate1':obj.edate1, 'state':obj.state}, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'project_start'},
|
|
url_name='project_start')
|
|
def start(self, request, *args, **kwargs):
|
|
"""
|
|
开始审核
|
|
"""
|
|
obj = self.get_object()
|
|
if obj.state == '待现场审核':
|
|
obj.start_date = request.data['start_date']
|
|
obj.state = '现场审核中'
|
|
obj.save()
|
|
for i in obj.certapp_project.all():
|
|
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='现场审核中', state='现场审核')
|
|
return Response({'start_date':obj.start_date,'state':obj.state}, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'audit_accept'},url_name='audit_accept')
|
|
def accept(self, request, *args, **kwargs):
|
|
"""
|
|
接受项目审核任务
|
|
"""
|
|
obj = self.get_object()
|
|
if obj.state == '审核任务已下达':
|
|
obj.state = '审核任务已接受'
|
|
obj.save()
|
|
Member.objects.filter(certapp__project=obj).update(is_accepted=True)
|
|
obj.certapp_project.all().update(state='现场审核')
|
|
for i in obj.certapp_project.all():
|
|
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='审核任务已接受', state='策划')
|
|
return Response(status=status.HTTP_200_OK)
|
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['put'], detail=True, perms_map={'put':'project_feedback'},
|
|
url_name='project_feedback')
|
|
def feedback(self, request, *args, **kwargs):
|
|
"""
|
|
项目反馈
|
|
"""
|
|
obj = self.get_object()
|
|
if obj.state == '现场审核中':
|
|
obj.start_date = request.data['start_date']
|
|
obj.end_date = request.data['end_date']
|
|
obj.feedback_remark = request.data['feedback_remark']
|
|
obj.state = '任务已反馈'
|
|
obj.save()
|
|
return Response({'start_date':obj.start_date, 'end_date':obj.end_date,'state':obj.state}, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
|
|