mirror of
https://github.com/pretix/pretix.git
synced 2026-05-07 15:34:02 +00:00
Clean up timezone handling in calendar
This commit is contained in:
@@ -42,7 +42,6 @@ from importlib import import_module
|
|||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
import isoweek
|
import isoweek
|
||||||
import pytz
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
@@ -578,7 +577,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
|||||||
|
|
||||||
if context['list_type'] == "calendar":
|
if context['list_type'] == "calendar":
|
||||||
self._set_month_year()
|
self._set_month_year()
|
||||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
tz = self.request.event.timezone
|
||||||
_, ndays = calendar.monthrange(self.year, self.month)
|
_, ndays = calendar.monthrange(self.year, self.month)
|
||||||
before = datetime(self.year, self.month, 1, 0, 0, 0, tzinfo=tz) - timedelta(days=1)
|
before = datetime(self.year, self.month, 1, 0, 0, 0, tzinfo=tz) - timedelta(days=1)
|
||||||
after = datetime(self.year, self.month, ndays, 0, 0, 0, tzinfo=tz) + timedelta(days=1)
|
after = datetime(self.year, self.month, ndays, 0, 0, 0, tzinfo=tz) + timedelta(days=1)
|
||||||
@@ -608,7 +607,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
|||||||
context['years'] = range(now().year - 2, now().year + 3)
|
context['years'] = range(now().year - 2, now().year + 3)
|
||||||
elif context['list_type'] == "week":
|
elif context['list_type'] == "week":
|
||||||
self._set_week_year()
|
self._set_week_year()
|
||||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
tz = self.request.event.timezone
|
||||||
week = isoweek.Week(self.year, self.week)
|
week = isoweek.Week(self.year, self.week)
|
||||||
before = datetime(
|
before = datetime(
|
||||||
week.monday().year, week.monday().month, week.monday().day, 0, 0, 0, tzinfo=tz
|
week.monday().year, week.monday().month, week.monday().day, 0, 0, 0, tzinfo=tz
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ from django.utils.timezone import get_current_timezone, now
|
|||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.decorators.cache import cache_page
|
from django.views.decorators.cache import cache_page
|
||||||
from django.views.generic import ListView, TemplateView
|
from django.views.generic import ListView, TemplateView
|
||||||
from pytz import UTC
|
|
||||||
|
|
||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
@@ -178,7 +177,7 @@ class EventListMixin:
|
|||||||
return qs
|
return qs
|
||||||
|
|
||||||
def _set_month_to_next_subevent(self):
|
def _set_month_to_next_subevent(self):
|
||||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
tz = self.request.event.timezone
|
||||||
next_sev = self.request.event.subevents.using(settings.DATABASE_REPLICA).filter(
|
next_sev = self.request.event.subevents.using(settings.DATABASE_REPLICA).filter(
|
||||||
Q(date_from__gte=now()) | Q(date_to__isnull=False, date_to__gte=now()),
|
Q(date_from__gte=now()) | Q(date_to__isnull=False, date_to__gte=now()),
|
||||||
active=True,
|
active=True,
|
||||||
@@ -218,7 +217,7 @@ class EventListMixin:
|
|||||||
datetime_from = next_ev.date_from
|
datetime_from = next_ev.date_from
|
||||||
|
|
||||||
if datetime_from:
|
if datetime_from:
|
||||||
tz = pytz.timezone(next_ev.settings.timezone)
|
tz = next_ev.timezone
|
||||||
self.year = datetime_from.astimezone(tz).year
|
self.year = datetime_from.astimezone(tz).year
|
||||||
self.month = datetime_from.astimezone(tz).month
|
self.month = datetime_from.astimezone(tz).month
|
||||||
else:
|
else:
|
||||||
@@ -240,7 +239,7 @@ class EventListMixin:
|
|||||||
self._set_month_to_next_event()
|
self._set_month_to_next_event()
|
||||||
|
|
||||||
def _set_week_to_next_subevent(self):
|
def _set_week_to_next_subevent(self):
|
||||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
tz = self.request.event.timezone
|
||||||
next_sev = self.request.event.subevents.using(settings.DATABASE_REPLICA).filter(
|
next_sev = self.request.event.subevents.using(settings.DATABASE_REPLICA).filter(
|
||||||
Q(date_from__gte=now()) | Q(date_to__isnull=False, date_to__gte=now()),
|
Q(date_from__gte=now()) | Q(date_to__isnull=False, date_to__gte=now()),
|
||||||
active=True,
|
active=True,
|
||||||
@@ -280,7 +279,7 @@ class EventListMixin:
|
|||||||
datetime_from = next_ev.date_from
|
datetime_from = next_ev.date_from
|
||||||
|
|
||||||
if datetime_from:
|
if datetime_from:
|
||||||
tz = pytz.timezone(next_ev.settings.timezone)
|
tz = next_ev.timezone
|
||||||
self.year = datetime_from.astimezone(tz).isocalendar()[0]
|
self.year = datetime_from.astimezone(tz).isocalendar()[0]
|
||||||
self.week = datetime_from.astimezone(tz).isocalendar()[1]
|
self.week = datetime_from.astimezone(tz).isocalendar()[1]
|
||||||
else:
|
else:
|
||||||
@@ -428,8 +427,8 @@ def add_events_for_days(request, baseqs, before, after, ebd, timezones):
|
|||||||
if hasattr(request, 'organizer'):
|
if hasattr(request, 'organizer'):
|
||||||
qs = filter_qs_by_attr(qs, request)
|
qs = filter_qs_by_attr(qs, request)
|
||||||
for event in qs:
|
for event in qs:
|
||||||
timezones.add(event.settings.timezones)
|
timezones.add(event.settings.timezone)
|
||||||
tz = pytz.timezone(event.settings.timezone)
|
tz = event.timezone
|
||||||
datetime_from = event.date_from.astimezone(tz)
|
datetime_from = event.date_from.astimezone(tz)
|
||||||
date_from = datetime_from.date()
|
date_from = datetime_from.date()
|
||||||
if event.settings.show_date_to and event.date_to:
|
if event.settings.show_date_to and event.date_to:
|
||||||
@@ -508,7 +507,7 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, event=None, cart_n
|
|||||||
if hide:
|
if hide:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
timezones.add(s.timezones)
|
timezones.add(s.timezone)
|
||||||
tz = pytz.timezone(s.timezone)
|
tz = pytz.timezone(s.timezone)
|
||||||
datetime_from = se.date_from.astimezone(tz)
|
datetime_from = se.date_from.astimezone(tz)
|
||||||
date_from = datetime_from.date()
|
date_from = datetime_from.date()
|
||||||
@@ -619,8 +618,10 @@ class CalendarView(OrganizerViewMixin, EventListMixin, TemplateView):
|
|||||||
_, ndays = calendar.monthrange(self.year, self.month)
|
_, ndays = calendar.monthrange(self.year, self.month)
|
||||||
except calendar.IllegalMonthError:
|
except calendar.IllegalMonthError:
|
||||||
raise Http404()
|
raise Http404()
|
||||||
before = datetime(self.year, self.month, 1, 0, 0, 0, tzinfo=UTC) - timedelta(days=1)
|
|
||||||
after = datetime(self.year, self.month, ndays, 0, 0, 0, tzinfo=UTC) + timedelta(days=1)
|
tz = get_current_timezone()
|
||||||
|
before = tz.localize(datetime(self.year, self.month, 1, 0, 0, 0)) - timedelta(days=1)
|
||||||
|
after = tz.localize(datetime(self.year, self.month, ndays, 0, 0, 0)) + timedelta(days=1)
|
||||||
|
|
||||||
ctx['date'] = date(self.year, self.month, 1)
|
ctx['date'] = date(self.year, self.month, 1)
|
||||||
ctx['before'] = before
|
ctx['before'] = before
|
||||||
@@ -694,13 +695,14 @@ class WeekCalendarView(OrganizerViewMixin, EventListMixin, TemplateView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data()
|
ctx = super().get_context_data()
|
||||||
|
|
||||||
|
tz = get_current_timezone()
|
||||||
week = isoweek.Week(self.year, self.week)
|
week = isoweek.Week(self.year, self.week)
|
||||||
before = datetime(
|
before = tz.localize(datetime(
|
||||||
week.monday().year, week.monday().month, week.monday().day, 0, 0, 0, tzinfo=UTC
|
week.monday().year, week.monday().month, week.monday().day, 0, 0, 0,
|
||||||
) - timedelta(days=1)
|
)) - timedelta(days=1)
|
||||||
after = datetime(
|
after = tz.localize(datetime(
|
||||||
week.sunday().year, week.sunday().month, week.sunday().day, 0, 0, 0, tzinfo=UTC
|
week.sunday().year, week.sunday().month, week.sunday().day, 0, 0, 0,
|
||||||
) + timedelta(days=1)
|
)) + timedelta(days=1)
|
||||||
|
|
||||||
ctx['date'] = week.monday()
|
ctx['date'] = week.monday()
|
||||||
ctx['before'] = before
|
ctx['before'] = before
|
||||||
@@ -798,7 +800,7 @@ class DayCalendarView(OrganizerViewMixin, EventListMixin, TemplateView):
|
|||||||
datetime_from = next_ev.date_from
|
datetime_from = next_ev.date_from
|
||||||
|
|
||||||
if datetime_from:
|
if datetime_from:
|
||||||
self.tz = pytz.timezone(next_ev.settings.timezone)
|
self.tz = next_ev.timezone
|
||||||
self.date = datetime_from.astimezone(self.tz).date()
|
self.date = datetime_from.astimezone(self.tz).date()
|
||||||
else:
|
else:
|
||||||
self.tz = self.request.organizer.timezone
|
self.tz = self.request.organizer.timezone
|
||||||
@@ -821,12 +823,13 @@ class DayCalendarView(OrganizerViewMixin, EventListMixin, TemplateView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data()
|
ctx = super().get_context_data()
|
||||||
|
|
||||||
before = datetime(
|
tz = get_current_timezone()
|
||||||
self.date.year, self.date.month, self.date.day, 0, 0, 0, tzinfo=UTC
|
before = tz.localize(datetime(
|
||||||
) - timedelta(days=1)
|
self.date.year, self.date.month, self.date.day, 0, 0, 0,
|
||||||
after = datetime(
|
)) - timedelta(days=1)
|
||||||
self.date.year, self.date.month, self.date.day, 0, 0, 0, tzinfo=UTC
|
after = tz.localize(datetime(
|
||||||
) + timedelta(days=1)
|
self.date.year, self.date.month, self.date.day, 0, 0, 0,
|
||||||
|
)) + timedelta(days=1)
|
||||||
|
|
||||||
ctx['date'] = self.date
|
ctx['date'] = self.date
|
||||||
ctx['cal_tz'] = self.tz
|
ctx['cal_tz'] = self.tz
|
||||||
|
|||||||
@@ -481,9 +481,9 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
|
|
||||||
data['date'] = date(self.year, self.month, 1)
|
data['date'] = date(self.year, self.month, 1)
|
||||||
if hasattr(self.request, 'event'):
|
if hasattr(self.request, 'event'):
|
||||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
tz = self.request.event.timezone
|
||||||
else:
|
else:
|
||||||
tz = pytz.UTC
|
tz = self.request.organizer.timezone
|
||||||
before = datetime(self.year, self.month, 1, 0, 0, 0, tzinfo=tz) - timedelta(days=1)
|
before = datetime(self.year, self.month, 1, 0, 0, 0, tzinfo=tz) - timedelta(days=1)
|
||||||
after = datetime(self.year, self.month, ndays, 0, 0, 0, tzinfo=tz) + timedelta(days=1)
|
after = datetime(self.year, self.month, ndays, 0, 0, 0, tzinfo=tz) + timedelta(days=1)
|
||||||
|
|
||||||
@@ -529,9 +529,9 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
self._set_week_year()
|
self._set_week_year()
|
||||||
|
|
||||||
if hasattr(self.request, 'event'):
|
if hasattr(self.request, 'event'):
|
||||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
tz = self.request.event.timezone
|
||||||
else:
|
else:
|
||||||
tz = pytz.UTC
|
tz = self.request.organizer.timezone
|
||||||
|
|
||||||
week = isoweek.Week(self.year, self.week)
|
week = isoweek.Week(self.year, self.week)
|
||||||
data['week'] = [self.year, self.week]
|
data['week'] = [self.year, self.week]
|
||||||
@@ -583,7 +583,7 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
data['has_more_events'] = True
|
data['has_more_events'] = True
|
||||||
evs = evs[:limit]
|
evs = evs[:limit]
|
||||||
|
|
||||||
tz = pytz.timezone(request.event.settings.timezone)
|
tz = request.event.timezone
|
||||||
if self.request.event.settings.event_list_available_only:
|
if self.request.event.settings.event_list_available_only:
|
||||||
evs = [
|
evs = [
|
||||||
se for se in evs
|
se for se in evs
|
||||||
|
|||||||
Reference in New Issue
Block a user