diff --git a/backend/api/schedule/types/schedule_item.py b/backend/api/schedule/types/schedule_item.py index b9c638ab27..100c0d02e0 100644 --- a/backend/api/schedule/types/schedule_item.py +++ b/backend/api/schedule/types/schedule_item.py @@ -61,6 +61,13 @@ def user_has_spot(self, info) -> bool: user_id = info.context.request.user.id return self.attendees.filter(user_id=user_id).exists() + @strawberry.field + def user_is_talk_manager(self, info: Info) -> bool: + if not (user_id := info.context.request.user.id): + return False + + return self.talk_manager_id == user_id + @strawberry.field def speakers(self, info: Info) -> list[ScheduleItemUser]: speakers = [] diff --git a/backend/schedule/admin.py b/backend/schedule/admin.py index 993a6612b7..13bb70a33b 100644 --- a/backend/schedule/admin.py +++ b/backend/schedule/admin.py @@ -314,6 +314,7 @@ class ScheduleItemAdmin(ConferencePermissionMixin, admin.ModelAdmin): "language", "slot", "speakers_names", + "talk_manager", "type", "submission", ) @@ -339,6 +340,7 @@ class ScheduleItemAdmin(ConferencePermissionMixin, admin.ModelAdmin): "keynote", "link_to", "slido_url", + "talk_manager", ) }, ), @@ -377,6 +379,7 @@ class ScheduleItemAdmin(ConferencePermissionMixin, admin.ModelAdmin): "submission__speaker__full_name", "submission__speaker__email", ) + autocomplete_fields = ("talk_manager",) inlines = [ ScheduleItemAdditionalSpeakerInline, ScheduleItemAttendeeInline, diff --git a/backend/schedule/migrations/0055_scheduleitem_talk_manager.py b/backend/schedule/migrations/0055_scheduleitem_talk_manager.py new file mode 100644 index 0000000000..75fad8f617 --- /dev/null +++ b/backend/schedule/migrations/0055_scheduleitem_talk_manager.py @@ -0,0 +1,21 @@ +# Generated by Django 5.1.4 on 2025-05-09 15:56 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('schedule', '0054_scheduleitem_link_to_alter_scheduleitem_type'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='scheduleitem', + name='talk_manager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='talk manager'), + ), + ] diff --git a/backend/schedule/models.py b/backend/schedule/models.py index 514f29e8ce..22d169d033 100644 --- a/backend/schedule/models.py +++ b/backend/schedule/models.py @@ -232,6 +232,14 @@ class ScheduleItem(TimeStampedModel): ) link_to = models.CharField(_("link to"), blank=True, default="", max_length=1024) + talk_manager = models.ForeignKey( + "users.User", + on_delete=models.SET_NULL, + null=True, + blank=True, + verbose_name=_("talk manager"), + ) + image = models.ImageField( _("image"), null=True, blank=True, upload_to="schedule_items" )