diff --git a/aleksis/apps/tezor/models/invoice.py b/aleksis/apps/tezor/models/invoice.py index 356aa4b942a59e89ba1f2b6c2266f7e2840c793d..03f4fc9c6131ade2eb47fac6b9b05bc97197eec8 100644 --- a/aleksis/apps/tezor/models/invoice.py +++ b/aleksis/apps/tezor/models/invoice.py @@ -10,6 +10,7 @@ from payments.models import BasePayment from aleksis.core.mixins import ExtensibleModel, PureDjangoModel from .base import Client +from ..tables import PurchasedItemsTable, TotalsTable class InvoiceGroup(ExtensibleModel): @@ -44,3 +45,30 @@ class Invoice(BasePayment, PureDjangoModel): constraints = [ models.UniqueConstraint(fields=["transaction_id", "group"], name="number_uniq_per_group") ] + + @property + def purchased_items_table(self): + items = [i._asdict() for i in self.get_purchased_items()] + return PurchasedItemsTable(items) + + @property + def totals_table(self): + tax_amounts = {} + for item in self.get_purchased_items(): + tax_amounts.setdefault(item.tax_rate, 0) + tax_amounts[item.tax_rate] += item.price / (item.tax_rate + 100) * item.tax_rate + + values = [] + for tax_rate, total in tax_amounts: + values.append({ + "name": _("Included VAT {} %").format(tax_rate), + "value": total, + "currency": self.currency, + }) + values.append({ + "name": _("Gross total"), + "value": self.total, + "currency": self.currency, + }) + + return TotalsTable(values) diff --git a/aleksis/apps/tezor/tables.py b/aleksis/apps/tezor/tables.py new file mode 100644 index 0000000000000000000000000000000000000000..5eff6243995caa0a3d34766612a75c5a2617a86d --- /dev/null +++ b/aleksis/apps/tezor/tables.py @@ -0,0 +1,16 @@ +import django_tables2 as tables + + +class PurchasedItemsTable(tables.Table): + sku = tables.Column() + name = tables.Column() + tax_rate = tables.Column() + quantity = tables.Column() + price = tables.Column() + currency = tables.Column() + + +class TotalsTable(tables.Table): + name = tables.Column() + value = tables.Column() + currency = tables.Column()