mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Add effective presale_start and presale_end properties (#1851)
This commit is contained in:
@@ -118,25 +118,49 @@ class EventMixin:
|
||||
def timezone(self):
|
||||
return pytz.timezone(self.settings.timezone)
|
||||
|
||||
@property
|
||||
def effective_presale_end(self):
|
||||
"""
|
||||
Returns the effective presale end date, taking for subevents into consideration if the presale end
|
||||
date might have been further limited by the event-level presale end date
|
||||
"""
|
||||
if isinstance(self, SubEvent):
|
||||
presale_ends = [self.presale_end, self.event.presale_end]
|
||||
return min(filter(lambda x: x is not None, presale_ends)) if any(presale_ends) else None
|
||||
else:
|
||||
return self.presale_end
|
||||
|
||||
@property
|
||||
def presale_has_ended(self):
|
||||
"""
|
||||
Is true, when ``presale_end`` is set and in the past.
|
||||
"""
|
||||
if self.presale_end:
|
||||
return now() > self.presale_end
|
||||
if self.effective_presale_end:
|
||||
return now() > self.effective_presale_end
|
||||
elif self.date_to:
|
||||
return now() > self.date_to
|
||||
else:
|
||||
return now().astimezone(self.timezone).date() > self.date_from.astimezone(self.timezone).date()
|
||||
|
||||
@property
|
||||
def effective_presale_start(self):
|
||||
"""
|
||||
Returns the effective presale start date, taking for subevents into consideration if the presale start
|
||||
date might have been further limited by the event-level presale start date
|
||||
"""
|
||||
if isinstance(self, SubEvent):
|
||||
presale_starts = [self.presale_start, self.event.presale_start]
|
||||
return max(filter(lambda x: x is not None, presale_starts)) if any(presale_starts) else None
|
||||
else:
|
||||
return self.presale_start
|
||||
|
||||
@property
|
||||
def presale_is_running(self):
|
||||
"""
|
||||
Is true, when ``presale_end`` is not set or in the future and ``presale_start`` is not
|
||||
set or in the past.
|
||||
"""
|
||||
if self.presale_start and now() < self.presale_start:
|
||||
if self.effective_presale_start and now() < self.effective_presale_start:
|
||||
return False
|
||||
return not self.presale_has_ended
|
||||
|
||||
|
||||
Reference in New Issue
Block a user