Merge branch 'feature/agenda-back-office' into 'develop'
Feature/agenda back office See merge request gm/gm-backend!202
This commit is contained in:
commit
15df8e405d
|
|
@ -22,7 +22,9 @@ from utils.serializers import (
|
||||||
class AgendaSerializer(ProjectModelSerializer):
|
class AgendaSerializer(ProjectModelSerializer):
|
||||||
start_datetime = serializers.DateTimeField()
|
start_datetime = serializers.DateTimeField()
|
||||||
end_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()
|
event_name_translated = TranslatedField()
|
||||||
content_translated = TranslatedField()
|
content_translated = TranslatedField()
|
||||||
|
|
||||||
|
|
@ -36,7 +38,8 @@ class AgendaSerializer(ProjectModelSerializer):
|
||||||
'end_datetime',
|
'end_datetime',
|
||||||
'address',
|
'address',
|
||||||
'content_translated',
|
'content_translated',
|
||||||
'event_name_translated'
|
'event_name_translated',
|
||||||
|
'address_id',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -180,6 +183,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
||||||
"""News back office base serializer."""
|
"""News back office base serializer."""
|
||||||
is_published = serializers.BooleanField(source='is_publish', read_only=True)
|
is_published = serializers.BooleanField(source='is_publish', read_only=True)
|
||||||
descriptions = serializers.ListField(required=False)
|
descriptions = serializers.ListField(required=False)
|
||||||
|
agenda = AgendaSerializer()
|
||||||
|
|
||||||
class Meta(NewsBaseSerializer.Meta):
|
class Meta(NewsBaseSerializer.Meta):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -198,6 +202,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
||||||
'created',
|
'created',
|
||||||
'modified',
|
'modified',
|
||||||
'descriptions',
|
'descriptions',
|
||||||
|
'agenda'
|
||||||
)
|
)
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'created': {'read_only': True},
|
'created': {'read_only': True},
|
||||||
|
|
@ -228,6 +233,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
||||||
for locale in locales:
|
for locale in locales:
|
||||||
if not attrs[key].get(locale):
|
if not attrs[key].get(locale):
|
||||||
attrs[key][locale] = getattr(instance, key).get(locale)
|
attrs[key][locale] = getattr(instance, key).get(locale)
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
|
@ -245,10 +251,25 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
||||||
user = request.user
|
user = request.user
|
||||||
validated_data['created_by'] = 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):
|
def update(self, instance, validated_data):
|
||||||
slugs = validated_data.get('slugs')
|
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:
|
if slugs:
|
||||||
slugs_list = list(map(lambda x: x.lower(), slugs.values()))
|
slugs_list = list(map(lambda x: x.lower(), slugs.values()))
|
||||||
slugs_set = set(slugs_list)
|
slugs_set = set(slugs_list)
|
||||||
|
|
@ -256,6 +277,29 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
||||||
slugs__values__contains=list(slugs.values())
|
slugs__values__contains=list(slugs.values())
|
||||||
).exists() or len(slugs_list) != len(slugs_set):
|
).exists() or len(slugs_list) != len(slugs_set):
|
||||||
raise serializers.ValidationError({'slugs': _('Slug should be unique')})
|
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)
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user