Files
@ 9d5f83ec3972
Branch filter:
Location: CopyleftConf/copyleftconf-website/pinaxcon/templatetags/nbpy_tags.py
9d5f83ec3972
3.1 KiB
text/x-python
templatetags: Update donation_income for CopyleftConf 2020.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | from registrasion.models import commerce, inventory
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') + '%'
def nonvat_price(product):
return product.price * (1 - settings.INVOICE_VAT_RATE)
@register.simple_tag
def vat_amount(invoice):
return (invoice.value * settings.INVOICE_VAT_RATE).quantize(CENTS_QUANT)
@register.simple_tag
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.
'''
tickets = inventory.Product.objects.filter(category__id=settings.TICKET_PRODUCT_CATEGORY)
cheapest_ticket = tickets.order_by('price').first()
ticket_rbi = nonvat_price(cheapest_ticket)
return sum(
(nonvat_price(ticket) - ticket_rbi
for ticket in invoice.lineitem_set.filter(product__in=tickets)),
Decimal(0)).quantize(CENTS_QUANT)
# TODO: include van/de/van der/de la/etc etc etc
@register.simple_tag
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.
else:
even_split = len(tokens)
return {
"first" : " ".join(tokens[:even_split]),
"last" : " ".join(tokens[even_split:]),
}
@register.simple_tag
def company_split(name):
f = name_split(name, 18)
return f
@register.simple_tag(takes_context=True)
def special(context, user):
organiser = user.groups.filter(name='Conference organisers').exists()
try:
speaker = user.speaker_profile.presentations.count() != 0
except Exception:
speaker = False
tt = ticket_type(context)
volunteer = "Volunteer" in tt
if organiser:
return "Organizer"
elif speaker or "Speaker" in tt:
return "Speaker"
elif volunteer:
return "Staff"
else:
return ""
CLEARED = set([
"BeeWare Project",
"Project Jupyter",
"PSF Packaging WG / PyCon 2018 Chair",
"PyCon Ukraine",
"PyLadies PDX",
"Recovered Silver",
"Twisted",
"@vmbrasseur",
])
@register.simple_tag
def affiliation(ticket, user):
aff = user.attendee.attendeeprofilebase.attendeeprofile.company
if "Individual" not in ticket or "Sponsor" in ticket:
return aff
elif ticket == "Individual Supporter" and aff in CLEARED:
return aff
else:
return ""
@register.simple_tag(takes_context=True)
def ticket_type(context):
items = registrasion_tags.items_purchased(context)
for item in items:
if item.product.category.name == "Ticket":
return item.product.name
|