Skip to content
Snippets Groups Projects
Commit b443a667 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Add model MembershipPayment

parent 62857eea
No related branches found
No related tags found
1 merge request!7Draft: Resolve "Add MembershipPayment model"
Pipeline #82363 failed
from decimal import Decimal
from django.db import models
from django.utils.translation import gettext_lazy as _
from djmoney.models.fields import MoneyField
from localflavor.generic.models import BICField, IBANField
from payments import PurchasedItem
from aleksis.apps.tezor.models.base import Client
from aleksis.apps.tezor.models.invoice import Invoice, InvoiceGroup
from aleksis.core.mixins import ExtensibleModel
from aleksis.core.models import Group, Person
......@@ -121,3 +126,63 @@ class Membership(ExtensibleModel):
sepa_mandate = models.OneToOneField(
SEPAMandate, verbose_name=_("Linked SEPA mandate"), null=True, on_delete=models.SET_NULL
)
class MembershipPayment(ExtensibleModel):
membership = models.ForeignKey(
Membership, verbose_name=_("Membership"), on_delete=models.CASCADE
)
due_date = models.DateField(verbose_name=_("Due date"))
begin = models.DateField(verbose_name=_("Start of payed membership"))
end = models.DateField(verbose_name=_("End of payed membership"))
fees = MoneyField(verbose_name=_("Membership fees"), default=0, max_digits=8, decimal_places=2)
def get_invoice(self):
# FIXME Maybe do not hard-code this
client, __ = Client.objects.get_or_create(name="Teckids e.V.")
group, __ = InvoiceGroup.objects.get_or_create(
name="Mitgliedsbeiträge und Spenden",
client=client,
defaults={
"template_name": "paweljong/invoice_pdf.html",
},
)
invoice, __ = Invoice.objects.get_or_create(
for_content_type=ContentType.objects.get_for_model(self),
for_object_id=self.pk,
defaults={
"group": group,
"number": f"MSP-{self.begin.strftime('%Y-%m-%d')}-{self.id}",
"currency": "EUR",
"total": self.fees,
"tax": 0,
"description": _("Membership fee of {}").format(self.membership.person),
"billing_first_name": self.membership.person.first_name,
"billing_last_name": self.membership.person.last_name,
"billing_address_1": f"{self.membersip.person.street} {self.membersip.person.housenumber}",
"billing_city": self.membersip.person.place,
"billing_postcode": self.person.membersip.postal_code,
"billing_email": self.membersip.person.email,
},
)
return invoice
def get_purchased_items(self):
# FIXME Maybe do not hard-code the tax rate and currency
# First, return main amount
yield PurchasedItem(
name="Membership fee",
quantity=1,
price=Decimal(self.event.cost),
currency="EUR",
sku="MEMBERSHIP",
tax_rate=0,
)
class Meta:
verbose_name = _("Membership payment")
verbose_name_plural = _("Membership payments")
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