diff --git a/program/views.py b/program/views.py index ebc1038ddddcbcca84ee254a597e4860c23ae6ad..d6ac5b629e9007cbba21a2f4bbbc00fa9b208fc3 100644 --- a/program/views.py +++ b/program/views.py @@ -1186,22 +1186,17 @@ class APIScheduleViewSet(viewsets.ModelViewSet): return Response(resolution, status=status.HTTP_201_CREATED) - def validate_update_request(self): - """Validate that the request has the change_schedule permission and includes `schedule`.""" - - if not self.request.user.has_perm("program.change_schedule"): - return Response(status=status.HTTP_401_UNAUTHORIZED) - - if "schedule" not in self.request.data: - return Response(status=status.HTTP_400_BAD_REQUEST) - def update(self, request, *args, **kwargs): """ Update a schedule, generate timeslots, test for collisions and resolve them including notes. """ - self.validate_update_request() + if not self.request.user.has_perm("program.change_schedule"): + return Response(status=status.HTTP_401_UNAUTHORIZED) + + if "schedule" not in self.request.data: + return Response(status=status.HTTP_400_BAD_REQUEST) schedule = self.get_object() @@ -1217,20 +1212,21 @@ class APIScheduleViewSet(viewsets.ModelViewSet): Partial update a schedule without generating timeslots, testing or resolving collisions. """ - self.validate_update_request() + if not self.request.user.has_perm("program.change_schedule"): + return Response(status=status.HTTP_401_UNAUTHORIZED) # only these fields can be updated without generating conflicts allowed = {"default_playlist_id", "is_repetition", "last_date"} - update_fields = set(request.data.get("schedule").keys()) + update_fields = set(request.data.keys()) if update_fields.issubset(allowed): schedule = self.get_object() - request_schedule = self.request.data.get("schedule") + request_data = self.request.data - if "default_playlist_id" in request_schedule: - default_playlist_id = request_schedule.get("default_playlist_id") + if "default_playlist_id" in request_data: + default_playlist_id = request_data.get("default_playlist_id") - if default_playlist_id == "": + if default_playlist_id == "" or default_playlist_id is None: schedule.default_playlist_id = None else: try: @@ -1240,11 +1236,14 @@ class APIScheduleViewSet(viewsets.ModelViewSet): 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 is_repetition := request_data.get("is_repetition"): + if is_repetition == "true" or is_repetition == "1": + schedule.is_repetition = True + elif is_repetition == "false" or is_repetition == "0": + schedule.is_repetition = False - if "last_date" in request_schedule: - last_date = request_schedule.get("last_date") + if "last_date" in request_data: + last_date = request_data.get("last_date") if last_date == "": schedule.last_date = None