Files
fet2020/fet2020/finance/models.py

148 lines
3.9 KiB
Python

from django.core.validators import FileExtensionValidator, ValidationError
from django.db import models
from members.models import Member
class BankData(models.Model):
# members can be deleted but never their bank datas
bankdata_creator = models.ForeignKey(
Member,
on_delete=models.SET_NULL,
null=True,
verbose_name="Verknüpfung zum Mitglied",
)
name = models.CharField(max_length=128, verbose_name="Kontoinhaber:in")
iban = models.CharField(max_length=34, verbose_name="IBAN")
bic = models.CharField(max_length=11, verbose_name="BIC")
is_disabled = models.BooleanField(default=False, verbose_name="deaktiviert")
class Meta:
verbose_name = "Bankdaten"
verbose_name_plural = "Bankdaten"
def __str__(self):
return f"{self.name} - {self.iban}"
class Resolution(models.Model):
id = models.CharField(primary_key=True, max_length=128)
name = models.CharField(max_length=128)
is_visible = models.BooleanField(default=False, verbose_name="sichtbar")
class Meta:
verbose_name = "Beschluss"
verbose_name_plural = "Beschlüsse"
def __str__(self):
return f"{self.name}"
class Wiref(models.Model):
wiref_id = models.CharField(max_length=10, blank=True, null=True)
file_field = models.FileField(
upload_to="uploads/finance/wiref/",
validators=[FileExtensionValidator(["pdf"])],
blank=True,
null=True,
verbose_name="Wiref Formular",
)
class Meta:
verbose_name = "Wiref Formular"
verbose_name_plural = "Wiref Formulare"
def __str__(self):
return f"{self.wiref_id}"
class Bill(models.Model):
# members can be deleted but never their bills
bill_creator = models.ForeignKey(
Member, on_delete=models.PROTECT, verbose_name="Verantwortliche:r"
)
bankdata = models.ForeignKey(
BankData,
on_delete=models.SET_NULL,
blank=True,
null=True,
verbose_name="Kontodaten",
)
resolution = models.ForeignKey(
Resolution,
on_delete=models.SET_NULL,
blank=True,
null=True,
verbose_name="Beschlussnummer",
)
date = models.DateField()
invoice = models.TextField()
amount = models.DecimalField(
max_digits=7, decimal_places=2, verbose_name="Betrag (EUR)"
)
purpose = models.CharField(max_length=140, verbose_name="Verwendungszweck")
class Affiliation(models.TextChoices):
VEREIN = "V", "Vereinsbudget"
OFFICIAL = "B", "Offizielles Budget"
affiliation = models.CharField(
max_length=1, choices=Affiliation.choices, verbose_name="Abrechnungsbudget"
)
class Payer(models.TextChoices):
ME = "M", "Privat"
VEREIN = "V", "Verein (Safe/Kreditkarte)"
payer = models.CharField(max_length=1, choices=Payer.choices)
only_digital = models.BooleanField(default=False, verbose_name="Digitale Rechnung")
file_field = models.FileField(
upload_to="uploads/finance/bills/",
validators=[FileExtensionValidator(["pdf"])],
blank=True,
null=True,
)
comment = models.TextField(blank=True, null=True)
class Status(models.TextChoices):
SUBMITTED = "S", "Eingereicht"
CLEARED = "C", "Abgerechnet"
FINISHED = "F", "Abgeschlossen"
status = models.CharField(
max_length=1,
choices=Status.choices,
default=Status.SUBMITTED,
verbose_name="Status",
)
wiref = models.ForeignKey(
Wiref,
on_delete=models.SET_NULL,
blank=True,
null=True,
verbose_name="Wiref",
)
date_created = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = "Rechnung"
verbose_name_plural = "Rechnungen"
def __str__(self):
return f"{self.purpose}"
def clean(self):
if self.status is None:
self.status = Bill.Status.SUBMITTED