Order overview PDF: Allow to filter by subevent date

This commit is contained in:
Raphael Michel
2024-01-12 15:55:27 +01:00
parent 24dd065839
commit 71f8a3ad3e
2 changed files with 33 additions and 2 deletions

View File

@@ -112,7 +112,7 @@ def dictsum(*dicts) -> dict:
def order_overview( def order_overview(
event: Event, subevent: SubEvent=None, date_filter='', date_from=None, date_until=None, fees=False, 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]]]: ) -> Tuple[List[Tuple[ItemCategory, List[Item]]], Dict[str, Tuple[Decimal, Decimal]]]:
items = event.items.all().select_related( items = event.items.all().select_related(
'category', # for re-grouping 'category', # for re-grouping
@@ -125,6 +125,11 @@ def order_overview(
qs = qs.filter(subevent__in=subevent) qs = qs.filter(subevent__in=subevent)
elif subevent: elif subevent:
qs = qs.filter(subevent=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: if admission_only:
qs = qs.filter(item__admission=True) qs = qs.filter(item__admission=True)
items = items.filter(admission=True) items = items.filter(admission=True)
@@ -232,7 +237,7 @@ def order_overview(
payment_cat_obj.name = _('Fees') payment_cat_obj.name = _('Fees')
payment_items = [] 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 = OrderFee.all if base_fees_qs is None else base_fees_qs
qs = qs.filter( qs = qs.filter(
order__event=event order__event=event

View File

@@ -296,6 +296,17 @@ class OverviewReport(Report):
subevent = self.form_data.get('subevent') subevent = self.form_data.get('subevent')
story.append(Paragraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style())) story.append(Paragraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style()))
story.append(Spacer(1, 5 * mm)) 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 return story
def _get_data(self, form_data): 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) d_start, d_end = resolve_timeframe_to_dates_inclusive(now(), form_data['date_range'], self.timezone)
else: else:
d_start, d_end = None, None 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( return order_overview(
self.event, self.event,
subevent=form_data.get('subevent'), subevent=form_data.get('subevent'),
date_filter=form_data.get('date_axis'), date_filter=form_data.get('date_axis'),
date_from=d_start, date_from=d_start,
date_until=d_end, date_until=d_end,
subevent_date_from=sd_start,
subevent_date_until=sd_end,
fees=True fees=True
) )
@@ -427,9 +444,18 @@ class OverviewReport(Report):
@property @property
def export_form_fields(self) -> dict: def export_form_fields(self) -> dict:
f = OverviewFilterForm(event=self.event) f = OverviewFilterForm(event=self.event)
f.fields = OrderedDict(f.fields.items())
del f.fields['ordering'] del f.fields['ordering']
del f.fields['date_from'] del f.fields['date_from']
del f.fields['date_until'] 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( f.fields['date_range'] = DateFrameField(
label=_('Date range'), label=_('Date range'),
include_future_frames=False, include_future_frames=False,