Compare commits

...

4 Commits

Author SHA1 Message Date
Raphael Michel
7841cf1ce6 Add sort option 2024-10-31 13:01:19 +01:00
Raphael Michel
959e775c40 Update src/pretix/plugins/badges/exporters.py
Co-authored-by: Mira <weller@rami.io>
2024-10-31 13:00:34 +01:00
Raphael Michel
80403f2700 Update src/pretix/plugins/badges/exporters.py
Co-authored-by: Mira <weller@rami.io>
2024-10-31 13:00:29 +01:00
Raphael Michel
308e97f143 Badge export: Allow to filter by order date (Z#23168742) 2024-10-29 16:18:16 +01:00

View File

@@ -462,14 +462,28 @@ class BadgeExporter(BaseExporter):
)),
('date_from',
forms.DateField(
label=_('Start date'),
label=_('Start event date'),
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
required=False,
help_text=_('Only include tickets for dates on or after this date.')
)),
('date_to',
forms.DateField(
label=_('End date'),
label=_('End event date'),
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
required=False,
help_text=_('Only include tickets ordered on or before this date.')
)),
('order_date_from',
forms.DateField(
label=_('Start order date'),
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
required=False,
help_text=_('Only include tickets ordered on or after this date.')
)),
('order_date_to',
forms.DateField(
label=_('End order date'),
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
required=False,
help_text=_('Only include tickets for dates on or before this date.')
@@ -481,6 +495,7 @@ class BadgeExporter(BaseExporter):
('name', _('Attendee name')),
('company', _('Attendee company')),
('code', _('Order code')),
('order_date', _('Order date')),
('date', _('Event date')),
] + ([
('name:{}'.format(k), _('Attendee name: {part}').format(part=label))
@@ -533,6 +548,24 @@ class BadgeExporter(BaseExporter):
), self.event.timezone)
qs = qs.filter(Q(subevent__date_from__lt=dt) | Q(subevent__isnull=True, order__event__date_from__lt=dt))
if form_data.get('order_date_from'):
if not isinstance(form_data.get('order_date_from'), date):
form_data['order_date_from'] = dateutil.parser.parse(form_data['order_date_from']).date()
df = make_aware(datetime.combine(
form_data['order_date_from'],
time(hour=0, minute=0, second=0)
), self.event.timezone)
qs = qs.filter(order__datetime__gte=df)
if form_data.get('order_date_to'):
if not isinstance(form_data.get('order_date_to'), date):
form_data['order_date_to'] = dateutil.parser.parse(form_data['order_date_to']).date()
dt = make_aware(datetime.combine(
form_data['order_date_to'] + timedelta(days=1),
time(hour=0, minute=0, second=0)
), self.event.timezone)
qs = qs.filter(order__datetime__lt=dt)
if form_data.get('order_by') == 'name':
qs = qs.annotate(
resolved_name=Case(
@@ -553,6 +586,8 @@ class BadgeExporter(BaseExporter):
).order_by('resolved_company', 'order__code')
elif form_data.get('order_by') == 'code':
qs = qs.order_by('order__code')
elif form_data.get('order_by') == 'order_date':
qs = qs.order_by('order__datetime')
elif form_data.get('order_by') == 'date':
qs = qs.annotate(ed=Coalesce('subevent__date_from', 'order__event__date_from')).order_by('ed', 'order__code')
elif form_data.get('order_by', '').startswith('name:'):