factory/apps/opm/views.py

108 lines
4.4 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, 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
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 = OplCreateUpdateSerializer
update_serializer_class = OplCreateUpdateSerializer
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)