diff --git a/backend/submissions/admin.py b/backend/submissions/admin.py index 5e6773820c..8030b95354 100644 --- a/backend/submissions/admin.py +++ b/backend/submissions/admin.py @@ -222,6 +222,7 @@ class SubmissionAdmin(ExportMixin, ConferencePermissionMixin, admin.ModelAdmin): "speaker_display_name", "type", "status", + "is_scheduled", "conference", "open_submission", "inline_tags", @@ -306,6 +307,16 @@ def speaker_display_name(self, obj): def inline_tags(self, obj): return ", ".join([tag.name for tag in obj.tags.all()]) + @admin.display( + description="Scheduled", + ) + def is_scheduled(self, obj): + schedule_items = obj.schedule_items.all() + if not schedule_items: + return "-" + times = [item.start.strftime("%Y-%m-%d %H:%M") for item in schedule_items] + return ", ".join(times) + @admin.display( description="Open", ) @@ -318,7 +329,9 @@ def open_submission(self, obj): # pragma: no cover ) def get_queryset(self, request): - return super().get_queryset(request).prefetch_related("tags") + return super().get_queryset(request).prefetch_related( + "tags", "schedule_items__slot__day" + ) class Media: js = ["admin/js/jquery.init.js"] diff --git a/backend/submissions/tests/test_admin.py b/backend/submissions/tests/test_admin.py index 12f8577a04..bb7af3f5dc 100644 --- a/backend/submissions/tests/test_admin.py +++ b/backend/submissions/tests/test_admin.py @@ -3,7 +3,9 @@ from notifications.tests.factories import EmailTemplateFactory from notifications.models import EmailTemplateIdentifier, SentEmail import pytest +from schedule.tests.factories import ScheduleItemFactory from submissions.admin import ( + SubmissionAdmin, apply_and_notify_status_change, send_proposal_in_waiting_list_email_action, send_proposal_rejected_email_action, @@ -14,6 +16,26 @@ pytestmark = pytest.mark.django_db +def test_is_scheduled_returns_datetime_when_submission_has_schedule_items(): + submission = SubmissionFactory() + schedule_item = ScheduleItemFactory( + submission=submission, + conference=submission.conference, + type="submission", + ) + + admin = SubmissionAdmin(model=Submission, admin_site=None) + expected_time = schedule_item.start.strftime("%Y-%m-%d %H:%M") + assert admin.is_scheduled(submission) == expected_time + + +def test_is_scheduled_returns_dash_when_submission_has_no_schedule_items(): + submission = SubmissionFactory() + + admin = SubmissionAdmin(model=Submission, admin_site=None) + assert admin.is_scheduled(submission) == "-" + + def test_send_proposal_rejected_email_action(rf, mocker): mock_task = mocker.patch("submissions.admin.send_proposal_rejected_email") mocker.patch("submissions.admin.messages")