Merge branch 'feature/agenda-back-office' into 'develop'

Feature/agenda back office

See merge request gm/gm-backend!202
This commit is contained in:
Олег Хаятов 2020-01-17 14:23:44 +00:00
commit 15df8e405d

View File

@ -22,7 +22,9 @@ from utils.serializers import (
class AgendaSerializer(ProjectModelSerializer):
start_datetime = serializers.DateTimeField()
end_datetime = serializers.DateTimeField()
address = AddressBaseSerializer()
address = AddressBaseSerializer(read_only=True)
address_id = serializers.PrimaryKeyRelatedField(write_only=True, queryset=location_models.Address.objects.all(),
source='address')
event_name_translated = TranslatedField()
content_translated = TranslatedField()
@ -36,7 +38,8 @@ class AgendaSerializer(ProjectModelSerializer):
'end_datetime',
'address',
'content_translated',
'event_name_translated'
'event_name_translated',
'address_id',
)
@ -180,6 +183,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
"""News back office base serializer."""
is_published = serializers.BooleanField(source='is_publish', read_only=True)
descriptions = serializers.ListField(required=False)
agenda = AgendaSerializer()
class Meta(NewsBaseSerializer.Meta):
"""Meta class."""
@ -198,6 +202,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
'created',
'modified',
'descriptions',
'agenda'
)
extra_kwargs = {
'created': {'read_only': True},
@ -228,6 +233,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
for locale in locales:
if not attrs[key].get(locale):
attrs[key][locale] = getattr(instance, key).get(locale)
return attrs
def create(self, validated_data):
@ -245,10 +251,25 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
user = request.user
validated_data['created_by'] = user
return super().create(validated_data)
agenda_data = validated_data.get('agenda')
agenda = None
if agenda_data is not None:
agenda_data['address_id'] = agenda_data.pop('address').pk
agenda_serializer = AgendaSerializer(data=agenda_data)
agenda_serializer.is_valid(raise_exception=True)
agenda = agenda_serializer.save()
instance = super().create(validated_data)
instance.agenda = agenda
instance.save()
return instance
def update(self, instance, validated_data):
slugs = validated_data.get('slugs')
slugs_list = list(map(lambda x: x.lower(), slugs.values() if slugs else ()))
slugs_set = set(slugs_list)
if slugs:
slugs_list = list(map(lambda x: x.lower(), slugs.values()))
slugs_set = set(slugs_list)
@ -256,6 +277,29 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
slugs__values__contains=list(slugs.values())
).exists() or len(slugs_list) != len(slugs_set):
raise serializers.ValidationError({'slugs': _('Slug should be unique')})
agenda_data = validated_data.get('agenda')
agenda = instance.agenda
if agenda is None and agenda_data is not None:
agenda_data['address_id'] = agenda_data.pop('address').pk
agenda_serializer = AgendaSerializer(data=agenda_data)
agenda_serializer.is_valid(raise_exception=True)
agenda_serializer.save()
elif agenda_data is not None:
agenda.start_datetime = agenda_data.pop(
'start_datetime') if 'start_datetime' in agenda_data else agenda.start_datetime
agenda.end_datetime = agenda_data.pop(
'end_datetime') if 'end_datetime' in agenda_data else agenda.end_datetime
agenda.address = agenda_data.pop(
'address') if 'address' in agenda_data else agenda.address
agenda.event_name = agenda_data.pop(
'event_name') if 'event_time' in agenda_data else agenda.event_name
agenda.content = agenda_data.pop(
'content') if 'content' in agenda_data else agenda.content
agenda.save()
return super().update(instance, validated_data)