diff --git a/program/views.py b/program/views.py index b4931b20b89a9af795e9ae375d8dc4a0b87de120..e9d1d4b3ff61b792a655df3f6b28379cfeaa9129 100644 --- a/program/views.py +++ b/program/views.py @@ -1142,47 +1142,48 @@ class APIScheduleViewSet(viewsets.ModelViewSet): if update_fields.issubset(allowed): schedule = self.get_object() + request_schedule = self.request.data.get("schedule") - default_playlist_id = request.data.get("schedule").get("default_playlist_id") - - if default_playlist_id == "": - # "clear" the default_playlist_id if the field has no value - schedule.default_playlist_id = None - else: - try: - schedule.default_playlist_id = int(default_playlist_id) - except ValueError as e: - data = {"last_date": e.args[0]} - - return Response(data, status=status.HTTP_400_BAD_REQUEST) - - is_repetition = request.data.get("schedule").get("is_repetition") - if is_repetition == "true" or is_repetition == "1": - schedule.is_repetition = True - if is_repetition == "false" or is_repetition == "0": - schedule.is_repetition = False - - last_date = request.data.get("schedule").get("last_date") - if last_date == "": - # "clear" the last_date if the field has no value - schedule.last_date = None - else: - try: - last_date = date.fromisoformat(last_date) - except ValueError as e: - data = {"last_date": e.args[0]} - - return Response(data, status=status.HTTP_400_BAD_REQUEST) - if schedule.last_date is None or schedule.last_date > last_date: - schedule.last_date = last_date - - last_end = timezone.make_aware(datetime.combine(last_date, schedule.end_time)) - - TimeSlot.objects.filter(schedule=schedule, start__gt=last_end).delete() + if "default_playlist_id" in request_schedule: + default_playlist_id = request_schedule.get("default_playlist_id") + + if default_playlist_id == "": + schedule.default_playlist_id = None else: - data = {"last_date": "This field cannot be updated to this date"} + try: + schedule.default_playlist_id = int(default_playlist_id) + except ValueError as e: + data = {"last_date": e.args[0]} + + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + if "is_repetition" in request_schedule: + schedule.is_repetition = bool(request_schedule.get("is_repetition")) + + if "last_date" in request_schedule: + last_date = request_schedule.get("last_date") + + if last_date == "": + schedule.last_date = None + else: + try: + last_date = date.fromisoformat(last_date) + except ValueError as e: + data = {"last_date": e.args[0]} + + return Response(data, status=status.HTTP_400_BAD_REQUEST) + if schedule.last_date is None or schedule.last_date > last_date: + schedule.last_date = last_date + + last_end = timezone.make_aware( + datetime.combine(last_date, schedule.end_time) + ) + + TimeSlot.objects.filter(schedule=schedule, start__gt=last_end).delete() + else: + data = {"last_date": "This field cannot be updated to this date"} - return Response(data, status=status.HTTP_400_BAD_REQUEST) + return Response(data, status=status.HTTP_400_BAD_REQUEST) schedule.save() serializer = ScheduleSerializer(schedule)