Refs #99 -- Improve support for currencies with less than 2 decimal places (#783)

* Refs #99 -- Fix stripe support for zero-decimal currencies

* Add new money formatting method

* Force decimal places in many places

* Locale-aware currency rendering

* Fix currencies in more places

* More currency fixes
This commit is contained in:
Raphael Michel
2018-02-26 10:46:07 +01:00
committed by GitHub
parent 29e22a0c6c
commit 3c3e59e932
49 changed files with 467 additions and 211 deletions

View File

@@ -7,7 +7,8 @@ from django import forms
from django.conf import settings
from django.contrib.staticfiles import finders
from django.db.models import Sum
from django.utils.formats import date_format, localize
from django.template.defaultfilters import floatformat
from django.utils.formats import date_format
from django.utils.timezone import get_current_timezone, now
from django.utils.translation import pgettext, pgettext_lazy, ugettext as _
@@ -194,49 +195,50 @@ class OverviewReport(Report):
]
items_by_category, total = order_overview(self.event, subevent=self.form_data.get('subevent'))
places = settings.CURRENCY_PLACES.get(self.event.currency, 2)
for tup in items_by_category:
if tup[0]:
tstyledata.append(('FONTNAME', (0, len(tdata)), (-1, len(tdata)), 'OpenSansBd'))
tdata.append([
tup[0].name,
str(tup[0].num_canceled[0]), localize(tup[0].num_canceled[1]),
str(tup[0].num_refunded[0]), localize(tup[0].num_refunded[1]),
str(tup[0].num_expired[0]), localize(tup[0].num_expired[1]),
str(tup[0].num_pending[0]), localize(tup[0].num_pending[1]),
str(tup[0].num_paid[0]), localize(tup[0].num_paid[1]),
str(tup[0].num_total[0]), localize(tup[0].num_total[1]),
str(tup[0].num_canceled[0]), floatformat(tup[0].num_canceled[1], places),
str(tup[0].num_refunded[0]), floatformat(tup[0].num_refunded[1], places),
str(tup[0].num_expired[0]), floatformat(tup[0].num_expired[1], places),
str(tup[0].num_pending[0]), floatformat(tup[0].num_pending[1], places),
str(tup[0].num_paid[0]), floatformat(tup[0].num_paid[1], places),
str(tup[0].num_total[0]), floatformat(tup[0].num_total[1], places),
])
for item in tup[1]:
tdata.append([
" " + str(item.name),
str(item.num_canceled[0]), localize(item.num_canceled[1]),
str(item.num_refunded[0]), localize(item.num_refunded[1]),
str(item.num_expired[0]), localize(item.num_expired[1]),
str(item.num_pending[0]), localize(item.num_pending[1]),
str(item.num_paid[0]), localize(item.num_paid[1]),
str(item.num_total[0]), localize(item.num_total[1]),
str(item.num_canceled[0]), floatformat(item.num_canceled[1], places),
str(item.num_refunded[0]), floatformat(item.num_refunded[1], places),
str(item.num_expired[0]), floatformat(item.num_expired[1], places),
str(item.num_pending[0]), floatformat(item.num_pending[1], places),
str(item.num_paid[0]), floatformat(item.num_paid[1], places),
str(item.num_total[0]), floatformat(item.num_total[1], places),
])
if item.has_variations:
for var in item.all_variations:
tdata.append([
" " + str(var),
str(var.num_canceled[0]), localize(var.num_canceled[1]),
str(var.num_refunded[0]), localize(var.num_refunded[1]),
str(var.num_expired[0]), localize(var.num_expired[1]),
str(var.num_pending[0]), localize(var.num_pending[1]),
str(var.num_paid[0]), localize(var.num_paid[1]),
str(var.num_total[0]), localize(var.num_total[1]),
str(var.num_canceled[0]), floatformat(var.num_canceled[1], places),
str(var.num_refunded[0]), floatformat(var.num_refunded[1], places),
str(var.num_expired[0]), floatformat(var.num_expired[1], places),
str(var.num_pending[0]), floatformat(var.num_pending[1], places),
str(var.num_paid[0]), floatformat(var.num_paid[1], places),
str(var.num_total[0]), floatformat(var.num_total[1], places),
])
tdata.append([
_("Total"),
str(total['num_canceled'][0]), localize(total['num_canceled'][1]),
str(total['num_refunded'][0]), localize(total['num_refunded'][1]),
str(total['num_expired'][0]), localize(total['num_expired'][1]),
str(total['num_pending'][0]), localize(total['num_pending'][1]),
str(total['num_paid'][0]), localize(total['num_paid'][1]),
str(total['num_total'][0]), localize(total['num_total'][1]),
str(total['num_canceled'][0]), floatformat(total['num_canceled'][1], places),
str(total['num_refunded'][0]), floatformat(total['num_refunded'][1], places),
str(total['num_expired'][0]), floatformat(total['num_expired'][1], places),
str(total['num_pending'][0]), floatformat(total['num_pending'][1], places),
str(total['num_paid'][0]), floatformat(total['num_paid'][1], places),
str(total['num_total'][0]), floatformat(total['num_total'][1], places),
])
table = Table(tdata, colWidths=colwidths, repeatRows=3)