diff --git a/src/pretix/base/email.py b/src/pretix/base/email.py index fbab7f5ed..1bfbbd921 100644 --- a/src/pretix/base/email.py +++ b/src/pretix/base/email.py @@ -43,6 +43,7 @@ from pretix.base.i18n import ( LazyCurrencyNumber, LazyDate, LazyExpiresDate, LazyNumber, ) from pretix.base.models import Event +from pretix.base.reldate import RelativeDateWrapper from pretix.base.settings import PERSON_NAME_SCHEMES from pretix.base.signals import ( register_html_mail_renderers, register_mail_placeholders, @@ -469,6 +470,19 @@ def base_placeholders(sender, **kwargs): } ), ), + SimpleFunctionalMailTextPlaceholder( + 'order_modification_deadline_date_and_time', ['order', 'event'], + lambda order, event: + date_format(order.modify_deadline.astimezone(event.timezone), 'SHORT_DATETIME_FORMAT') + if order.modify_deadline + else '', + lambda event: date_format( + event.settings.get( + 'last_order_modification_date', as_type=RelativeDateWrapper + ).datetime(event).astimezone(event.timezone), + 'SHORT_DATETIME_FORMAT' + ) if event.settings.get('last_order_modification_date') else '', + ), SimpleFunctionalMailTextPlaceholder( 'event_location', ['event_or_subevent'], lambda event_or_subevent: str(event_or_subevent.location or ''), lambda event: str(event.location or ''), diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 3c94cb80a..8ebb861a4 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -746,6 +746,19 @@ class Order(LockModel, LoggedModel): length += 1 iteration = 0 + @property + def modify_deadline(self): + modify_deadline = self.event.settings.get('last_order_modification_date', as_type=RelativeDateWrapper) + if self.event.has_subevents and modify_deadline: + dates = [ + modify_deadline.datetime(se) + for se in self.event.subevents.filter(id__in=self.positions.values_list('subevent', flat=True)) + ] + return min(dates) if dates else None + elif modify_deadline: + return modify_deadline.datetime(self.event) + return None + @property def can_modify_answers(self) -> bool: """ @@ -758,16 +771,7 @@ class Order(LockModel, LoggedModel): if self.status not in (Order.STATUS_PENDING, Order.STATUS_PAID, Order.STATUS_EXPIRED): return False - modify_deadline = self.event.settings.get('last_order_modification_date', as_type=RelativeDateWrapper) - if self.event.has_subevents and modify_deadline: - dates = [ - modify_deadline.datetime(se) - for se in self.event.subevents.filter(id__in=self.positions.values_list('subevent', flat=True)) - ] - modify_deadline = min(dates) if dates else None - elif modify_deadline: - modify_deadline = modify_deadline.datetime(self.event) - + modify_deadline = self.modify_deadline if modify_deadline is not None and now() > modify_deadline: return False