From f4672564ceaad5576087c3ef3b74156ddc12a5c7 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sun, 25 Dec 2016 22:51:19 +0100 Subject: [PATCH] Fix #37 -- Clever displaying of date ranges --- src/pretix/base/models/event.py | 7 +++++++ src/pretix/helpers/daterange.py | 21 +++++++++++++++++++ .../templates/pretixpresale/event/base.html | 3 +-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/pretix/helpers/daterange.py diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 122df60e1..8ac9c2bb3 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -17,6 +17,7 @@ from pretix.base.i18n import I18nCharField from pretix.base.models.base import LoggedModel from pretix.base.settings import SettingsProxy from pretix.base.validators import EventSlugBlacklistValidator +from pretix.helpers.daterange import daterange from .auth import User from .organizer import Organizer @@ -153,6 +154,12 @@ class Event(LoggedModel): "DATETIME_FORMAT" if self.settings.show_times else "DATE_FORMAT" ) + def get_date_range_display(self, tz=None) -> str: + tz = tz or pytz.timezone(self.settings.timezone) + if not self.settings.show_date_to or not self.date_to: + return _date(self.date_from.astimezone(tz), "DATE_FORMAT") + return daterange(self.date_from.astimezone(tz), self.date_to.astimezone(tz)) + def get_cache(self) -> "pretix.base.cache.ObjectRelatedCache": """ Returns an :py:class:`ObjectRelatedCache` object. This behaves equivalent to diff --git a/src/pretix/helpers/daterange.py b/src/pretix/helpers/daterange.py new file mode 100644 index 000000000..65f86e08c --- /dev/null +++ b/src/pretix/helpers/daterange.py @@ -0,0 +1,21 @@ +from django.template.defaultfilters import date as _date +from django.utils.translation import get_language, ugettext_lazy as _ + + +def daterange(df, dt): + lng = get_language() + + if lng.startswith("de"): + if df.year == dt.year and df.month == dt.month: + return "{}.–{}".format(_date(df, "j"), _date(dt, "j. F Y")) + elif df.year == dt.year: + return "{} – {}".format(_date(df, "j. F"), _date(dt, "j. F Y")) + elif lng.startswith("en"): + if df.year == dt.year and df.month == dt.month: + return "{} – {}".format(_date(df, "N jS"), _date(dt, "jS, Y")) + elif df.year == dt.year: + return "{} – {}".format(_date(df, "N jS"), _date(dt, "N jS, Y")) + + return _("{date_from} – {date_to}").format( + date_from=_date(df, "DATE_FORMAT"), date_to=_date(dt, "DATE_FORMAT") + ) diff --git a/src/pretix/presale/templates/pretixpresale/event/base.html b/src/pretix/presale/templates/pretixpresale/event/base.html index 90a148599..c53cfb82b 100644 --- a/src/pretix/presale/templates/pretixpresale/event/base.html +++ b/src/pretix/presale/templates/pretixpresale/event/base.html @@ -29,8 +29,7 @@ {% else %} {{ event.name }} - {{ event.date_from|date:"DATE_FORMAT" }}{% if event.settings.show_date_to %} – - {{ event.date_to|date:"DATE_FORMAT" }}{% endif %} + {{ event.get_date_range_display }} {% endif %}