phone_list field create and update

This commit is contained in:
alex 2020-01-13 15:44:51 +03:00
parent f93337def3
commit 605a3e12e1

View File

@ -1,16 +1,27 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from account.serializers.common import UserShortSerializer
from establishment import models from establishment import models
from establishment import serializers as model_serializers from establishment import serializers as model_serializers
from establishment.models import ContactPhone
from gallery.models import Image
from location.models import Address
from location.serializers import AddressDetailSerializer, TranslatedField from location.serializers import AddressDetailSerializer, TranslatedField
from main.models import Currency from main.models import Currency
from location.models import Address
from main.serializers import AwardSerializer from main.serializers import AwardSerializer
from utils.decorators import with_base_attributes from utils.decorators import with_base_attributes
from utils.serializers import TimeZoneChoiceField from utils.serializers import TimeZoneChoiceField
from gallery.models import Image
from django.utils.translation import gettext_lazy as _
from account.serializers.common import UserShortSerializer def phones_handler(phones_list, establishment):
"""
create or update phones for establishment 35016 string
"""
ContactPhone.objects.filter(establishment=establishment).delete()
for new_phone in phones_list:
ContactPhone.objects.create(establishment=establishment, phone=new_phone)
class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSerializer): class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSerializer):
@ -37,6 +48,11 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
address_id = serializers.PrimaryKeyRelatedField(write_only=True, source='address', address_id = serializers.PrimaryKeyRelatedField(write_only=True, source='address',
queryset=Address.objects.all()) queryset=Address.objects.all())
tz = TimeZoneChoiceField() tz = TimeZoneChoiceField()
phones_list = serializers.ListField(
child=serializers.CharField(max_length=20),
allow_empty=True,
write_only=True,
)
class Meta: class Meta:
model = models.Establishment model = models.Establishment
@ -62,8 +78,15 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
'tags', 'tags',
'tz', 'tz',
'address_id', 'address_id',
'phones_list',
] ]
def create(self, validated_data):
phones_list = validated_data.pop('phones_list')
instance = super().create(validated_data)
phones_handler(phones_list, instance)
return instance
class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer): class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
"""Establishment create serializer""" """Establishment create serializer"""
@ -101,6 +124,12 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
'tags', 'tags',
] ]
def update(self, instance, validated_data):
phones_list = validated_data.pop('phones_list')
instance = super().update(instance, validated_data)
phones_handler(phones_list, instance)
return instance
class SocialChoiceSerializers(serializers.ModelSerializer): class SocialChoiceSerializers(serializers.ModelSerializer):
"""SocialChoice serializers.""" """SocialChoice serializers."""
@ -166,7 +195,6 @@ class ContactEmailBackSerializers(model_serializers.PlateSerializer):
] ]
class PositionBackSerializer(serializers.ModelSerializer): class PositionBackSerializer(serializers.ModelSerializer):
"""Position Back serializer.""" """Position Back serializer."""
@ -181,6 +209,7 @@ class PositionBackSerializer(serializers.ModelSerializer):
'index_name', 'index_name',
] ]
# TODO: test decorator # TODO: test decorator
@with_base_attributes @with_base_attributes
class EmployeeBackSerializers(serializers.ModelSerializer): class EmployeeBackSerializers(serializers.ModelSerializer):
@ -190,24 +219,22 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
establishment = serializers.SerializerMethodField() establishment = serializers.SerializerMethodField()
awards = AwardSerializer(many=True, read_only=True) awards = AwardSerializer(many=True, read_only=True)
def get_public_mark(self, obj): def get_public_mark(self, obj):
"""Get last list actual public_mark""" """Get last list actual public_mark"""
qs = obj.establishmentemployee_set.actual().order_by('-from_date')\ qs = obj.establishmentemployee_set.actual().order_by('-from_date') \
.values('establishment__public_mark').first() .values('establishment__public_mark').first()
return qs['establishment__public_mark'] if qs else None return qs['establishment__public_mark'] if qs else None
def get_positions(self, obj): def get_positions(self, obj):
"""Get last list actual positions""" """Get last list actual positions"""
est_id = obj.establishmentemployee_set.actual().\ est_id = obj.establishmentemployee_set.actual(). \
order_by('-from_date').first() order_by('-from_date').first()
if not est_id: if not est_id:
return None return None
qs = obj.establishmentemployee_set.actual()\ qs = obj.establishmentemployee_set.actual() \
.filter(establishment_id=est_id.establishment_id)\ .filter(establishment_id=est_id.establishment_id) \
.prefetch_related('position').values('position') .prefetch_related('position').values('position')
positions = models.Position.objects.filter(id__in=[q['position'] for q in qs]) positions = models.Position.objects.filter(id__in=[q['position'] for q in qs])
@ -216,7 +243,7 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
def get_establishment(self, obj): def get_establishment(self, obj):
"""Get last actual establishment""" """Get last actual establishment"""
est = obj.establishmentemployee_set.actual().order_by('-from_date')\ est = obj.establishmentemployee_set.actual().order_by('-from_date') \
.first() .first()
if not est: if not est:
@ -380,6 +407,7 @@ class EstablishmentNoteListCreateSerializer(EstablishmentNoteBaseSerializer):
class EstablishmentAdminListSerializer(UserShortSerializer): class EstablishmentAdminListSerializer(UserShortSerializer):
"""Establishment admin serializer.""" """Establishment admin serializer."""
class Meta: class Meta:
model = UserShortSerializer.Meta.model model = UserShortSerializer.Meta.model
fields = [ fields = [