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)