bottleneckcrm/backend/contacts/serializer.py
Ashwin Kumar c2b29afdf8
1.0 (#567)
1.0
2025-12-06 23:10:54 +05:30

127 lines
3.6 KiB
Python

from rest_framework import serializers
from common.serializer import (
AttachmentsSerializer,
OrganizationSerializer,
ProfileSerializer,
TeamsSerializer,
)
from contacts.models import Contact
# Note: Removed unused serializer properties that were computed but never used by frontend:
# - get_team_users, get_team_and_assigned_users, get_assigned_users_not_in_teams
# - created_on_arrow (frontend computes its own humanized timestamps)
class ContactSerializer(serializers.ModelSerializer):
"""Serializer for reading Contact data"""
teams = TeamsSerializer(read_only=True, many=True)
assigned_to = ProfileSerializer(read_only=True, many=True)
contact_attachment = AttachmentsSerializer(read_only=True, many=True)
org = OrganizationSerializer()
class Meta:
model = Contact
fields = (
"id",
# Core Contact Information
"first_name",
"last_name",
"email",
"phone",
# Professional Information
"organization",
"title",
"department",
# Communication Preferences
"do_not_call",
"linkedin_url",
# Address
"address_line",
"city",
"state",
"postcode",
"country",
# Assignment
"assigned_to",
"teams",
# Tags
"tags",
# Notes
"description",
# System
"created_by",
"created_at",
"is_active",
"org",
"account",
"contact_attachment",
)
class CreateContactSerializer(serializers.ModelSerializer):
"""Serializer for creating/updating Contact data"""
def __init__(self, *args, **kwargs):
request_obj = kwargs.pop("request_obj", None)
super().__init__(*args, **kwargs)
if request_obj:
self.org = request_obj.profile.org
def validate_email(self, email):
if email:
if self.instance:
if (
Contact.objects.filter(email__iexact=email, org=self.org)
.exclude(id=self.instance.id)
.exists()
):
raise serializers.ValidationError(
"Contact already exists with this email"
)
else:
if Contact.objects.filter(email__iexact=email, org=self.org).exists():
raise serializers.ValidationError(
"Contact already exists with this email"
)
return email
class Meta:
model = Contact
fields = (
# Core Contact Information
"first_name",
"last_name",
"email",
"phone",
# Professional Information
"organization",
"title",
"department",
# Communication Preferences
"do_not_call",
"linkedin_url",
# Address
"address_line",
"city",
"state",
"postcode",
"country",
# Notes
"description",
# Account
"account",
# Status
"is_active",
)
class ContactDetailEditSwaggerSerializer(serializers.Serializer):
comment = serializers.CharField()
contact_attachment = serializers.FileField()
class ContactCommentEditSwaggerSerializer(serializers.Serializer):
comment = serializers.CharField()