3131from schedule .models import ScheduleItem
3232from submissions .models import Submission
3333from .models import Grant , GrantConfirmPendingStatusProxy
34- from django .db .models import Exists , OuterRef , F
34+ from django .db .models import Exists , OuterRef
3535from pretix import user_has_admission_ticket
3636
3737from django .contrib .admin import SimpleListFilter
3838from participants .models import Participant
3939from django .urls import reverse
4040from django .utils .safestring import mark_safe
41+ from visa .models import InvitationLetterRequest
4142
4243logger = logging .getLogger (__name__ )
4344
@@ -402,6 +403,7 @@ class GrantAdmin(ExportMixin, ConferencePermissionMixin, admin.ModelAdmin):
402403 "country" ,
403404 "is_proposed_speaker" ,
404405 "is_confirmed_speaker" ,
406+ "has_sent_invitation_letter_request" ,
405407 "emoji_gender" ,
406408 "conference" ,
407409 "status" ,
@@ -584,6 +586,12 @@ def user_has_ticket(self, obj: Grant) -> bool:
584586 def has_voucher (self , obj : Grant ) -> bool :
585587 return obj .has_voucher
586588
589+ @admin .display (description = "📧" )
590+ def has_sent_invitation_letter_request (self , obj : Grant ) -> bool :
591+ if obj .has_invitation_letter_request :
592+ return "📧"
593+ return ""
594+
587595 def get_queryset (self , request ):
588596 qs = (
589597 super ()
@@ -608,6 +616,12 @@ def get_queryset(self, request):
608616 user_id = OuterRef ("user_id" ),
609617 )
610618 ),
619+ has_invitation_letter_request = Exists (
620+ InvitationLetterRequest .objects .filter (
621+ conference_id = OuterRef ("conference_id" ),
622+ requester_id = OuterRef ("user_id" ),
623+ )
624+ ),
611625 )
612626 )
613627
0 commit comments