Ejemplo n.º 1
0
    def save(self, **kwargs):
        if not self.instance:
            return super().save(**kwargs)

        updated_message = self.validated_data.pop('updated_message', None)

        activity_type = self.instance
        changed_data = find_changed(activity_type, self.validated_data)
        self._validated_data = changed_data
        skip_update = len(self.validated_data.keys()) == 0
        if skip_update:
            return self.instance

        before_data = ActivityTypeHistorySerializer(activity_type).data
        activity_type = super().save(**kwargs)
        after_data = ActivityTypeHistorySerializer(activity_type).data

        if before_data != after_data:
            History.objects.create(
                typus=HistoryTypus.ACTIVITY_TYPE_MODIFY,
                group=activity_type.group,
                users=[self.context['request'].user],
                payload={k: self.initial_data.get(k)
                         for k in changed_data.keys()},
                before=before_data,
                after=after_data,
                message=updated_message,
            )
        return activity_type
Ejemplo n.º 2
0
    def save(self, **kwargs):
        pickupdate = self.instance
        changed_data = find_changed(pickupdate, self.validated_data)
        self._validated_data = changed_data
        skip_update = len(self.validated_data.keys()) == 0
        if skip_update:
            return self.instance

        before_data = PickupDateHistorySerializer(pickupdate).data
        pickupdate = super().save(**kwargs)
        after_data = PickupDateHistorySerializer(pickupdate).data

        if before_data != after_data:
            typus_list = []
            if 'is_disabled' in changed_data:
                if changed_data['is_disabled']:
                    typus_list.append(HistoryTypus.PICKUP_DISABLE)
                    stats.pickup_disabled(pickupdate)
                else:
                    typus_list.append(HistoryTypus.PICKUP_ENABLE)
                    stats.pickup_enabled(pickupdate)

            if len(set(changed_data.keys()).difference(['is_disabled'])) > 0:
                typus_list.append(HistoryTypus.PICKUP_MODIFY)

            for typus in typus_list:
                History.objects.create(
                    typus=typus,
                    group=pickupdate.place.group,
                    place=pickupdate.place,
                    pickup=pickupdate,
                    users=[self.context['request'].user],
                    payload={
                        k: self.initial_data.get(k)
                        for k in changed_data.keys()
                    },
                    before=before_data,
                    after=after_data,
                )
        pickupdate.place.group.refresh_active_status()

        return pickupdate
Ejemplo n.º 3
0
    def save(self, **kwargs):
        activity = self.instance
        changed_data = find_changed(activity, self.validated_data)
        self._validated_data = changed_data
        skip_update = len(self.validated_data.keys()) == 0
        if skip_update:
            return self.instance

        before_data = ActivityHistorySerializer(activity).data
        activity = super().save(**kwargs)
        after_data = ActivityHistorySerializer(activity).data

        if before_data != after_data:
            typus_list = []
            if 'is_disabled' in changed_data:
                if changed_data['is_disabled']:
                    typus_list.append(HistoryTypus.ACTIVITY_DISABLE)
                    stats.activity_disabled(activity)
                else:
                    typus_list.append(HistoryTypus.ACTIVITY_ENABLE)
                    stats.activity_enabled(activity)

            if len(set(changed_data.keys()).difference(['is_disabled'])) > 0:
                typus_list.append(HistoryTypus.ACTIVITY_MODIFY)

            for typus in typus_list:
                History.objects.create(
                    typus=typus,
                    group=activity.place.group,
                    place=activity.place,
                    activity=activity,
                    users=[self.context['request'].user],
                    payload={
                        k: self.initial_data.get(k)
                        for k in changed_data.keys()
                    },
                    before=before_data,
                    after=after_data,
                )
        activity.place.group.refresh_active_status()

        return activity
Ejemplo n.º 4
0
    def update(self, group, validated_data):
        if group.is_playground():
            # Prevent editing of public fields
            # Those fields get overridden with a translation message
            for field in ['name', 'public_description']:
                if field in validated_data:
                    del validated_data[field]

        if 'photo' in validated_data:
            group.delete_photo()

        changed_data = find_changed(group, validated_data)
        before_data = GroupHistorySerializer(group).data
        group = super().update(group, validated_data)
        after_data = GroupHistorySerializer(group).data

        if before_data != after_data:
            user = self.context['request'].user
            History.objects.create(
                typus=HistoryTypus.GROUP_MODIFY,
                group=group,
                users=[user],
                payload={
                    k: self.initial_data.get(k)
                    for k in changed_data.keys()
                },
                before=before_data,
                after=after_data,
            )

        if 'photo' in validated_data:
            deleted = validated_data['photo'] is None
            History.objects.create(
                typus=HistoryTypus.GROUP_DELETE_PHOTO
                if deleted else HistoryTypus.GROUP_CHANGE_PHOTO,
                group=group,
                users=[self.context['request'].user],
            )
        return group
Ejemplo n.º 5
0
 def save(self, **kwargs):
     self._validated_data = find_changed(self.instance, self.validated_data)
     skip_update = len(self.validated_data.keys()) == 0
     if skip_update:
         return self.instance
     return super().save(**kwargs)