factory/apps/opm/views.py

113 lines
4.9 KiB
Python

from rest_framework.response import Response
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplWorker
from apps.opm.serializers import (GasCheckCreateUpdateSerializer, GasCheckSerializer,
OperationCreateUpdateSerializer, OperationDetailSerializer,
OplCateCreateUpdateSerializer, OplCateDetailSerializer, OplCateSerializer,
OplCreateUpdateSerializer, OplDetailSerializer, OplListSerializer,
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 apps.wf.models import Ticket
# 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):
perms_map = {'get': 'operation.view', 'post': 'operation.create', 'put': 'operation.update', 'delete': 'operation.delete'}
queryset = Operation.objects.all()
create_serializer_class = OperationCreateUpdateSerializer
update_serializer_class = OperationCreateUpdateSerializer
serializer_class = OperationDetailSerializer
retrieve_serializer_class = OperationDetailSerializer
select_related_fields = ['area', 'dept_bus', 'dept_ter', 'coordinator']
prefetch_related_fields = ['cates']
search_fields = ['name']
filterset_fields = ['state', 'cates', 'area', 'create_by']
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 = OplListSerializer
retrieve_serializer_class = OplDetailSerializer
select_related_fields = ['cate', 'operation', 'dept_do', 'charger', 'monitor', 'ticket']
filterset_fields = ['operation', 'cate']
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.ticket and obj.ticket.act_state != Ticket.TICKET_ACT_STATE_DRAFT:
raise ParseError('许可证已处理不可删除')
return super().destroy(request, *args, **kwargs)
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.ticket and obj.ticket.act_state != Ticket.TICKET_ACT_STATE_DRAFT:
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)