You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.7 KiB
107 lines
3.7 KiB
from django.db import models
|
|
from phonenumber_field.modelfields import PhoneNumberField
|
|
from django.contrib import admin
|
|
|
|
# Create your models here.
|
|
class department(models.Model):
|
|
title = models.CharField(max_length=255)
|
|
uebergeordnete_abteilung = models.ForeignKey(
|
|
'self', # Verweis auf dieselbe Tabelle
|
|
on_delete=models.SET_NULL, # Verhalten beim Löschen der übergeordneten Abteilung
|
|
null=True, # Darf leer sein (falls keine übergeordnete Abteilung existiert)
|
|
blank=True,
|
|
related_name='unterabteilungen' # Ermöglicht Rückbezug
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = ("Abteilung")
|
|
verbose_name_plural = ("Abteilungen")
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
class congregation(models.Model):
|
|
|
|
title = models.CharField(("Name"), max_length=150)
|
|
|
|
class Meta:
|
|
verbose_name = ("Versammlung")
|
|
verbose_name_plural = ("Versammlungen")
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
def get_absolute_url(self):
|
|
return reverse("congregation_detail", kwargs={"pk": self.pk})
|
|
|
|
class role(models.Model):
|
|
|
|
name = models.CharField(("name"), max_length=50)
|
|
|
|
class Meta:
|
|
verbose_name = ("Rolle")
|
|
verbose_name_plural = ("Rollen")
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def get_absolute_url(self):
|
|
return reverse("role_detail", kwargs={"pk": self.pk})
|
|
|
|
class contributors(models.Model):
|
|
|
|
TAGE = {
|
|
"MiV": 1,
|
|
"MiN": 2,
|
|
"DoV": 4,
|
|
"DoN": 8,
|
|
"FrV": 16,
|
|
"FrN": 32,
|
|
"SaV": 64,
|
|
"SaN": 128,
|
|
"SoV": 256,
|
|
"SoN": 512,
|
|
"Abbau": 1024,
|
|
}
|
|
|
|
name = models.CharField(("name"), max_length=50)
|
|
firstname = models.CharField(("vorname"), max_length=50)
|
|
birthday = models.DateField(("geburtstag"), auto_now=False, auto_now_add=False, blank=True, null=True)
|
|
congregation = models.ForeignKey("main.congregation", verbose_name=("Versammlung"), on_delete=models.SET_NULL, null=True, blank=True)
|
|
roles = models.ManyToManyField("main.role", verbose_name=("role"), null=True, blank=True)
|
|
pioneer = models.BooleanField(("pionier"), default=False)
|
|
svd = models.BooleanField(("s.v.d."), default=False)
|
|
gender = models.CharField("Geschlecht",max_length=20, choices=[("M", "Männlich"), ("W", "Weiblich")])
|
|
da_approval = models.BooleanField(("Freigabe"), default=False)
|
|
deparment = models.ManyToManyField("main.department", verbose_name=("Abteilung"), null=True, blank=True)
|
|
tage = models.IntegerField(default=0) # Hier speichern wir die Bitmaske
|
|
teamleader = models.BooleanField(("Leiter"), default=False)
|
|
second_teamleader = models.BooleanField(("Gruppenleiter"), default=False)
|
|
mobilnumber = PhoneNumberField(("Mobilnummer"), null=True, blank=True)
|
|
email = models.EmailField(("E-Mail"), max_length=254, null=True, blank=True)
|
|
jwpub = models.EmailField(("JWPUB"), max_length=254, null=True, blank=True)
|
|
notes = models.CharField(("Bemerkung"), max_length=255, null=True, blank=True)
|
|
actual = models.BooleanField(("Aktuell"), default=False)
|
|
|
|
class Meta:
|
|
verbose_name = ("Helfer")
|
|
verbose_name_plural = ("Helfer")
|
|
|
|
@property
|
|
@admin.display(
|
|
ordering="name",
|
|
description="Name, Vorname",
|
|
boolean=False,
|
|
)
|
|
def full_name(self):
|
|
return self.name + ", " + self.firstname
|
|
|
|
def get_tage_list(self):
|
|
""" Gibt eine Liste der aktiven Tage zurück """
|
|
return [name for name, bit in self.TAGE.items() if self.tage & bit]
|
|
|
|
def __str__(self):
|
|
return f'{self.name}, {self.firstname}'
|
|
|
|
def get_absolute_url(self):
|
|
return reverse("contributors_detail", kwargs={"pk": self.pk}) |