93 lines
3.9 KiB
Python
93 lines
3.9 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, 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(soft=False)
|
|
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']
|
|
|
|
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 = OplSerializer
|
|
|
|
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 destroy(self, request, *args, **kwargs):
|
|
obj = self.get_object()
|
|
if obj.opl.ticket:
|
|
raise ParseError('许可证已处理不可删除')
|
|
return super().destroy(request, *args, **kwargs)
|