diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 32bf19db6f..94b4bfb6aa 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -573,6 +573,11 @@ class EventOrderExpertFilterForm(EventOrderFilterForm): label=_('Sales channel'), required=False, ) + has_checkin = forms.NullBooleanField( + required=False, + widget=FilterNullBooleanSelect, + label=_('At least one ticket with check-in'), + ) checkin_attention = forms.NullBooleanField( required=False, widget=FilterNullBooleanSelect, @@ -745,6 +750,12 @@ class EventOrderExpertFilterForm(EventOrderFilterForm): qs = qs.filter( all_positions__country=fdata.get('attendee_address_country') ).distinct() + if fdata.get('has_checkin') is not None: + qs = qs.annotate( + has_checkin=Exists( + Checkin.all.filter(position__order_id=OuterRef('pk')) + ) + ).filter(has_checkin=fdata['has_checkin']) if fdata.get('ticket_secret'): qs = qs.filter( all_positions__secret__icontains=fdata.get('ticket_secret')