Skip to content
Snippets Groups Projects
Verified Commit 8cf2a21d authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add ManualInvoice model

parent cdecf453
No related branches found
No related tags found
1 merge request!10Add models for manual invoicing
...@@ -10,6 +10,7 @@ from payments import PurchasedItem ...@@ -10,6 +10,7 @@ from payments import PurchasedItem
from payments.models import BasePayment from payments.models import BasePayment
from aleksis.core.mixins import ExtensibleModel, PureDjangoModel from aleksis.core.mixins import ExtensibleModel, PureDjangoModel
from aleksis.core.models import Person
from .base import Client from .base import Client
from ..tables import PurchasedItemsTable, TotalsTable from ..tables import PurchasedItemsTable, TotalsTable
...@@ -113,3 +114,37 @@ class Invoice(BasePayment, PureDjangoModel): ...@@ -113,3 +114,37 @@ class Invoice(BasePayment, PureDjangoModel):
def get_failure_url(self): def get_failure_url(self):
return reverse("invoice_by_token", kwargs={"slug": self.token}) return reverse("invoice_by_token", kwargs={"slug": self.token})
class ManualInvoice(ExtensibleModel):
invoice_group = models.ForeignKey(InvoiceGroup, on_delete=models.CASCADE, verbose_name=_("Invoice group"))
person = models.ForeignKey(Person, on_delete=models.SET_NULL, verbose_name=_("Invoice recipient (person)"))
item_description = models.CharField(max_length=255, verbose_name=_("Purchased item"))
price = models.DecimalField(verbose_name=_("Item gross price"), max_digits=9, decimal_places=2, default="0.0")
currency = models.CharField(max_length=10, verbose_name=_("Currency"))
tax_rate = models.DecimalField(verbose_name=_("Tax rate"), max_digits=4, decimal_places=1, default="0.0")
variant = models.CharField(verbose_name=_("Payment variant"), max_length=255, blank=True)
def get_purchased_items(self):
yield PurchasedItem(name=self.item_description, quantity=1, price=self.price, currency=self.currency, sku="", tax_rate=self.tax_rate)
def get_invoice(self):
invoice, __ = Invoice.objects.get_or_create(for_content_type=ContentType.objects.get_for_model(self), for_object_id=self.pk, defaults={
"group": self.invoice_group,
"variant": self.variant,
"number": f"FIXME",
"currency": self.currency,
"total": self.price,
"tax": self.total / (self.tax_rate + 100) * self.tax_rate,
"description": self.item_description,
"billing_first_name": self.person.first_name,
"billing_last_name": self.person.last_name,
"billing_address_1": f"{self.person.street} {self.person.housenumber}",
"billing_city": self.person.place,
"billing_postcode": self.person.postal_code,
"billing_email": self.person.email,
})
return invoice
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment