from django import forms from django.contrib import admin import main.models as MainDB from datetime import date, datetime from django.utils.html import format_html from import_export import resources from import_export.admin import ExportMixin, ImportMixin, ImportExportModelAdmin class contributorsResource(resources.ModelResource): class Meta: model = MainDB.contributors # Register your models here. @admin.register(MainDB.contributors) # class DeinModellAdmin(ImportExportModelAdmin): # pass # Damit hast du Import/Export-Funktionalität im Django Admin class MainDB_contributorsAdmin(ExportMixin, ImportMixin, admin.ModelAdmin): resource_class = contributorsResource list_display = ('full_name', 'actual', 'da_approval', 'leader', 'tage_anzeige', 'get_deparment', 'gender', 'birthday_year', 'get_congregation', 'mobilnumber', 'email') list_filter = ('gender', 'roles', 'deparment', 'da_approval', 'actual') search_fields = ('name', 'firstname', 'congregation__title', 'deparment__title', 'mobilnumber', 'email', 'jwpub') def get_congregation(self, obj): return obj.congregation get_congregation.short_description = 'Versammlung' get_congregation.admin_order_field = 'congregation__title' 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 nur das Jahr des Birthdays anzuzeigen def birthday_year(self, obj): year = obj.birthday.year if obj.birthday != None else 0 return int(datetime.strftime(date.today(), "%Y")) - year birthday_year.short_description = 'Alter' # Teamleiter ansicht def leader(self, obj): if obj.teamleader: color = "green" elif not obj.teamleader and obj.second_teamleader: color = "gold" else: color = "gray" status = f'' return format_html(status) # Verfügbarkeit anzeigen def tage_anzeige(self, obj): """ Kompakte Anzeige mit 2er-Gruppen in farbigen Punkten """ tage_pairs = [ ("MiV", "MiN"), ("DoV", "DoN"), ("FrV", "FrN"), ("SaV", "SaN"), ("SoV", "SoN"), ("Abbau", None) # Extra2 hat keinen Partner, wird einzeln bewertet ] symbols = [] for tag1, tag2 in tage_pairs: active1 = obj.tage & obj.TAGE[tag1] active2 = obj.TAGE.get(tag2, 0) and obj.tage & obj.TAGE[tag2] if tag2 else None # Sicherstellen, dass None nicht bewertet wird if tag2 is None: # Falls nur ein Eintrag in der Gruppe existiert color = "green" if active1 else "red" # Entweder Grün oder Rot else: if active1 and active2: color = "green" # 🟢 beide aktiv elif active1 or active2: color = "gold" # 🟡 nur einer aktiv else: color = "red" # 🔴 beide inaktiv symbols.append(f'') return format_html(" ".join(symbols)) admin.site.register(MainDB.department) @admin.register(MainDB.congregation) class MainDB_congregationAdmin(admin.ModelAdmin): list_display = ('id', 'title') admin.site.register(MainDB.role)