email cascade establishment
This commit is contained in:
parent
65a6feb4b2
commit
193f1655e4
|
|
@ -514,6 +514,9 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
to_attr='main_image')
|
to_attr='main_image')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def with_contacts(self):
|
||||||
|
return self.prefetch_related('emails', 'phones')
|
||||||
|
|
||||||
|
|
||||||
class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
||||||
TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin):
|
TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin):
|
||||||
|
|
@ -817,6 +820,11 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
||||||
if self.phones:
|
if self.phones:
|
||||||
return [phone.phone.as_e164 for phone in self.phones.all()]
|
return [phone.phone.as_e164 for phone in self.phones.all()]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def contact_emails(self):
|
||||||
|
if self.phones:
|
||||||
|
return [email.email for email in self.emails.all()]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def establishment_subtype_labels(self):
|
def establishment_subtype_labels(self):
|
||||||
if self.establishment_subtypes:
|
if self.establishment_subtypes:
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from account.serializers.common import UserShortSerializer
|
from account.serializers.common import UserShortSerializer
|
||||||
from establishment import models, serializers as model_serializers
|
from establishment import models, serializers as model_serializers
|
||||||
from establishment.models import ContactPhone, EstablishmentEmployee
|
from establishment.models import ContactPhone, EstablishmentEmployee, ContactEmail
|
||||||
from gallery.models import Image
|
from gallery.models import Image
|
||||||
from location.models import Address
|
from location.models import Address
|
||||||
from location.serializers import AddressDetailSerializer, TranslatedField
|
from location.serializers import AddressDetailSerializer, TranslatedField
|
||||||
|
|
@ -26,6 +26,16 @@ def phones_handler(phones_list, establishment):
|
||||||
ContactPhone.objects.create(establishment=establishment, phone=new_phone)
|
ContactPhone.objects.create(establishment=establishment, phone=new_phone)
|
||||||
|
|
||||||
|
|
||||||
|
def emails_handler(emails_list, establishment):
|
||||||
|
"""
|
||||||
|
create or update emails for establishment
|
||||||
|
"""
|
||||||
|
ContactEmail.objects.filter(establishment=establishment).delete()
|
||||||
|
|
||||||
|
for new_email in emails_list:
|
||||||
|
ContactEmail.objects.create(establishment=establishment, email=new_email)
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSerializer):
|
class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSerializer):
|
||||||
"""Establishment create serializer"""
|
"""Establishment create serializer"""
|
||||||
|
|
||||||
|
|
@ -39,8 +49,6 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
|
||||||
queryset=models.Address.objects.all(),
|
queryset=models.Address.objects.all(),
|
||||||
write_only=True
|
write_only=True
|
||||||
)
|
)
|
||||||
emails = model_serializers.ContactEmailsSerializer(read_only=True,
|
|
||||||
many=True, )
|
|
||||||
socials = model_serializers.SocialNetworkRelatedSerializers(read_only=True,
|
socials = model_serializers.SocialNetworkRelatedSerializers(read_only=True,
|
||||||
many=True, )
|
many=True, )
|
||||||
type = model_serializers.EstablishmentTypeBaseSerializer(source='establishment_type',
|
type = model_serializers.EstablishmentTypeBaseSerializer(source='establishment_type',
|
||||||
|
|
@ -55,6 +63,13 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
|
||||||
child=serializers.CharField(max_length=128),
|
child=serializers.CharField(max_length=128),
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
|
emails = serializers.ListField(
|
||||||
|
source='contact_emails',
|
||||||
|
allow_null=True,
|
||||||
|
allow_empty=True,
|
||||||
|
child=serializers.CharField(max_length=128),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Establishment
|
model = models.Establishment
|
||||||
|
|
@ -87,8 +102,13 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
|
||||||
if 'contact_phones' in validated_data:
|
if 'contact_phones' in validated_data:
|
||||||
phones_list = validated_data.pop('contact_phones')
|
phones_list = validated_data.pop('contact_phones')
|
||||||
|
|
||||||
|
emails_list = []
|
||||||
|
if 'contact_emails' in validated_data:
|
||||||
|
emails_list = validated_data.pop('contact_emails')
|
||||||
|
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
phones_handler(phones_list, instance)
|
phones_handler(phones_list, instance)
|
||||||
|
emails_handler(emails_list, instance)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -113,8 +133,13 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
|
||||||
queryset=models.EstablishmentType.objects.all(), write_only=True
|
queryset=models.EstablishmentType.objects.all(), write_only=True
|
||||||
)
|
)
|
||||||
address = AddressDetailSerializer()
|
address = AddressDetailSerializer()
|
||||||
emails = model_serializers.ContactEmailsSerializer(read_only=False,
|
emails = serializers.ListField(
|
||||||
many=True, )
|
source='contact_emails',
|
||||||
|
allow_null=True,
|
||||||
|
allow_empty=True,
|
||||||
|
child=serializers.CharField(max_length=128),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
socials = model_serializers.SocialNetworkRelatedSerializers(read_only=False,
|
socials = model_serializers.SocialNetworkRelatedSerializers(read_only=False,
|
||||||
many=True, )
|
many=True, )
|
||||||
type = model_serializers.EstablishmentTypeBaseSerializer(source='establishment_type')
|
type = model_serializers.EstablishmentTypeBaseSerializer(source='establishment_type')
|
||||||
|
|
@ -152,8 +177,13 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
|
||||||
if 'contact_phones' in validated_data:
|
if 'contact_phones' in validated_data:
|
||||||
phones_list = validated_data.pop('contact_phones')
|
phones_list = validated_data.pop('contact_phones')
|
||||||
|
|
||||||
|
emails_list = []
|
||||||
|
if 'contact_emails' in validated_data:
|
||||||
|
emails_list = validated_data.pop('contact_emails')
|
||||||
|
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
phones_handler(phones_list, instance)
|
phones_handler(phones_list, instance)
|
||||||
|
emails_handler(emails_list, instance)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class EstablishmentMixinViews:
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
"""Overrided method 'get_queryset'."""
|
"""Overrided method 'get_queryset'."""
|
||||||
return models.Establishment.objects.with_base_related()
|
return models.Establishment.objects.with_base_related().with_contacts()
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAPIView):
|
class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAPIView):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user