diff --git a/crewpulse/settings.py b/crewpulse/settings.py index 4de4ce4..8f10119 100644 --- a/crewpulse/settings.py +++ b/crewpulse/settings.py @@ -31,13 +31,20 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ + #ADD_ONs 'jazzmin', + 'phonenumber_field', + + #Defaul 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + + # My Apps + 'main', ] MIDDLEWARE = [ diff --git a/main/admin.py b/main/admin.py index 8c38f3f..0d480c8 100644 --- a/main/admin.py +++ b/main/admin.py @@ -1,3 +1,35 @@ from django.contrib import admin +import main.models as MainDB # Register your models here. +@admin.register(MainDB.contributors) +class MainDB_contributorsAdmin(admin.ModelAdmin): + + list_display = ('id', 'da_approval', 'teamleader', 'second_teamleader', 'gender', 'full_name', 'birthday_year', 'get_congregation', 'pioneer', 'get_deparment', 'mobilnumber', 'email') + + list_filter = ('gender', 'roles', 'deparment', 'congregation') + + def get_congregation(self, obj): + # Gebe eine durch Komma getrennte Liste der Namen der contributors zurück + return ", ".join([str(congregation) for congregation in obj.congregation.all()]) + get_congregation.short_description = 'Versammlung' # Optional: Benennung der Spalte + + def get_deparment(self, obj): + # Gebe eine durch Komma getrennte Liste der Namen der contributors zurück + return ", ".join([str(deparment) for deparment in obj.deparment.all()]) + get_deparment.short_description = 'Abteilung' # Optional: Benennung der Spalte + + # Methode, um den vollständigen Namen zu kombinieren + def full_name(self, obj): + return f"{obj.name}, {obj.firstname}" + full_name.short_description = 'Name' # Spaltenüberschrift im Admin ändern + + # Methode, um nur das Jahr des Birthdays anzuzeigen + def birthday_year(self, obj): + return obj.birthday.year if obj.birthday else None + birthday_year.short_description = 'Geburtsjahr' + + +admin.site.register(MainDB.department) +admin.site.register(MainDB.congregation) +admin.site.register(MainDB.role) \ No newline at end of file diff --git a/main/models.py b/main/models.py index 71a8362..d58d962 100644 --- a/main/models.py +++ b/main/models.py @@ -1,3 +1,90 @@ from django.db import models +from phonenumber_field.modelfields import PhoneNumberField + # 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): + + DAY_OPTIONS = [ + ('MI', 'Mittwoch'), + ('DO', 'Donnerstag'), + ('FRV', 'Freitag vormittag'), + ('FRN', 'Freitag nachmittag'), + ('SAV', 'Samstag vormittag'), + ('SAN', 'Samstag nachmittag'), + ('SOV', 'Sonntag vormittag'), + ('SON', 'Sonntag nachmittag'), + ('SOA', 'Sonntag abbau'), + ('MO', 'Montag'), + ] + + 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) + congregation = models.ManyToManyField("main.congregation", verbose_name=("congregation"), null=True) + roles = models.ManyToManyField("main.role", verbose_name=("role"), null=True) + pioneer = models.BooleanField(("pionier")) + 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=("department"), null=True, blank=True) + availability = models.CharField(("Verfügbarkeit"), max_length=50, choices=DAY_OPTIONS, blank=True) + teamleader = models.BooleanField(("Leiter"), default=False) + second_teamleader = models.BooleanField(("V-Leiter"), default=False) + mobilnumber = PhoneNumberField(("Mobilnummer"), null=True, blank=True) + email = models.EmailField(("E-Mail"), max_length=254, null=True, blank=True) + + class Meta: + verbose_name = ("Helfer") + verbose_name_plural = ("Helfer") + + def __str__(self): + return f'{self.name}, {self.firstname}' + + def get_absolute_url(self): + return reverse("contributors_detail", kwargs={"pk": self.pk}) \ No newline at end of file