forked from CGM_Public/pretix_original
Invoice exporter: Allow to filter by date and payment method
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from collections import OrderedDict
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
|
from django import forms
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
@@ -15,9 +17,20 @@ class InvoiceExporter(BaseExporter):
|
|||||||
verbose_name = _('All invoices')
|
verbose_name = _('All invoices')
|
||||||
|
|
||||||
def render(self, form_data: dict):
|
def render(self, form_data: dict):
|
||||||
|
qs = self.event.invoices.all()
|
||||||
|
|
||||||
|
if form_data.get('payment_provider'):
|
||||||
|
qs = qs.filter(order__payment_provider=form_data.get('payment_provider'))
|
||||||
|
|
||||||
|
if form_data.get('date_from'):
|
||||||
|
qs = qs.filter(date__gte=form_data.get('date_from'))
|
||||||
|
|
||||||
|
if form_data.get('date_to'):
|
||||||
|
qs = qs.filter(date__lte=form_data.get('date_to'))
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as d:
|
with tempfile.TemporaryDirectory() as d:
|
||||||
with ZipFile(os.path.join(d, 'tmp.zip'), 'w') as zipf:
|
with ZipFile(os.path.join(d, 'tmp.zip'), 'w') as zipf:
|
||||||
for i in self.event.invoices.all():
|
for i in qs:
|
||||||
if not i.file:
|
if not i.file:
|
||||||
invoice_pdf_task.apply(args=(i.pk,))
|
invoice_pdf_task.apply(args=(i.pk,))
|
||||||
i.refresh_from_db()
|
i.refresh_from_db()
|
||||||
@@ -28,6 +41,43 @@ class InvoiceExporter(BaseExporter):
|
|||||||
with open(os.path.join(d, 'tmp.zip'), 'rb') as zipf:
|
with open(os.path.join(d, 'tmp.zip'), 'rb') as zipf:
|
||||||
return '{}_invoices.zip'.format(self.event.slug), 'application/zip', zipf.read()
|
return '{}_invoices.zip'.format(self.event.slug), 'application/zip', zipf.read()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def export_form_fields(self):
|
||||||
|
return OrderedDict(
|
||||||
|
[
|
||||||
|
('date_from',
|
||||||
|
forms.DateField(
|
||||||
|
label=_('Start date'),
|
||||||
|
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
|
||||||
|
required=False,
|
||||||
|
help_text=_('Only include invocies issued on or after this date. Note that the invoice date does '
|
||||||
|
'not always correspond to the order or payment date.')
|
||||||
|
)),
|
||||||
|
('date_to',
|
||||||
|
forms.DateField(
|
||||||
|
label=_('End date'),
|
||||||
|
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
|
||||||
|
required=False,
|
||||||
|
help_text=_('Only include invocies issued on or before this date. Note that the invoice date '
|
||||||
|
'does not always correspond to the order or payment date.')
|
||||||
|
)),
|
||||||
|
('payment_provider',
|
||||||
|
forms.ChoiceField(
|
||||||
|
label=_('Payment provider'),
|
||||||
|
choices=[
|
||||||
|
('', _('All payment providers')),
|
||||||
|
] + [
|
||||||
|
(k, v.verbose_name) for k, v in self.event.get_payment_providers().items()
|
||||||
|
],
|
||||||
|
required=False,
|
||||||
|
help_text=_('Only include invocies for orders that are currently set to this payment provider. '
|
||||||
|
'Note that this might include some invoices of other payment providers or misses '
|
||||||
|
'some invoices if the payment provider of an order has been changed and a new order '
|
||||||
|
'has been generated.')
|
||||||
|
)),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@receiver(register_data_exporters, dispatch_uid="exporter_invoices")
|
@receiver(register_data_exporters, dispatch_uid="exporter_invoices")
|
||||||
def register_invoice_export(sender, **kwargs):
|
def register_invoice_export(sender, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user