diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index bdea0b974..443e04a43 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -294,12 +294,14 @@ class WidgetAPIProductList(EventListMixin, View): event = ev.event else: event = ev + tz = pytz.timezone(e['timezone']) events.append({ 'name': str(ev.name), - 'time': date_format(e['time'], 'TIME_FORMAT') if e.get('time') and event.settings.show_times else None, + 'time': date_format(ev.date_from.astimezone(tz), 'TIME_FORMAT') if e.get('time') and event.settings.show_times else + None, 'continued': e['continued'], 'date_range': ev.get_date_range_display() + ( - " " + date_format(ev.date_from, "TIME_FORMAT") if event.settings.show_times else "" + " " + date_format(ev.date_from.astimezone(tz), "TIME_FORMAT") if event.settings.show_times else "" ), 'availability': self._get_availability(ev, event), 'event_url': build_absolute_uri(event, 'presale:event.index'), @@ -370,11 +372,12 @@ class WidgetAPIProductList(EventListMixin, View): evs = self.request.event.subevents_sorted( self.request.event.subevents_annotated(self.request.sales_channel) ) + tz = pytz.timezone(request.event.settings.timezone) data['events'] = [ { 'name': str(ev.name), - 'date_range': ev.get_date_range_display() + ( - " " + date_format(ev.date_from, "TIME_FORMAT") if ev.event.settings.show_times else "" + 'date_range': ev.get_date_range_display(tz) + ( + (" " + ev.get_time_from_display(tz)) if ev.event.settings.show_times else "" ), 'availability': self._get_availability(ev, ev.event), 'event_url': build_absolute_uri(ev.event, 'presale:event.index'), @@ -393,8 +396,8 @@ class WidgetAPIProductList(EventListMixin, View): ) avail = {'color': 'none', 'text': ugettext('Event series')} else: - dr = event.get_date_range_display() + ( - " " + date_format(event.date_from, "TIME_FORMAT") if event.settings.show_times else "" + dr = event.get_date_range_display(tz) + ( + " " + event.get_time_from_display(tz) if event.settings.show_times else "" ) avail = self._get_availability(event, event) data['events'].append({ diff --git a/src/tests/presale/test_widget.py b/src/tests/presale/test_widget.py index 00a14b031..7effe6705 100644 --- a/src/tests/presale/test_widget.py +++ b/src/tests/presale/test_widget.py @@ -327,6 +327,7 @@ class WidgetCartTest(CartTestMixin, TestCase): def test_subevent_list(self): self.event.has_subevents = True + self.event.settings.timezone = 'Europe/Berlin' self.event.save() with freeze_time("2019-01-01 10:00:00"): self.event.subevents.create(name="Past", active=True, date_from=now() - datetime.timedelta(days=3)) @@ -340,15 +341,16 @@ class WidgetCartTest(CartTestMixin, TestCase): assert data == { 'list_type': 'list', 'events': [ - {'name': 'Present', 'date_range': 'Jan. 1, 2019 10:00', 'availability': {'color': 'green', 'text': 'Tickets on sale'}, + {'name': 'Present', 'date_range': 'Jan. 1, 2019 11:00', 'availability': {'color': 'green', 'text': 'Tickets on sale'}, 'event_url': 'http://example.com/ccc/30c3/', 'subevent': se1.pk}, - {'name': 'Future', 'date_range': 'Jan. 4, 2019 10:00', 'availability': {'color': 'green', 'text': 'Tickets on sale'}, + {'name': 'Future', 'date_range': 'Jan. 4, 2019 11:00', 'availability': {'color': 'green', 'text': 'Tickets on sale'}, 'event_url': 'http://example.com/ccc/30c3/', 'subevent': se2.pk} ] } def test_subevent_calendar(self): self.event.has_subevents = True + self.event.settings.timezone = 'Europe/Berlin' self.event.save() with freeze_time("2019-01-01 10:00:00"): self.event.subevents.create(name="Past", active=True, date_from=now() - datetime.timedelta(days=3)) @@ -366,13 +368,13 @@ class WidgetCartTest(CartTestMixin, TestCase): [ None, {'day': 1, 'date': '2019-01-01', 'events': [ - {'name': 'Present', 'time': '10:00', 'continued': False, 'date_range': 'Jan. 1, 2019 10:00', + {'name': 'Present', 'time': '11:00', 'continued': False, 'date_range': 'Jan. 1, 2019 11:00', 'availability': {'color': 'green', 'text': 'Tickets on sale'}, 'event_url': 'http://example.com/ccc/30c3/', 'subevent': se1.pk}]}, {'day': 2, 'date': '2019-01-02', 'events': []}, {'day': 3, 'date': '2019-01-03', 'events': []}, {'day': 4, 'date': '2019-01-04', 'events': [ - {'name': 'Future', 'time': '10:00', 'continued': False, 'date_range': 'Jan. 4, 2019 10:00', + {'name': 'Future', 'time': '11:00', 'continued': False, 'date_range': 'Jan. 4, 2019 11:00', 'availability': {'color': 'green', 'text': 'Tickets on sale'}, 'event_url': 'http://example.com/ccc/30c3/', 'subevent': se2.pk}]}, {'day': 5, 'date': '2019-01-05', 'events': []}, @@ -417,6 +419,7 @@ class WidgetCartTest(CartTestMixin, TestCase): def test_event_list(self): self.event.has_subevents = True + self.event.settings.timezone = 'Europe/Berlin' self.event.save() with freeze_time("2019-01-01 10:00:00"): self.orga.events.create(name="Past", live=True, is_public=True, slug='past', date_from=now() - datetime.timedelta(days=3)) @@ -452,6 +455,7 @@ class WidgetCartTest(CartTestMixin, TestCase): def test_event_calendar(self): self.event.has_subevents = True + self.event.settings.timezone = 'Europe/Berlin' self.event.save() with freeze_time("2019-01-01 10:00:00"): self.orga.events.create(name="Past", live=True, is_public=True, slug='past', date_from=now() - datetime.timedelta(days=3)) @@ -485,11 +489,11 @@ class WidgetCartTest(CartTestMixin, TestCase): {'availability': {'color': 'green', 'text': 'Tickets on sale'}, 'continued': False, - 'date_range': 'Jan. 1, 2019 10:00', + 'date_range': 'Jan. 1, 2019 11:00', 'event_url': 'http://example.com/ccc/30c3/', 'name': 'Present', 'subevent': se1.pk, - 'time': '10:00'}]}, + 'time': '11:00'}]}, {'date': '2019-01-02', 'day': 2, 'events': []}, {'date': '2019-01-03', 'day': 3, 'events': []}, {'date': '2019-01-04', @@ -505,11 +509,11 @@ class WidgetCartTest(CartTestMixin, TestCase): {'availability': {'color': 'green', 'text': 'Tickets on sale'}, 'continued': False, - 'date_range': 'Jan. 4, 2019 10:00', + 'date_range': 'Jan. 4, 2019 11:00', 'event_url': 'http://example.com/ccc/30c3/', 'name': 'Future', 'subevent': se2.pk, - 'time': '10:00'}]}, + 'time': '11:00'}]}, {'date': '2019-01-05', 'day': 5, 'events': []}, {'date': '2019-01-06', 'day': 6, 'events': []}], [{'date': '2019-01-07', 'day': 7, 'events': []},