From b613a5072cbdecfabdf3dcab57f98e7d84585e9e 2019-11-11 19:30:05 From: Brett Smith Date: 2019-11-11 19:30:05 Subject: [PATCH] Initial code to report VAT on invoices. --- diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py index 9811345eb40a8c72bdedf7585082292cd53187c2..6352f523ab07a70cfec52d919fb0c0d109bdb8f1 100644 --- a/pinaxcon/settings.py +++ b/pinaxcon/settings.py @@ -1,6 +1,7 @@ import os import dj_database_url +from decimal import Decimal PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) @@ -315,6 +316,13 @@ TICKET_PRODUCT_CATEGORY = 1 INVOICE_CURRENCY = "USD" +# VAT rate is 21% +# When PINAX_VAT_RATE is set, this percentage of the invoice total is +# displayed as a line item as the amount of VAT paid. +INVOICE_VAT_RATE = Decimal(os.environ.get('PINAX_VAT_RATE') or 0) +if INVOICE_VAT_RATE > 1: + INVOICE_VAT_RATE /= 100 + MARKDOWN_DEUX_STYLES = { "default": { "safe_mode": False, diff --git a/pinaxcon/templates/registrasion/invoice/details.html b/pinaxcon/templates/registrasion/invoice/details.html index 29e55d0bd2772d1624fa5e4f70cd0e8f1787fa1b..464057020909a5e15f0597fa21512a45211fcb15 100644 --- a/pinaxcon/templates/registrasion/invoice/details.html +++ b/pinaxcon/templates/registrasion/invoice/details.html @@ -38,6 +38,13 @@ {% endblock %} {% block extra_line_items_after_total %} + {% vat_amount(invoice) as vat %} + {% if vat %} + + Includes {{ vat_rate }} VAT: + ${{ vat }} + + {% endif %} {% donation_income invoice as donation %} {% if donation %} diff --git a/pinaxcon/templatetags/nbpy_tags.py b/pinaxcon/templatetags/nbpy_tags.py index e1a28e17fe8f82a6c270a6cc1eb871646e789da6..6c3142f777786a2d475561728467b79b39122548 100644 --- a/pinaxcon/templatetags/nbpy_tags.py +++ b/pinaxcon/templatetags/nbpy_tags.py @@ -11,6 +11,16 @@ 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) + +@register.simple_tag +def vat_rate(): + return VAT_RATE @register.simple_tag(takes_context=True) def donation_income(context, invoice): @@ -42,7 +52,7 @@ def donation_income(context, invoice): rbi.append(line.total_price * fsa_rate) 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