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