Files
goodtimes/manage_communications/api/serializers.py
rizwanisready 97255b2a60 transactions
2024-03-10 23:27:22 +05:30

85 lines
2.7 KiB
Python

import re
from rest_framework import serializers
from accounts.models import IAmPrincipal
from goodtimes import constants
from manage_communications.models import ContactUs, Feedback, TicketIssueType, TicketAttachment, Tickets
from goodtimes import date_utils
class ContactUsSerializer(serializers.ModelSerializer):
class Meta:
model = ContactUs
# Alternatively, you can specify fields explicitly:
fields = ['name', 'email_address', 'mobile_number', 'subject', 'message']
class TicketIssueTypeSerializer(serializers.ModelSerializer):
class Meta:
model = TicketIssueType
fields = ["id", "name"]
class TicketAttachmentSerializer(serializers.ModelSerializer):
class Meta:
model = TicketAttachment
fields = ["image"]
# def get_image_url(self, obj, field_name, request):
# image_field = getattr(obj, field_name)
# if image_field:
# return request.build_absolute_uri(image_field.url)
# return ""
# def to_representation(self, instance):
# data = super().to_representation(instance)
# request = self.context.get("request")
# data["image"] = self.get_image_url(instance, "image", request)
# return data
class TicketStatusSerializer(serializers.Serializer):
ticket_status = serializers.ChoiceField(choices=Tickets.TICKET_STATUS)
class TicketsSerializer(serializers.ModelSerializer):
issuetype = serializers.PrimaryKeyRelatedField(queryset=TicketIssueType.objects.all())
attachments = TicketAttachmentSerializer(many=True, read_only=True)
created_on = serializers.SerializerMethodField()
class Meta:
model = Tickets
fields = [
"id",
"issuetype",
"principal",
"subject",
"description",
"ticket_status",
"attachments",
"is_stopped",
"created_on",
]
def get_created_on(self, obj):
return date_utils.format_date_to_string(obj.created_on)
class FeedbackSerializer(serializers.ModelSerializer):
RATING_CHOICES = Feedback.RATING_CHOICES
rating = serializers.ChoiceField(choices=RATING_CHOICES)
class Meta:
model = Feedback
fields = ['principal', 'email', 'comment', 'rating']
def get_feedback_reaction(self, obj):
rating = obj.rating
if rating == 1:
return Feedback.VERY_BAD
elif rating == 2:
return Feedback.POOR
elif rating == 3:
return Feedback.MEDIUM
elif rating == 4:
return Feedback.GOOD
elif rating == 5:
return Feedback.EXCELLENT
else:
return None