mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			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 TicketJSONFieldsSerializerViewMixin
 | 
						|
 | 
						|
 | 
						|
__all__ = ['TicketViewSet']
 | 
						|
 | 
						|
 | 
						|
class TicketViewSet(TicketJSONFieldsSerializerViewMixin, CommonApiMixin, viewsets.ModelViewSet):
 | 
						|
    permission_classes = (IsValidUser,)
 | 
						|
    serializer_class = serializers.TicketSerializer
 | 
						|
    serializer_classes = {
 | 
						|
        'default': serializers.TicketDisplaySerializer,
 | 
						|
        'display': serializers.TicketDisplaySerializer,
 | 
						|
        'open': 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 open(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)
 |