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