# What this PR does Follow up PR to https://github.com/grafana/oncall/pull/5199 and https://github.com/grafana/oncall/pull/5224, addresses a few issues I noticed on dev while testing the feature ## Checklist - [x] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] Added the relevant release notes label (see labels prefixed w/ `release:`). These labels dictate how your PR will show up in the autogenerated release notes.
47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
from apps.api.serializers.schedule_base import ScheduleBaseSerializer
|
|
from apps.schedules.models import OnCallScheduleWeb
|
|
from apps.schedules.tasks import schedule_notify_about_empty_shifts_in_schedule, schedule_notify_about_gaps_in_schedule
|
|
from apps.slack.models import SlackChannel, SlackUserGroup
|
|
from common.api_helpers.custom_fields import OrganizationFilteredPrimaryKeyRelatedField, TimeZoneField
|
|
|
|
|
|
class ScheduleWebSerializer(ScheduleBaseSerializer):
|
|
time_zone = TimeZoneField(required=False)
|
|
|
|
class Meta:
|
|
model = OnCallScheduleWeb
|
|
fields = [*ScheduleBaseSerializer.Meta.fields, "slack_channel", "time_zone"]
|
|
|
|
def get_enable_web_overrides(self, obj):
|
|
return True
|
|
|
|
|
|
class ScheduleWebCreateSerializer(ScheduleWebSerializer):
|
|
slack_channel_id = OrganizationFilteredPrimaryKeyRelatedField(
|
|
filter_field="slack_team_identity__organizations",
|
|
queryset=SlackChannel.objects,
|
|
required=False,
|
|
allow_null=True,
|
|
write_only=True,
|
|
)
|
|
user_group = OrganizationFilteredPrimaryKeyRelatedField(
|
|
filter_field="slack_team_identity__organizations",
|
|
queryset=SlackUserGroup.objects,
|
|
required=False,
|
|
allow_null=True,
|
|
)
|
|
|
|
class Meta(ScheduleWebSerializer.Meta):
|
|
fields = [*ScheduleBaseSerializer.Meta.fields, "slack_channel_id", "time_zone"]
|
|
|
|
def update(self, instance, validated_data):
|
|
updated_schedule = super().update(instance, validated_data)
|
|
|
|
old_time_zone = instance.time_zone
|
|
updated_time_zone = updated_schedule.time_zone
|
|
if old_time_zone != updated_time_zone:
|
|
updated_schedule.drop_cached_ical()
|
|
updated_schedule.check_gaps_and_empty_shifts_for_next_week()
|
|
schedule_notify_about_empty_shifts_in_schedule.apply_async((instance.pk,))
|
|
schedule_notify_about_gaps_in_schedule.apply_async((instance.pk,))
|
|
return updated_schedule
|