@ -10,6 +10,7 @@ from api.exceptions import UnknownTicketType
|
|||||||
from core.models.ticket.ticket import Ticket
|
from core.models.ticket.ticket import Ticket
|
||||||
|
|
||||||
from core.fields.badge import Badge, BadgeField
|
from core.fields.badge import Badge, BadgeField
|
||||||
|
from core.serializers.ticket_category import TicketCategoryBaseSerializer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -160,6 +161,8 @@ class TicketViewSerializer(TicketModelSerializer):
|
|||||||
|
|
||||||
assigned_teams = TeamBaseSerializer(many=True)
|
assigned_teams = TeamBaseSerializer(many=True)
|
||||||
|
|
||||||
|
category = TicketCategoryBaseSerializer()
|
||||||
|
|
||||||
opened_by = UserBaseSerializer()
|
opened_by = UserBaseSerializer()
|
||||||
|
|
||||||
subscribed_users = UserBaseSerializer(many=True)
|
subscribed_users = UserBaseSerializer(many=True)
|
||||||
|
71
app/core/serializers/ticket_category.py
Normal file
71
app/core/serializers/ticket_category.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
from rest_framework.reverse import reverse
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from access.serializers.organization import OrganizationBaseSerializer
|
||||||
|
|
||||||
|
from core.models.ticket.ticket_category import TicketCategory
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TicketCategoryBaseSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
display_name = serializers.SerializerMethodField('get_display_name')
|
||||||
|
|
||||||
|
def get_display_name(self, item):
|
||||||
|
|
||||||
|
return str( item )
|
||||||
|
|
||||||
|
url = serializers.HyperlinkedIdentityField(
|
||||||
|
view_name="v2:_api_v2_ticket_category-detail", format="html"
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
|
||||||
|
model = TicketCategory
|
||||||
|
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'display_name',
|
||||||
|
'name',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'display_name',
|
||||||
|
'name',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class TicketCategoryModelSerializer(TicketCategoryBaseSerializer):
|
||||||
|
|
||||||
|
|
||||||
|
_urls = serializers.SerializerMethodField('get_url')
|
||||||
|
|
||||||
|
def get_url(self, item):
|
||||||
|
|
||||||
|
return {
|
||||||
|
'_self': reverse("API:_api_v2_ticket_category-detail", request=self._context['view'].request, kwargs={'pk': item.pk}),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
|
||||||
|
model = TicketCategory
|
||||||
|
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'display_name',
|
||||||
|
'created',
|
||||||
|
'modified',
|
||||||
|
'_urls',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TicketCategoryViewSerializer(TicketCategoryModelSerializer):
|
||||||
|
|
||||||
|
organization = OrganizationBaseSerializer(many=False, read_only=True)
|
@ -1,6 +1,14 @@
|
|||||||
from api.exceptions import UnknownTicketType
|
from api.exceptions import UnknownTicketType
|
||||||
from api.viewsets.common import ModelViewSet
|
from api.viewsets.common import ModelViewSet
|
||||||
|
|
||||||
|
from assistance.serializers.request import (
|
||||||
|
RequestAddTicketModelSerializer,
|
||||||
|
RequestChangeTicketModelSerializer,
|
||||||
|
RequestTriageTicketModelSerializer,
|
||||||
|
RequestImportTicketModelSerializer,
|
||||||
|
RequestTicketModelSerializer,
|
||||||
|
RequestTicketViewSerializer
|
||||||
|
)
|
||||||
from core.serializers.ticket import (
|
from core.serializers.ticket import (
|
||||||
Ticket,
|
Ticket,
|
||||||
)
|
)
|
||||||
|
79
app/core/viewsets/ticket_category.py
Normal file
79
app/core/viewsets/ticket_category.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
|
||||||
|
|
||||||
|
from api.viewsets.common import ModelViewSet
|
||||||
|
|
||||||
|
from core.serializers.ticket_category import (
|
||||||
|
TicketCategory,
|
||||||
|
TicketCategoryModelSerializer,
|
||||||
|
TicketCategoryViewSerializer
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema_view(
|
||||||
|
create=extend_schema(
|
||||||
|
summary = 'Create a ticket category',
|
||||||
|
description='',
|
||||||
|
responses = {
|
||||||
|
201: OpenApiResponse(description='Created', response=TicketCategoryViewSerializer),
|
||||||
|
403: OpenApiResponse(description='User is missing add permissions'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
destroy = extend_schema(
|
||||||
|
summary = 'Delete a ticket category',
|
||||||
|
description = '',
|
||||||
|
responses = {
|
||||||
|
204: OpenApiResponse(description=''),
|
||||||
|
403: OpenApiResponse(description='User is missing delete permissions'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
list = extend_schema(
|
||||||
|
summary = 'Fetch all ticket categories',
|
||||||
|
description='',
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='', response=TicketCategoryViewSerializer),
|
||||||
|
403: OpenApiResponse(description='User is missing view permissions'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
retrieve = extend_schema(
|
||||||
|
summary = 'Fetch a single ticket category',
|
||||||
|
description='',
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='', response=TicketCategoryViewSerializer),
|
||||||
|
403: OpenApiResponse(description='User is missing view permissions'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
update = extend_schema(exclude = True),
|
||||||
|
partial_update = extend_schema(
|
||||||
|
summary = 'Update a ticket category',
|
||||||
|
description = '',
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='', response=TicketCategoryViewSerializer),
|
||||||
|
403: OpenApiResponse(description='User is missing change permissions'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
class ViewSet(ModelViewSet):
|
||||||
|
|
||||||
|
filterset_fields = [
|
||||||
|
'organization',
|
||||||
|
]
|
||||||
|
|
||||||
|
search_fields = [
|
||||||
|
'name',
|
||||||
|
]
|
||||||
|
|
||||||
|
model = TicketCategory
|
||||||
|
|
||||||
|
|
||||||
|
def get_serializer_class(self):
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.action == 'list'
|
||||||
|
or self.action == 'retrieve'
|
||||||
|
):
|
||||||
|
|
||||||
|
return globals()[str( self.model._meta.verbose_name).replace(' ', '') + 'ViewSerializer']
|
||||||
|
|
||||||
|
|
||||||
|
return globals()[str( self.model._meta.verbose_name).replace(' ', '') + 'ModelSerializer']
|
@ -50,6 +50,10 @@ class Index(CommonViewSet):
|
|||||||
{
|
{
|
||||||
"name": "External Links",
|
"name": "External Links",
|
||||||
"model": "external_link"
|
"model": "external_link"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ticket Category",
|
||||||
|
"model": "ticket_category"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -119,6 +123,7 @@ class Index(CommonViewSet):
|
|||||||
"project_state": reverse('v2:_api_v2_project_state-list', request=request),
|
"project_state": reverse('v2:_api_v2_project_state-list', request=request),
|
||||||
"project_type": reverse('v2:_api_v2_project_type-list', request=request),
|
"project_type": reverse('v2:_api_v2_project_type-list', request=request),
|
||||||
"software_category": reverse('v2:_api_v2_software_category-list', request=request),
|
"software_category": reverse('v2:_api_v2_software_category-list', request=request),
|
||||||
|
"ticket_category": reverse('v2:_api_v2_ticket_category-list', request=request),
|
||||||
"user_settings": reverse(
|
"user_settings": reverse(
|
||||||
'v2:_api_v2_user_settings-detail',
|
'v2:_api_v2_user_settings-detail',
|
||||||
request=request,
|
request=request,
|
||||||
|
Reference in New Issue
Block a user