forked from CGM_Public/pretix_original
Fix #1106 -- Do not send reminders to orders placed in the last two hours
This commit is contained in:
@@ -661,7 +661,9 @@ def send_expiry_warnings(sender, **kwargs):
|
|||||||
eventcache = {}
|
eventcache = {}
|
||||||
today = now().replace(hour=0, minute=0, second=0)
|
today = now().replace(hour=0, minute=0, second=0)
|
||||||
|
|
||||||
for o in Order.objects.filter(expires__gte=today, expiry_reminder_sent=False, status=Order.STATUS_PENDING).only('pk'):
|
for o in Order.objects.filter(
|
||||||
|
expires__gte=today, expiry_reminder_sent=False, status=Order.STATUS_PENDING, datetime__lte=now() - timedelta(hours=2)
|
||||||
|
).only('pk'):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
o = Order.objects.select_related('event').select_for_update().get(pk=o.pk)
|
o = Order.objects.select_related('event').select_for_update().get(pk=o.pk)
|
||||||
if o.status != Order.STATUS_PENDING or o.expiry_reminder_sent:
|
if o.status != Order.STATUS_PENDING or o.expiry_reminder_sent:
|
||||||
@@ -723,7 +725,7 @@ def send_download_reminders(sender, **kwargs):
|
|||||||
|
|
||||||
if now() < reminder_date:
|
if now() < reminder_date:
|
||||||
continue
|
continue
|
||||||
for o in e.orders.filter(status=Order.STATUS_PAID, download_reminder_sent=False).only('pk'):
|
for o in e.orders.filter(status=Order.STATUS_PAID, download_reminder_sent=False, datetime__lte=now() - timedelta(hours=2)).only('pk'):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
o = Order.objects.select_related('event').select_for_update().get(pk=o.pk)
|
o = Order.objects.select_related('event').select_for_update().get(pk=o.pk)
|
||||||
if o.download_reminder_sent:
|
if o.download_reminder_sent:
|
||||||
|
|||||||
@@ -301,8 +301,8 @@ class PaymentReminderTests(TestCase):
|
|||||||
self.order = Order.objects.create(
|
self.order = Order.objects.create(
|
||||||
code='FOO', event=self.event, email='dummy@dummy.test',
|
code='FOO', event=self.event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, locale='en',
|
status=Order.STATUS_PENDING, locale='en',
|
||||||
datetime=now(),
|
datetime=now() - timedelta(hours=4),
|
||||||
expires=now() + timedelta(days=10),
|
expires=now() - timedelta(hours=4) + timedelta(days=10),
|
||||||
total=Decimal('46.00'),
|
total=Decimal('46.00'),
|
||||||
)
|
)
|
||||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||||
@@ -336,6 +336,14 @@ class PaymentReminderTests(TestCase):
|
|||||||
send_expiry_warnings(sender=self.event)
|
send_expiry_warnings(sender=self.event)
|
||||||
assert len(djmail.outbox) == 1
|
assert len(djmail.outbox) == 1
|
||||||
|
|
||||||
|
def test_sent_not_immediately_after_purchase(self):
|
||||||
|
self.order.datetime = now()
|
||||||
|
self.order.expires = now() + timedelta(hours=3)
|
||||||
|
self.order.save()
|
||||||
|
self.event.settings.mail_days_order_expire_warning = 2
|
||||||
|
send_expiry_warnings(sender=self.event)
|
||||||
|
assert len(djmail.outbox) == 0
|
||||||
|
|
||||||
|
|
||||||
class DownloadReminderTests(TestCase):
|
class DownloadReminderTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@@ -349,8 +357,8 @@ class DownloadReminderTests(TestCase):
|
|||||||
self.order = Order.objects.create(
|
self.order = Order.objects.create(
|
||||||
code='FOO', event=self.event, email='dummy@dummy.test',
|
code='FOO', event=self.event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PAID, locale='en',
|
status=Order.STATUS_PAID, locale='en',
|
||||||
datetime=now(),
|
datetime=now() - timedelta(hours=4),
|
||||||
expires=now() + timedelta(days=10),
|
expires=now() - timedelta(hours=4) + timedelta(days=10),
|
||||||
total=Decimal('46.00'),
|
total=Decimal('46.00'),
|
||||||
)
|
)
|
||||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||||
@@ -385,6 +393,13 @@ class DownloadReminderTests(TestCase):
|
|||||||
send_download_reminders(sender=self.event)
|
send_download_reminders(sender=self.event)
|
||||||
assert len(djmail.outbox) == 0
|
assert len(djmail.outbox) == 0
|
||||||
|
|
||||||
|
def test_not_sent_too_soon_after_purchase(self):
|
||||||
|
self.order.datetime = now()
|
||||||
|
self.order.save()
|
||||||
|
self.event.settings.mail_days_download_reminder = 2
|
||||||
|
send_download_reminders(sender=self.event)
|
||||||
|
assert len(djmail.outbox) == 0
|
||||||
|
|
||||||
|
|
||||||
class OrderChangeManagerTests(TestCase):
|
class OrderChangeManagerTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user