Files
ihrm/horilla_api/api_serializers/helpdesk/serializers.py
2026-01-13 10:48:28 +05:30

223 lines
6.6 KiB
Python

"""
horilla_api/api_serializers/helpdesk/serializers.py
"""
from rest_framework import serializers
from base.models import Tags
from employee.models import Employee
from helpdesk.models import (
FAQ,
Attachment,
ClaimRequest,
Comment,
DepartmentManager,
FAQCategory,
Ticket,
TicketType,
)
class TicketTypeSerializer(serializers.ModelSerializer):
class Meta:
model = TicketType
fields = "__all__"
class FAQCategorySerializer(serializers.ModelSerializer):
class Meta:
model = FAQCategory
fields = "__all__"
class FAQSerializer(serializers.ModelSerializer):
category = FAQCategorySerializer(read_only=True)
category_id = serializers.PrimaryKeyRelatedField(
queryset=FAQCategory.objects.all(), source="category", write_only=True
)
tags = serializers.PrimaryKeyRelatedField(
queryset=Tags.objects.all(), many=True, required=False
)
class Meta:
model = FAQ
fields = "__all__"
class DepartmentManagerSerializer(serializers.ModelSerializer):
manager = serializers.SerializerMethodField()
department = serializers.SerializerMethodField()
class Meta:
model = DepartmentManager
fields = "__all__"
def get_manager(self, obj):
if obj.manager:
return {
"id": obj.manager.id,
"employee_first_name": obj.manager.employee_first_name,
"employee_last_name": obj.manager.employee_last_name,
"get_full_name": obj.manager.get_full_name(),
}
return None
def get_department(self, obj):
if obj.department:
return {
"id": obj.department.id,
"department": obj.department.department,
}
return None
class CommentSerializer(serializers.ModelSerializer):
employee_id = serializers.SerializerMethodField()
employee_id_write = serializers.PrimaryKeyRelatedField(
queryset=Employee.objects.all(),
source="employee_id",
write_only=True,
required=False,
)
ticket_id = serializers.PrimaryKeyRelatedField(
queryset=Ticket.objects.all(), source="ticket", write_only=True
)
class Meta:
model = Comment
fields = "__all__"
def get_employee_id(self, obj):
if obj.employee_id:
return {
"id": obj.employee_id.id,
"employee_first_name": obj.employee_id.employee_first_name,
"employee_last_name": obj.employee_id.employee_last_name,
"get_full_name": obj.employee_id.get_full_name(),
}
return None
class AttachmentSerializer(serializers.ModelSerializer):
ticket_id = serializers.PrimaryKeyRelatedField(
queryset=Ticket.objects.all(), source="ticket", write_only=True, required=False
)
comment_id = serializers.PrimaryKeyRelatedField(
queryset=Comment.objects.all(),
source="comment",
write_only=True,
required=False,
)
class Meta:
model = Attachment
fields = "__all__"
class ClaimRequestSerializer(serializers.ModelSerializer):
ticket_id = serializers.SerializerMethodField()
ticket_id_write = serializers.PrimaryKeyRelatedField(
queryset=Ticket.objects.all(), source="ticket_id", write_only=True
)
employee_id = serializers.SerializerMethodField()
employee_id_write = serializers.PrimaryKeyRelatedField(
queryset=Employee.objects.all(), source="employee_id", write_only=True
)
class Meta:
model = ClaimRequest
fields = "__all__"
def get_ticket_id(self, obj):
if obj.ticket_id:
return {
"id": obj.ticket_id.id,
"title": obj.ticket_id.title,
}
return None
def get_employee_id(self, obj):
if obj.employee_id:
return {
"id": obj.employee_id.id,
"employee_first_name": obj.employee_id.employee_first_name,
"employee_last_name": obj.employee_id.employee_last_name,
"get_full_name": obj.employee_id.get_full_name(),
}
return None
class TicketSerializer(serializers.ModelSerializer):
employee_id = serializers.SerializerMethodField()
employee_id_write = serializers.PrimaryKeyRelatedField(
queryset=Employee.objects.all(),
source="employee_id",
write_only=True,
required=False,
)
ticket_type = TicketTypeSerializer(read_only=True)
ticket_type_id = serializers.PrimaryKeyRelatedField(
queryset=TicketType.objects.all(), source="ticket_type", write_only=True
)
assigned_to = serializers.SerializerMethodField()
assigned_to_ids = serializers.PrimaryKeyRelatedField(
queryset=Employee.objects.all(),
many=True,
source="assigned_to",
write_only=True,
required=False,
)
tags = serializers.SerializerMethodField()
tags_ids = serializers.PrimaryKeyRelatedField(
queryset=Tags.objects.all(),
many=True,
source="tags",
write_only=True,
required=False,
)
raised_on_display = serializers.SerializerMethodField()
comments = CommentSerializer(many=True, read_only=True)
attachments = AttachmentSerializer(many=True, read_only=True)
class Meta:
model = Ticket
fields = "__all__"
extra_kwargs = {
"assigned_to": {"read_only": True},
"tags": {"read_only": True},
}
def get_employee_id(self, obj):
if obj.employee_id:
return {
"id": obj.employee_id.id,
"employee_first_name": obj.employee_id.employee_first_name,
"employee_last_name": obj.employee_id.employee_last_name,
"get_full_name": obj.employee_id.get_full_name(),
}
return None
def get_assigned_to(self, obj):
if obj.assigned_to.exists():
return [
{
"id": emp.id,
"employee_first_name": emp.employee_first_name,
"employee_last_name": emp.employee_last_name,
"get_full_name": emp.get_full_name(),
}
for emp in obj.assigned_to.all()
]
return []
def get_tags(self, obj):
if obj.tags.exists():
return [{"id": tag.id, "name": tag.name} for tag in obj.tags.all()]
return []
def get_raised_on_display(self, obj):
try:
return obj.get_raised_on()
except:
return obj.raised_on