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):
|
||||
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)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user