mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-10-22 08:19:04 +00:00
* reactor: 修改工单Model,添加工单迁移文件 * reactor: 修改工单Model,添加工单迁移文件 * reactor: 重构工单模块 * reactor: 重构工单模块2 * reactor: 重构工单模块3 * reactor: 重构工单模块4 * reactor: 重构工单模块5 * reactor: 重构工单模块6 * reactor: 重构工单模块7 * reactor: 重构工单模块8 * reactor: 重构工单模块9 * reactor: 重构工单模块10 * reactor: 重构工单模块11 * reactor: 重构工单模块12 * reactor: 重构工单模块13 * reactor: 重构工单模块14 * reactor: 重构工单模块15 * reactor: 重构工单模块16 * reactor: 重构工单模块17 * reactor: 重构工单模块18 * reactor: 重构工单模块19 * reactor: 重构工单模块20 * reactor: 重构工单模块21 * reactor: 重构工单模块22 * reactor: 重构工单模块23 * reactor: 重构工单模块24 * reactor: 重构工单模块25 * reactor: 重构工单模块26 * reactor: 重构工单模块27 * reactor: 重构工单模块28 * reactor: 重构工单模块29 * reactor: 重构工单模块30 * reactor: 重构工单模块31 * reactor: 重构工单模块32 * reactor: 重构工单模块33 * reactor: 重构工单模块34 * reactor: 重构工单模块35 * reactor: 重构工单模块36 * reactor: 重构工单模块37 * reactor: 重构工单模块38 * reactor: 重构工单模块39
67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
|
|
from rest_framework import viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.exceptions import MethodNotAllowed
|
|
|
|
from common.mixins.api import CommonApiMixin
|
|
from common.permissions import IsValidUser, IsOrgAdmin
|
|
from common.const.http import POST, PUT
|
|
from tickets import serializers
|
|
from tickets.permissions.ticket import IsAssignee, NotClosed
|
|
from tickets.models import Ticket
|
|
from tickets.api.ticket.mixin import TicketMetaSerializerViewMixin
|
|
|
|
|
|
__all__ = ['TicketViewSet']
|
|
|
|
|
|
class TicketViewSet(TicketMetaSerializerViewMixin, CommonApiMixin, viewsets.ModelViewSet):
|
|
permission_classes = (IsValidUser,)
|
|
serializer_class = serializers.TicketSerializer
|
|
serializer_classes = {
|
|
'default': serializers.TicketDisplaySerializer,
|
|
'display': serializers.TicketDisplaySerializer,
|
|
'apply': serializers.TicketApplySerializer,
|
|
'approve': serializers.TicketApproveSerializer,
|
|
'reject': serializers.TicketRejectSerializer,
|
|
'close': serializers.TicketCloseSerializer,
|
|
}
|
|
filter_fields = [
|
|
'id', 'title', 'type', 'action', 'status', 'applicant', 'applicant_display', 'processor',
|
|
'processor_display', 'assignees__id'
|
|
]
|
|
search_fields = [
|
|
'title', 'action', 'type', 'status', 'applicant_display', 'processor_display'
|
|
]
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
raise MethodNotAllowed(self.action)
|
|
|
|
def update(self, request, *args, **kwargs):
|
|
raise MethodNotAllowed(self.action)
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
raise MethodNotAllowed(self.action)
|
|
|
|
def get_queryset(self):
|
|
queryset = Ticket.get_user_related_tickets(self.request.user)
|
|
return queryset
|
|
|
|
@action(detail=False, methods=[POST])
|
|
def apply(self, request, *args, **kwargs):
|
|
return super().create(request, *args, **kwargs)
|
|
|
|
@action(detail=True, methods=[PUT], permission_classes=[IsOrgAdmin, IsAssignee, NotClosed])
|
|
def approve(self, request, *args, **kwargs):
|
|
return super().update(request, *args, **kwargs)
|
|
|
|
@action(detail=True, methods=[PUT], permission_classes=[IsOrgAdmin, IsAssignee, NotClosed])
|
|
def reject(self, request, *args, **kwargs):
|
|
return super().update(request, *args, **kwargs)
|
|
|
|
@action(detail=True, methods=[PUT], permission_classes=[IsOrgAdmin, IsAssignee, NotClosed])
|
|
def close(self, request, *args, **kwargs):
|
|
return super().update(request, *args, **kwargs)
|