diff --git a/pretix_servicefees/signals.py b/pretix_servicefees/signals.py index 884cb83..6c0cc1f 100644 --- a/pretix_servicefees/signals.py +++ b/pretix_servicefees/signals.py @@ -141,21 +141,26 @@ def get_fees( if split_taxes: # split taxes based on products ordered d = defaultdict(lambda: Decimal("0.00")) + trs = {} for p in positions: if isinstance(p, CartPosition): tr = p.item.tax_rule else: tr = p.tax_rule - d[tr] += p.price - p.tax_value + if not tr: + tr = tax_rule_zero + # use tr.pk as key as tax_rule_zero is not hashable + d[tr.pk] += p.price - p.tax_value + trs[tr.pk] = tr - base_values = sorted([tuple(t) for t in d.items()], key=lambda t: t[0].rate) - sum_base = sum(t[1] for t in base_values) + base_values = sorted([(trs[key], value) for key, value in d.items()], key=lambda t: t[0].rate) + sum_base = sum(value for key, value in base_values) if sum_base: fee_values = [ - (t[0], round_decimal(fee * t[1] / sum_base, event.currency)) - for t in base_values + (key, round_decimal(fee * value / sum_base, event.currency)) + for key, value in base_values ] - sum_fee = sum(t[1] for t in fee_values) + sum_fee = sum(value for key, value in fee_values) # If there are rounding differences, we fix them up, but always leaning to the benefit of the tax # authorities