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, OplCateSerializer, OplSerializer, OplWorkerCreateSerializer, 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 serializer_class = OplCateSerializer 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(soft=False) return Response(status=204) class OplViewSet(CustomModelViewSet): queryset = Opl.objects.all() create_serializer_class = OplCateCreateUpdateSerializer update_serializer_class = OplCateCreateUpdateSerializer serializer_class = OplSerializer def destroy(self, request, *args, **kwargs): obj = self.get_object() if obj.ticket: raise ParseError('许可证已处理不可删除') return super().destroy(request, *args, **kwargs) def create(self, request, *args, **kwargs): obj = self.get_object() if obj.operation.state == Operation.OP_CLOSE: raise ParseError('作业已关闭不可创建许可') return super().create(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 = OplSerializer def create(self, request, *args, **kwargs): obj = self.get_object() if obj.opl.ticket: raise ParseError('许可证已处理不可新增') return super().create(request, *args, **kwargs) 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 def create(self, request, *args, **kwargs): obj = self.get_object() if obj.opl.ticket: raise ParseError('许可证已处理不可新增') return super().create(request, *args, **kwargs) def destroy(self, request, *args, **kwargs): obj = self.get_object() if obj.opl.ticket: raise ParseError('许可证已处理不可删除') return super().destroy(request, *args, **kwargs)