@@ -2,24 +2,34 @@ from registrasion.models import commerce
from registrasion.controllers.category import CategoryController
from registrasion.controllers.item import ItemController
from registrasion.templatetags import registrasion_tags
from decimal import Decimal
from django import template
from django.conf import settings
from django.db.models import Sum
from urllib import urlencode # TODO: s/urllib/six.moves.urllib/
register = template.Library()
CENTS_QUANT = Decimal('.01')
VAT_RATE = str(settings.INVOICE_VAT_RATE * 100).rstrip('.0') + '%'
@register.simple_tag
def vat_amount(invoice):
return (invoice.value * settings.INVOICE_VAT_RATE).quantize(CENTS_QUANT)
def vat_rate():
return VAT_RATE
@register.simple_tag(takes_context=True)
def donation_income(context, invoice):
''' Calculates the donation income for a given invoice.
Returns:
the donation income.
'''
# 15% (FSA) goes to Conservancy; 85% is real goods
@@ -33,25 +43,25 @@ def donation_income(context, invoice):
if line.product.name.startswith("Unaffiliated Individual"):
# Includes full price & discounts
rbi.append(line.total_price * fsa_rate)
else:
if line.total_price > 0:
rbi.append(rbi_full_ticket)
elif line.total_price < 0:
rbi.append(rbi_early_bird_discount)
elif line.product.category.name == "T-Shirt":
donation = max(Decimal('0'), (invoice.value - sum(rbi)))
return donation.quantize(Decimal('.01'))
return donation.quantize(CENTS_QUANT)
# TODO: include van/de/van der/de la/etc etc etc
def name_split(name, split_characters=None):
tokens = name.split()
if split_characters is None or len(name) > split_characters:
even_split = int((len(tokens) + 1) / 2) # Round up.
even_split = len(tokens)