From b6938703a69bbd0c98bf7c07aead8fc1631889ce Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sat, 5 Mar 2022 21:44:18 +0100 Subject: [PATCH] Add some model stubs --- aleksis/apps/tezor/models/__init__.py | 0 aleksis/apps/tezor/models/base.py | 13 +++++++ aleksis/apps/tezor/models/invoice.py | 55 +++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 aleksis/apps/tezor/models/__init__.py create mode 100644 aleksis/apps/tezor/models/base.py create mode 100644 aleksis/apps/tezor/models/invoice.py diff --git a/aleksis/apps/tezor/models/__init__.py b/aleksis/apps/tezor/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/aleksis/apps/tezor/models/base.py b/aleksis/apps/tezor/models/base.py new file mode 100644 index 0000000..e8feec9 --- /dev/null +++ b/aleksis/apps/tezor/models/base.py @@ -0,0 +1,13 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ + +from aleksis.core.mixins import ExtensibleModel + + +class Client(ExtensibleModel): + name = models.CharField(verbose_name=_("Name")) + + class Meta: + constraints = [ + models.UniqueConstraint(fields=["name", "site"], name="uniq_client_per_site") + ] diff --git a/aleksis/apps/tezor/models/invoice.py b/aleksis/apps/tezor/models/invoice.py new file mode 100644 index 0000000..9c82d15 --- /dev/null +++ b/aleksis/apps/tezor/models/invoice.py @@ -0,0 +1,55 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ + +from djmoney.models.fields import CurrencyField, MoneyField + +from aleksis.core.mixins import ExtensibleModel + +from .base import Client + + +class InvoiceGroup(ExtensibleModel): + name = models.CharField(verbose_name=_("Invoice group name"), max_length=255) + client = models.ForeignKey(Client, verbose_name=_("Linked client"), related_name="invoice_groups") + + class Meta: + constraints = [ + models.UniqueConstraint(fields=["client", "name"], name="group_uniq_per_client") + ] + + +class Invoice(ExtensibleModel): + group = models.ForeignKey(InvoiceGroup, verbose_name=_("Invoice group"), related_name="invoices") + + number = models.CharField(verbose_name=_("Invoice number")) + date = models.DateField(verbose_name=_("Invoice date")) + + @property + def currency(self): + try: + return self.positions.first().net_amount_currency + except InvoicePosition.DoesNotExist: + return None + + class Meta: + constraints = [ + models.UniqueConstraint(fields=["group", "number"], name="number_uniq_per_group") + ] + + +class InvoicePosition(ExtensibleModel): + invoice = models.ForeignKey(Invoice, verbose_name=_("Invoice"), related_name="positions") + + description = models.TextField(verbose_name=_("Description")) + + vat_rate = models.PositiveSmallIntegerField(verbose_name=_("VAT rate"), default=0) + net_amount = models.MoneyField(verbose_name=_("Net amount")) + + @property + def gross_amount(self): + # FIXME turn into manager/annotation/etc. + return self.net_amount * (1 + self.vat_rate / 100) + + class Meta: + # FIXME Add check constraint for currency + pass -- GitLab