From 71f8a3ad3e281912004a35c77172065869284ca7 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 12 Jan 2024 15:55:27 +0100 Subject: [PATCH] Order overview PDF: Allow to filter by subevent date --- src/pretix/base/services/stats.py | 9 +++++++-- src/pretix/plugins/reports/exporters.py | 26 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/services/stats.py b/src/pretix/base/services/stats.py index 12a15bd006..52f4c98700 100644 --- a/src/pretix/base/services/stats.py +++ b/src/pretix/base/services/stats.py @@ -112,7 +112,7 @@ def dictsum(*dicts) -> dict: def order_overview( event: Event, subevent: SubEvent=None, date_filter='', date_from=None, date_until=None, fees=False, - admission_only=False, base_qs=None, base_fees_qs=None, + admission_only=False, base_qs=None, base_fees_qs=None, subevent_date_from=None, subevent_date_until=None ) -> Tuple[List[Tuple[ItemCategory, List[Item]]], Dict[str, Tuple[Decimal, Decimal]]]: items = event.items.all().select_related( 'category', # for re-grouping @@ -125,6 +125,11 @@ def order_overview( qs = qs.filter(subevent__in=subevent) elif subevent: qs = qs.filter(subevent=subevent) + if subevent_date_from: + qs = qs.filter(subevent__date_from__gte=subevent_date_from) + if subevent_date_until: + qs = qs.filter(subevent__date_from__lt=subevent_date_until) + if admission_only: qs = qs.filter(item__admission=True) items = items.filter(admission=True) @@ -232,7 +237,7 @@ def order_overview( payment_cat_obj.name = _('Fees') payment_items = [] - if subevent is None and fees: + if subevent is None and not subevent_date_from and not subevent_date_until and fees: qs = OrderFee.all if base_fees_qs is None else base_fees_qs qs = qs.filter( order__event=event diff --git a/src/pretix/plugins/reports/exporters.py b/src/pretix/plugins/reports/exporters.py index 1a33f6cc3e..1ec4e1be1d 100644 --- a/src/pretix/plugins/reports/exporters.py +++ b/src/pretix/plugins/reports/exporters.py @@ -296,6 +296,17 @@ class OverviewReport(Report): subevent = self.form_data.get('subevent') story.append(Paragraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style())) story.append(Spacer(1, 5 * mm)) + + if form_data.get('subevent_date_range'): + d_start, d_end = resolve_timeframe_to_dates_inclusive(now(), form_data['subevent_date_range'], self.timezone) + story += [ + Paragraph(_('{axis} between {start} and {end}').format( + axis=_('Event date'), + start=date_format(d_start, 'SHORT_DATE_FORMAT') if d_start else '–', + end=date_format(d_end, 'SHORT_DATE_FORMAT') if d_end else '–', + ), self.get_style()), + Spacer(1, 5 * mm) + ] return story def _get_data(self, form_data): @@ -303,12 +314,18 @@ class OverviewReport(Report): d_start, d_end = resolve_timeframe_to_dates_inclusive(now(), form_data['date_range'], self.timezone) else: d_start, d_end = None, None + if form_data.get('subevent_date_range'): + sd_start, sd_end = resolve_timeframe_to_dates_inclusive(now(), form_data['subevent_date_range'], self.timezone) + else: + sd_start, sd_end = None, None return order_overview( self.event, subevent=form_data.get('subevent'), date_filter=form_data.get('date_axis'), date_from=d_start, date_until=d_end, + subevent_date_from=sd_start, + subevent_date_until=sd_end, fees=True ) @@ -427,9 +444,18 @@ class OverviewReport(Report): @property def export_form_fields(self) -> dict: f = OverviewFilterForm(event=self.event) + f.fields = OrderedDict(f.fields.items()) del f.fields['ordering'] del f.fields['date_from'] del f.fields['date_until'] + if self.event.has_subevents: + f.fields['subevent_date_range'] = DateFrameField( + label=_('Event date'), + include_future_frames=True, + required=False, + ) + f.fields.move_to_end("subevent_date_range", last=False) + f.fields.move_to_end("subevent", last=False) f.fields['date_range'] = DateFrameField( label=_('Date range'), include_future_frames=False,