From 6b2bc71be944b489e3d6b99541e18e1189398862 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 1 Feb 2020 13:06:40 +0100 Subject: [PATCH] Order list export: consistent decimals --- src/pretix/base/exporter.py | 18 ++++++++++++++++++ src/pretix/base/exporters/orderlist.py | 18 ++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/exporter.py b/src/pretix/base/exporter.py index 368acc1612..8683568a42 100644 --- a/src/pretix/base/exporter.py +++ b/src/pretix/base/exporter.py @@ -1,10 +1,12 @@ import io import tempfile from collections import OrderedDict +from decimal import Decimal from typing import Tuple from defusedcsv import csv from django import forms +from django.utils.formats import localize from django.utils.translation import ugettext, ugettext_lazy as _ from openpyxl import Workbook from openpyxl.cell.cell import KNOWN_TYPES @@ -117,12 +119,20 @@ class ListExporter(BaseExporter): if output_file: writer = csv.writer(output_file, **kwargs) for line in self.iterate_list(form_data): + line = [ + localize(f) if isinstance(f, Decimal) else f + for f in line + ] writer.writerow(line) return self.get_filename() + '.csv', 'text/csv', None else: output = io.StringIO() writer = csv.writer(output, **kwargs) for line in self.iterate_list(form_data): + line = [ + localize(f) if isinstance(f, Decimal) else f + for f in line + ] writer.writerow(line) return self.get_filename() + '.csv', 'text/csv', output.getvalue().encode("utf-8") @@ -196,12 +206,20 @@ class MultiSheetListExporter(ListExporter): if output_file: writer = csv.writer(output_file, **kwargs) for line in self.iterate_sheet(form_data, sheet): + line = [ + localize(f) if isinstance(f, Decimal) else f + for f in line + ] writer.writerow(line) return self.get_filename() + '.csv', 'text/csv', None else: output = io.StringIO() writer = csv.writer(output, **kwargs) for line in self.iterate_sheet(form_data, sheet): + line = [ + localize(f) if isinstance(f, Decimal) else f + for f in line + ] writer.writerow(line) return self.get_filename() + '.csv', 'text/csv', output.getvalue().encode("utf-8") diff --git a/src/pretix/base/exporters/orderlist.py b/src/pretix/base/exporters/orderlist.py index e9f5d1b291..41446e7bd7 100644 --- a/src/pretix/base/exporters/orderlist.py +++ b/src/pretix/base/exporters/orderlist.py @@ -5,7 +5,7 @@ import pytz from django import forms from django.db.models import DateTimeField, F, Max, OuterRef, Subquery, Sum from django.dispatch import receiver -from django.utils.formats import date_format, localize +from django.utils.formats import date_format from django.utils.translation import pgettext, ugettext as _, ugettext_lazy from pretix.base.models import ( @@ -134,7 +134,7 @@ class OrderListExporter(MultiSheetListExporter): for order in qs.order_by('datetime'): row = [ order.code, - localize(order.total), + order.total, order.get_status_display(), order.email, order.datetime.astimezone(tz).strftime('%Y-%m-%d'), @@ -163,7 +163,7 @@ class OrderListExporter(MultiSheetListExporter): row += [ order.payment_date.astimezone(tz).strftime('%Y-%m-%d') if order.payment_date else '', - localize(full_fee_sum_cache.get(order.id) or Decimal('0.00')), + full_fee_sum_cache.get(order.id) or Decimal('0.00'), order.locale, ] @@ -173,10 +173,12 @@ class OrderListExporter(MultiSheetListExporter): {'grosssum': Decimal('0.00'), 'taxsum': Decimal('0.00')}) row += [ - localize(taxrate_values['grosssum'] + fee_taxrate_values['grosssum']), - localize(taxrate_values['grosssum'] - taxrate_values['taxsum'] - + fee_taxrate_values['grosssum'] - fee_taxrate_values['taxsum']), - localize(taxrate_values['taxsum'] + fee_taxrate_values['taxsum']), + taxrate_values['grosssum'] + fee_taxrate_values['grosssum'], + ( + taxrate_values['grosssum'] - taxrate_values['taxsum'] + + fee_taxrate_values['grosssum'] - fee_taxrate_values['taxsum'] + ), + taxrate_values['taxsum'] + fee_taxrate_values['taxsum'], ] row.append(', '.join([i.number for i in order.invoices.all()])) @@ -464,7 +466,7 @@ class PaymentListExporter(ListExporter): d2, obj.get_state_display(), obj.state, - localize(obj.amount * (-1 if isinstance(obj, OrderRefund) else 1)), + obj.amount * (-1 if isinstance(obj, OrderRefund) else 1), provider_names.get(obj.provider, obj.provider) ] yield row