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) 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})