diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 0496209598..c95fec8edb 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -1019,7 +1019,6 @@ def send_download_reminders(sender, **kwargs): F('event__date_from') ) ).filter( - status=Order.STATUS_PAID, download_reminder_sent=False, datetime__lte=now() - timedelta(hours=2), first_date__gte=today, @@ -1049,6 +1048,22 @@ def send_download_reminders(sender, **kwargs): if not all([r for rr, r in allow_ticket_download.send(event, order=o)]): continue + if not o.ticket_download_available: + continue + positions = o.positions.select_related('item') + + if o.status != Order.STATUS_PAID: + if o.status != Order.STATUS_PENDING or o.require_approval or not \ + o.event.settings.ticket_download_pending: + continue + send = False + for p in positions: + if p.generate_ticket: + send = True + break + if not send: + continue + with language(o.locale): o.download_reminder_sent = True o.save(update_fields=['download_reminder_sent']) @@ -1066,6 +1081,9 @@ def send_download_reminders(sender, **kwargs): if event.settings.mail_send_download_reminder_attendee: for p in o.positions.all(): + if not p.generate_ticket: + continue + if p.subevent_id: reminder_date = (p.subevent.date_from - timedelta(days=days)).replace( hour=0, minute=0, second=0, microsecond=0 diff --git a/src/pretix/base/timeline.py b/src/pretix/base/timeline.py index 770bb3f95c..ab42ac9a2f 100644 --- a/src/pretix/base/timeline.py +++ b/src/pretix/base/timeline.py @@ -133,7 +133,7 @@ def timeline_for_event(event, subevent=None): if not event.has_subevents: days = event.settings.get('mail_days_download_reminder', as_type=int) - if days is not None: + if days is not None and event.settings.ticket_download: reminder_date = (ev.date_from - timedelta(days=days)).replace(hour=0, minute=0, second=0, microsecond=0) tl.append(TimelineEvent( event=event, subevent=subevent, diff --git a/src/tests/base/test_orders.py b/src/tests/base/test_orders.py index b2897a3189..c67782395f 100644 --- a/src/tests/base/test_orders.py +++ b/src/tests/base/test_orders.py @@ -445,8 +445,24 @@ class DownloadReminderTests(TestCase): order=self.order, item=self.ticket, variation=None, price=Decimal("23.00"), attendee_name_parts={"full_name": "Peter"}, positionid=1 ) + self.event.settings.ticket_download = True djmail.outbox = [] + @classscope(attr='o') + def test_downloads_disabled(self): + self.event.settings.mail_days_download_reminder = 2 + self.event.settings.ticket_download = False + send_download_reminders(sender=self.event) + assert len(djmail.outbox) == 0 + + @classscope(attr='o') + def test_downloads_disabled_per_product(self): + self.event.settings.mail_days_download_reminder = 2 + self.ticket.generate_tickets = False + self.ticket.save() + send_download_reminders(sender=self.event) + assert len(djmail.outbox) == 0 + @classscope(attr='o') def test_disabled(self): send_download_reminders(sender=self.event)