Update oncall shift serializer

This commit is contained in:
Julia 2022-07-26 16:42:30 +03:00
parent 0406d7a1f3
commit c3fc514ad4

View file

@ -30,6 +30,7 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
queryset=User.objects, required=False, allow_null=True
), # todo: filter by team?
)
updated_shift = serializers.CharField(read_only=True, allow_null=True, source="updated_shift.public_primary_key")
class Meta:
model = CustomOnCallShift
@ -49,6 +50,7 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
"by_day",
"source",
"rolling_users",
"updated_shift",
]
extra_kwargs = {
"interval": {"required": False, "allow_null": True},
@ -62,7 +64,6 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
def to_internal_value(self, data):
data["source"] = CustomOnCallShift.SOURCE_WEB
data["week_start"] = CustomOnCallShift.MONDAY
if not data.get("shift_end"):
raise serializers.ValidationError({"shift_end": ["This field is required."]})
@ -100,7 +101,7 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
if end <= start:
raise serializers.ValidationError({"shift_end": ["Incorrect shift end date"]})
def _validate_frequency(self, frequency, event_type, rolling_users, interval, by_day):
def _validate_frequency(self, frequency, event_type, rolling_users, interval, by_day, until):
if frequency is None:
if rolling_users and len(rolling_users) > 1:
raise serializers.ValidationError(
@ -110,6 +111,8 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
raise serializers.ValidationError({"interval": ["Cannot set interval for non-recurrent shifts"]})
if by_day:
raise serializers.ValidationError({"by_day": ["Cannot set days value for non-recurrent shifts"]})
if until:
raise serializers.ValidationError({"until": ["Cannot set 'until' for non-recurrent shifts"]})
else:
if event_type == CustomOnCallShift.TYPE_OVERRIDE:
raise serializers.ValidationError(
@ -122,10 +125,8 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
if rotation_start < shift_start:
raise serializers.ValidationError({"rotation_start": ["Incorrect rotation start date"]})
def _validate_until(self, rotation_start, until, event_type):
def _validate_until(self, rotation_start, until):
if until is not None:
if event_type == CustomOnCallShift.TYPE_OVERRIDE:
raise serializers.ValidationError({"until": ["Cannot set 'until' for shifts with type 'override'"]})
if until < rotation_start:
raise serializers.ValidationError({"until": ["Incorrect rotation end date"]})
@ -149,9 +150,10 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
validated_data.get("rolling_users"),
validated_data.get("interval"),
validated_data.get("by_day"),
validated_data.get("until"),
)
self._validate_rotation_start(validated_data["start"], validated_data["rotation_start"])
self._validate_until(validated_data["rotation_start"], validated_data.get("until"), event_type)
self._validate_until(validated_data["rotation_start"], validated_data.get("until"))
# convert shift_end into internal value and validate
raw_shift_end = self.initial_data["shift_end"]
@ -162,6 +164,8 @@ class OnCallShiftSerializer(EagerLoadingMixin, serializers.ModelSerializer):
if validated_data.get("schedule"):
validated_data["team"] = validated_data["schedule"].team
validated_data["week_start"] = CustomOnCallShift.MONDAY
return validated_data
def create(self, validated_data):