From c8f990030beb70b8bf01ec5c72f8d843d3bf4b88 Mon Sep 17 00:00:00 2001 From: Kara Engelhardt Date: Wed, 9 Sep 2026 15:14:50 +0200 Subject: [PATCH] sendmail: fix quadratic checkin query --- src/pretix/plugins/sendmail/views.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py index 792e269e38..cf8fad3a70 100644 --- a/src/pretix/plugins/sendmail/views.py +++ b/src/pretix/plugins/sendmail/views.py @@ -373,24 +373,38 @@ class OrderSendView(BaseSenderView): opq = opq.alias( any_checkins=Exists( Checkin.all.filter( - Q(position_id=OuterRef('pk')) | Q(position__addon_to_id=OuterRef('pk')), + position_id=OuterRef('pk'), + successful=True, + list__consider_tickets_used=True, + ) + ) | Exists( + Checkin.all.filter( + position__addon_to_id=OuterRef('pk'), successful=True, list__consider_tickets_used=True, ) ) ) ql.append(Q(any_checkins=False)) + if form.cleaned_data.get('checkin_lists'): opq = opq.alias( matching_checkins=Exists( Checkin.all.filter( - Q(position_id=OuterRef('pk')) | Q(position__addon_to_id=OuterRef('pk')), + position_id=OuterRef('pk'), + list_id__in=[i.pk for i in form.cleaned_data.get('checkin_lists', [])], + successful=True + ) + ) | Exists( + Checkin.all.filter( + position__addon_to_id=OuterRef('pk'), list_id__in=[i.pk for i in form.cleaned_data.get('checkin_lists', [])], successful=True ) ) ) ql.append(Q(matching_checkins=True)) + if len(ql) == 2: opq = opq.filter(ql[0] | ql[1]) elif ql: