2022-07-04 17:51:56 -03:00
|
|
|
from apps.api.serializers.schedule_base import ScheduleBaseSerializer
|
|
|
|
|
from apps.schedules.models import OnCallScheduleWeb
|
2025-01-16 09:19:16 -03:00
|
|
|
from apps.schedules.tasks import (
|
|
|
|
|
check_gaps_and_empty_shifts_in_schedule,
|
|
|
|
|
schedule_notify_about_empty_shifts_in_schedule,
|
|
|
|
|
schedule_notify_about_gaps_in_schedule,
|
|
|
|
|
)
|
2022-07-04 17:51:56 -03:00
|
|
|
from apps.slack.models import SlackChannel, SlackUserGroup
|
2023-07-21 21:35:19 +02:00
|
|
|
from common.api_helpers.custom_fields import OrganizationFilteredPrimaryKeyRelatedField, TimeZoneField
|
2022-07-04 17:51:56 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ScheduleWebSerializer(ScheduleBaseSerializer):
|
2022-12-01 14:13:39 +01:00
|
|
|
time_zone = TimeZoneField(required=False)
|
2022-07-04 17:51:56 -03:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = OnCallScheduleWeb
|
|
|
|
|
fields = [*ScheduleBaseSerializer.Meta.fields, "slack_channel", "time_zone"]
|
|
|
|
|
|
2023-03-10 13:21:50 -03:00
|
|
|
def get_enable_web_overrides(self, obj):
|
|
|
|
|
return True
|
|
|
|
|
|
2022-07-04 17:51:56 -03:00
|
|
|
|
|
|
|
|
class ScheduleWebCreateSerializer(ScheduleWebSerializer):
|
|
|
|
|
slack_channel_id = OrganizationFilteredPrimaryKeyRelatedField(
|
|
|
|
|
filter_field="slack_team_identity__organizations",
|
|
|
|
|
queryset=SlackChannel.objects,
|
|
|
|
|
required=False,
|
|
|
|
|
allow_null=True,
|
2024-11-05 04:51:04 -05:00
|
|
|
write_only=True,
|
2022-07-04 17:51:56 -03:00
|
|
|
)
|
|
|
|
|
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()
|
2025-01-16 09:19:16 -03:00
|
|
|
check_gaps_and_empty_shifts_in_schedule.apply_async((instance.pk,))
|
2022-07-04 17:51:56 -03:00
|
|
|
schedule_notify_about_empty_shifts_in_schedule.apply_async((instance.pk,))
|
|
|
|
|
schedule_notify_about_gaps_in_schedule.apply_async((instance.pk,))
|
|
|
|
|
return updated_schedule
|