101 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
from django.shortcuts import render
 | 
						|
from rest_framework.response import Response
 | 
						|
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplWorker
 | 
						|
from apps.opm.serializers import GasCheckCreateUpdateSerializer, GasCheckSerializer, OperationCreateUpdateSerializer, OperationSerializer, OplCateCreateUpdateSerializer, OplCateDetailSerializer, OplCateSerializer, OplCreateUpdateSerializer, OplSerializer, OplWorkerCreateSerializer, OplWorkerSerializer, OplWorkerUpdateSerializer
 | 
						|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
 | 
						|
from rest_framework.exceptions import ParseError
 | 
						|
from rest_framework.mixins import CreateModelMixin, ListModelMixin, DestroyModelMixin
 | 
						|
from rest_framework.decorators import action
 | 
						|
from rest_framework import serializers
 | 
						|
from django.db import transaction
 | 
						|
 | 
						|
# Create your views here.
 | 
						|
class OplCateViewSet(CustomModelViewSet):
 | 
						|
    queryset = OplCate.objects.all()
 | 
						|
    create_serializer_class = OplCateCreateUpdateSerializer
 | 
						|
    update_serializer_class = OplCateCreateUpdateSerializer
 | 
						|
    retrieve_serializer_class = OplCateDetailSerializer
 | 
						|
    serializer_class = OplCateSerializer
 | 
						|
    prefetch_related_fields = ['measure_options', 'risk_options', 'close_options']
 | 
						|
 | 
						|
 | 
						|
class OperationViewSet(CustomModelViewSet):
 | 
						|
    queryset = Operation.objects.all()
 | 
						|
    create_serializer_class = OperationCreateUpdateSerializer
 | 
						|
    update_serializer_class = OperationCreateUpdateSerializer
 | 
						|
    serializer_class = OperationSerializer
 | 
						|
 | 
						|
    def update(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.state != Operation.OP_CREATE:
 | 
						|
            raise ParseError('非创建状态不可修改')
 | 
						|
        return super().update(request, *args, **kwargs)
 | 
						|
 | 
						|
    def destroy(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.state != Operation.OP_CREATE:
 | 
						|
            raise ParseError('非创建状态不可删除')
 | 
						|
        obj.delete()
 | 
						|
        return Response(status=204)
 | 
						|
 | 
						|
 | 
						|
class OplViewSet(CustomModelViewSet):
 | 
						|
    queryset = Opl.objects.all()
 | 
						|
    create_serializer_class = OplCreateUpdateSerializer
 | 
						|
    update_serializer_class = OplCreateUpdateSerializer
 | 
						|
    serializer_class = OplSerializer
 | 
						|
    select_related_fields = ['cate']
 | 
						|
    filterset_fields = ['operation']
 | 
						|
 | 
						|
    def destroy(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.ticket:
 | 
						|
            raise ParseError('许可证已处理不可删除')
 | 
						|
        return super().destroy(request, *args, **kwargs)
 | 
						|
 | 
						|
    def update(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.ticket:
 | 
						|
            raise ParseError('许可证已处理不可编辑')
 | 
						|
        return super().update(request, *args, **kwargs)
 | 
						|
 | 
						|
 | 
						|
class OplWorkerViewSet(CustomModelViewSet):
 | 
						|
    perms_map = {'get': '*', 'post': 'opl:update', 'put': 'opl:update', 'delete': 'opl:update'}
 | 
						|
    queryset = OplWorker.objects.all()
 | 
						|
    create_serializer_class = OplWorkerCreateSerializer
 | 
						|
    update_serializer_class = OplWorkerUpdateSerializer
 | 
						|
    serializer_class = OplWorkerSerializer
 | 
						|
    filterset_fields = ['opl']
 | 
						|
 | 
						|
    # def get_queryset(self):
 | 
						|
    #     if self.request.query_params.get('opl', None):
 | 
						|
    #         raise ParseError('请指定查询许可证')
 | 
						|
    #     return super().get_queryset()
 | 
						|
 | 
						|
    def destroy(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.opl.ticket:
 | 
						|
            raise ParseError('许可证已处理不可删除')
 | 
						|
        return super().destroy(request, *args, **kwargs)
 | 
						|
 | 
						|
    def update(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.opl.ticket:
 | 
						|
            raise ParseError('许可证已处理不可编辑')
 | 
						|
        return super().update(request, *args, **kwargs)
 | 
						|
 | 
						|
 | 
						|
class GasCheckViewSet(CreateModelMixin, ListModelMixin, DestroyModelMixin, CustomGenericViewSet):
 | 
						|
    perms_map = {'get': '*', 'post': 'opl:update', 'delete': 'opl:update'}
 | 
						|
    queryset = GasCheck.objects.all()
 | 
						|
    create_serializer_class = GasCheckCreateUpdateSerializer
 | 
						|
    serializer_class = GasCheckSerializer
 | 
						|
    filterset_fields = ['opl']
 | 
						|
 | 
						|
    def destroy(self, request, *args, **kwargs):
 | 
						|
        obj = self.get_object()
 | 
						|
        if obj.opl.ticket:
 | 
						|
            raise ParseError('许可证已处理不可删除')
 | 
						|
        return super().destroy(request, *args, **kwargs)
 |