mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-23 04:20:27 +00:00
merge: with v3
This commit is contained in:
@@ -1,34 +1,37 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from rest_framework import serializers
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from common.drf.fields import LabeledChoiceField
|
||||
from users.models import User
|
||||
from orgs.models import Organization
|
||||
from orgs.mixins.serializers import OrgResourceModelSerializerMixin
|
||||
from tickets.models import Ticket, TicketFlow
|
||||
from tickets.const import TicketType
|
||||
from tickets.const import TicketType, TicketStatus, TicketState
|
||||
|
||||
__all__ = [
|
||||
'TicketDisplaySerializer', 'TicketApplySerializer', 'TicketListSerializer', 'TicketApproveSerializer'
|
||||
'TicketApplySerializer', 'TicketApproveSerializer', 'TicketSerializer',
|
||||
]
|
||||
|
||||
|
||||
class TicketSerializer(OrgResourceModelSerializerMixin):
|
||||
type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display'))
|
||||
status_display = serializers.ReadOnlyField(source='get_status_display', label=_('Status display'))
|
||||
type = LabeledChoiceField(choices=TicketType.choices, read_only=True, label=_('Type'))
|
||||
status = LabeledChoiceField(choices=TicketStatus.choices, read_only=True, label=_('Status'))
|
||||
state = LabeledChoiceField(choices=TicketState.choices, read_only=True, label=_("State"))
|
||||
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields_mini = ['id', 'title']
|
||||
fields_small = fields_mini + [
|
||||
'type', 'type_display', 'status', 'status_display',
|
||||
'state', 'approval_step', 'rel_snapshot', 'comment',
|
||||
'date_created', 'date_updated', 'org_id', 'rel_snapshot',
|
||||
'process_map', 'org_name', 'serial_num'
|
||||
fields_small = fields_mini + ['org_id', 'comment']
|
||||
read_only_fields = [
|
||||
'serial_num', 'process_map', 'approval_step', 'type', 'state', 'applicant',
|
||||
'status', 'date_created', 'date_updated', 'org_name', 'rel_snapshot'
|
||||
]
|
||||
fields_fk = ['applicant', ]
|
||||
fields = fields_small + fields_fk
|
||||
fields = fields_small + read_only_fields
|
||||
extra_kwargs = {
|
||||
'type': {'required': True}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
@@ -42,27 +45,14 @@ class TicketSerializer(OrgResourceModelSerializerMixin):
|
||||
choices.pop(TicketType.general, None)
|
||||
tp._choices = choices
|
||||
|
||||
|
||||
class TicketListSerializer(TicketSerializer):
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields = [
|
||||
'id', 'title', 'serial_num', 'type', 'type_display', 'status',
|
||||
'state', 'rel_snapshot', 'date_created', 'rel_snapshot'
|
||||
]
|
||||
read_only_fields = fields
|
||||
|
||||
|
||||
class TicketDisplaySerializer(TicketSerializer):
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields = TicketSerializer.Meta.fields
|
||||
read_only_fields = fields
|
||||
@classmethod
|
||||
def setup_eager_loading(cls, queryset):
|
||||
queryset = queryset.prefetch_related('ticket_steps')
|
||||
return queryset
|
||||
|
||||
|
||||
class TicketApproveSerializer(TicketSerializer):
|
||||
class Meta:
|
||||
model = Ticket
|
||||
class Meta(TicketSerializer.Meta):
|
||||
fields = TicketSerializer.Meta.fields
|
||||
read_only_fields = fields
|
||||
|
||||
@@ -103,9 +93,12 @@ class TicketApplySerializer(TicketSerializer):
|
||||
|
||||
ticket_type = attrs.get('type')
|
||||
org_id = attrs.get('org_id')
|
||||
flow = TicketFlow.get_org_related_flows(org_id=org_id).filter(type=ticket_type).first()
|
||||
flow = TicketFlow.get_org_related_flows(org_id=org_id) \
|
||||
.filter(type=ticket_type).first()
|
||||
|
||||
if flow:
|
||||
attrs['flow'] = flow
|
||||
return attrs
|
||||
else:
|
||||
error = _('The ticket flow `{}` does not exist'.format(ticket_type))
|
||||
raise serializers.ValidationError(error)
|
||||
|
Reference in New Issue
Block a user