Files @ 3f6e5ac3d151
Branch filter:

Location: CopyleftConf/copyleftconf-website/pinaxcon/templatetags/nbpy_tags.py - annotation

Brett Smith
homepage: Swap out CfP link for ticket sales.
9d5f83ec3972
3053a9bfb232
3053a9bfb232
a0422f0e8433
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
b613a5072cbd
b613a5072cbd
b613a5072cbd
9d5f83ec3972
9d5f83ec3972
9d5f83ec3972
b613a5072cbd
b613a5072cbd
b613a5072cbd
b613a5072cbd
b613a5072cbd
b613a5072cbd
b613a5072cbd
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
3053a9bfb232
9d5f83ec3972
9d5f83ec3972
9d5f83ec3972
9d5f83ec3972
9d5f83ec3972
9d5f83ec3972
9d5f83ec3972
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
d3decadad5bd
a0422f0e8433
a0422f0e8433
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
27428eeb59ec
27428eeb59ec
27428eeb59ec
1355c0ba83d3
1355c0ba83d3
2e9b94983d40
1355c0ba83d3
e3e64fe96f61
e3e64fe96f61
27428eeb59ec
27428eeb59ec
27428eeb59ec
e3e64fe96f61
27428eeb59ec
27428eeb59ec
27428eeb59ec
27428eeb59ec
27428eeb59ec
27428eeb59ec
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
d3decadad5bd
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
a0422f0e8433
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