mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Order list export: Optional columns for payment amounts
This commit is contained in:
@@ -53,9 +53,23 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
initial=True,
|
initial=True,
|
||||||
required=False
|
required=False
|
||||||
)),
|
)),
|
||||||
|
('include_payment_amounts',
|
||||||
|
forms.BooleanField(
|
||||||
|
label=_('Include payment amounts'),
|
||||||
|
initial=False,
|
||||||
|
required=False
|
||||||
|
)),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _get_all_payment_methods(self, qs):
|
||||||
|
pps = dict(get_all_payment_providers())
|
||||||
|
return sorted([(pp, pps[pp]) for pp in set(
|
||||||
|
OrderPayment.objects.exclude(provider='free').filter(order__event__in=self.events).values_list(
|
||||||
|
'provider', flat=True
|
||||||
|
).distinct()
|
||||||
|
)], key=lambda pp: pp[0])
|
||||||
|
|
||||||
def _get_all_tax_rates(self, qs):
|
def _get_all_tax_rates(self, qs):
|
||||||
tax_rates = set(
|
tax_rates = set(
|
||||||
a for a
|
a for a
|
||||||
@@ -150,6 +164,10 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
headers.append(_('Comment'))
|
headers.append(_('Comment'))
|
||||||
headers.append(_('Positions'))
|
headers.append(_('Positions'))
|
||||||
headers.append(_('Payment providers'))
|
headers.append(_('Payment providers'))
|
||||||
|
if form_data.get('include_payment_amounts'):
|
||||||
|
payment_methods = self._get_all_payment_methods(qs)
|
||||||
|
for id, vn in payment_methods:
|
||||||
|
headers.append(_('Paid by {method}').format(method=vn))
|
||||||
|
|
||||||
yield headers
|
yield headers
|
||||||
|
|
||||||
@@ -163,6 +181,23 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
taxsum=Sum('tax_value'), grosssum=Sum('value')
|
taxsum=Sum('tax_value'), grosssum=Sum('value')
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
if form_data.get('include_payment_amounts'):
|
||||||
|
payment_sum_cache = {
|
||||||
|
(o['order__id'], o['provider']): o['grosssum'] for o in
|
||||||
|
OrderPayment.objects.values('provider', 'order__id').order_by().filter(
|
||||||
|
state__in=[OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_REFUNDED]
|
||||||
|
).annotate(
|
||||||
|
grosssum=Sum('amount')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
refund_sum_cache = {
|
||||||
|
(o['order__id'], o['provider']): o['grosssum'] for o in
|
||||||
|
OrderRefund.objects.values('provider', 'order__id').order_by().filter(
|
||||||
|
state__in=[OrderRefund.REFUND_STATE_DONE, OrderRefund.REFUND_STATE_TRANSIT]
|
||||||
|
).annotate(
|
||||||
|
grosssum=Sum('amount')
|
||||||
|
)
|
||||||
|
}
|
||||||
sum_cache = {
|
sum_cache = {
|
||||||
(o['order__id'], o['tax_rate']): o for o in
|
(o['order__id'], o['tax_rate']): o for o in
|
||||||
OrderPosition.objects.values('tax_rate', 'order__id').order_by().annotate(
|
OrderPosition.objects.values('tax_rate', 'order__id').order_by().annotate(
|
||||||
@@ -234,6 +269,14 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
str(self.providers.get(p, p)) for p in sorted(set((order.payment_providers or '').split(',')))
|
str(self.providers.get(p, p)) for p in sorted(set((order.payment_providers or '').split(',')))
|
||||||
if p and p != 'free'
|
if p and p != 'free'
|
||||||
]))
|
]))
|
||||||
|
|
||||||
|
if form_data.get('include_payment_amounts'):
|
||||||
|
payment_methods = self._get_all_payment_methods(qs)
|
||||||
|
for id, vn in payment_methods:
|
||||||
|
row.append(
|
||||||
|
payment_sum_cache.get((order.id, id), Decimal('0.00')) -
|
||||||
|
refund_sum_cache.get((order.id, id), Decimal('0.00'))
|
||||||
|
)
|
||||||
yield row
|
yield row
|
||||||
|
|
||||||
def iterate_fees(self, form_data: dict):
|
def iterate_fees(self, form_data: dict):
|
||||||
|
|||||||
Reference in New Issue
Block a user