127 lines
3.6 KiB
Python
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()
|