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.

95 lines
3.5 KiB

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'<span style="color: {color}; font-size: 16px;">●</span>'
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'<span style="color: {color}; font-size: 16px;">●</span>')
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)

Powered by TurnKey Linux.