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 account.serializers.common import UserShortSerializer
from establishment import models
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 main.models import Currency
from location.models import Address
from main.serializers import AwardSerializer
from utils.decorators import with_base_attributes
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):
@ -37,6 +48,11 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
address_id = serializers.PrimaryKeyRelatedField(write_only=True, source='address',
queryset=Address.objects.all())
tz = TimeZoneChoiceField()
phones_list = serializers.ListField(
child=serializers.CharField(max_length=20),
allow_empty=True,
write_only=True,
)
class Meta:
model = models.Establishment
@ -62,8 +78,15 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
'tags',
'tz',
'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):
"""Establishment create serializer"""
@ -101,6 +124,12 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
'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):
"""SocialChoice serializers."""
@ -166,7 +195,6 @@ class ContactEmailBackSerializers(model_serializers.PlateSerializer):
]
class PositionBackSerializer(serializers.ModelSerializer):
"""Position Back serializer."""
@ -181,6 +209,7 @@ class PositionBackSerializer(serializers.ModelSerializer):
'index_name',
]
# TODO: test decorator
@with_base_attributes
class EmployeeBackSerializers(serializers.ModelSerializer):
@ -190,24 +219,22 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
establishment = serializers.SerializerMethodField()
awards = AwardSerializer(many=True, read_only=True)
def get_public_mark(self, obj):
"""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()
return qs['establishment__public_mark'] if qs else None
def get_positions(self, obj):
"""Get last list actual positions"""
est_id = obj.establishmentemployee_set.actual().\
est_id = obj.establishmentemployee_set.actual(). \
order_by('-from_date').first()
if not est_id:
return None
qs = obj.establishmentemployee_set.actual()\
.filter(establishment_id=est_id.establishment_id)\
qs = obj.establishmentemployee_set.actual() \
.filter(establishment_id=est_id.establishment_id) \
.prefetch_related('position').values('position')
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):
"""Get last actual establishment"""
est = obj.establishmentemployee_set.actual().order_by('-from_date')\
est = obj.establishmentemployee_set.actual().order_by('-from_date') \
.first()
if not est:
@ -380,6 +407,7 @@ class EstablishmentNoteListCreateSerializer(EstablishmentNoteBaseSerializer):
class EstablishmentAdminListSerializer(UserShortSerializer):
"""Establishment admin serializer."""
class Meta:
model = UserShortSerializer.Meta.model
fields = [