from django.contrib import admin from django.utils.translation import gettext_lazy as _ from django.utils.html import format_html from django.urls import reverse from .models import AutomaticReport, ReportLog @admin.register(AutomaticReport) class AutomaticReportAdmin(admin.ModelAdmin): list_display = [ 'name', 'frequency', 'is_active', 'last_sent', 'created_by', 'created_at', 'email_count' ] list_filter = ['frequency', 'is_active', 'created_at', 'include_naturschutzbehoerde', 'include_jagdbehoerde'] search_fields = ['name', 'description'] readonly_fields = ['created_by', 'created_at', 'updated_at'] fieldsets = ( (None, { 'fields': ('name', 'description', 'is_active') }), (_('E-Mail-Einstellungen'), { 'fields': ('email_addresses',) }), (_('Filter-Einstellungen'), { 'fields': ('include_naturschutzbehoerde', 'include_jagdbehoerde') }), (_('Zeitplan'), { 'fields': ('frequency',) }), (_('Metadaten'), { 'fields': ('created_by', 'created_at', 'updated_at', 'last_sent'), 'classes': ('collapse',) }), ) def save_model(self, request, obj, form, change): if not change: # Creating new object obj.created_by = request.user super().save_model(request, obj, form, change) def email_count(self, obj): """Show number of email addresses.""" count = obj.email_addresses.count() return f"{count} E-Mail-Adresse(n)" email_count.short_description = _("E-Mail-Adressen") @admin.register(ReportLog) class ReportLogAdmin(admin.ModelAdmin): list_display = [ 'created_at', 'get_report_type', 'date_range', 'patient_count', 'has_email_recipients', 'filters_used' ] list_filter = [ 'automatic_report', 'include_naturschutzbehörde', 'include_jagdbehörde', 'created_at' ] search_fields = ['automatic_report__name'] readonly_fields = [ 'automatic_report', 'date_from', 'date_to', 'include_naturschutzbehörde', 'include_jagdbehörde', 'patient_count', 'email_sent_to', 'created_at', 'csv_file' ] def get_report_type(self, obj): """Show report type.""" if obj.automatic_report: return format_html( ' Automatisch' ) return format_html( ' Manuell' ) get_report_type.short_description = _("Typ") def date_range(self, obj): """Show date range.""" return f"{obj.date_from} - {obj.date_to}" date_range.short_description = _("Zeitraum") def has_email_recipients(self, obj): """Show if email was sent.""" if obj.email_sent_to: return format_html( ' {} Empfänger', len(obj.email_sent_to) ) return format_html( ' Download' ) has_email_recipients.short_description = _("Versendung") def filters_used(self, obj): """Show which filters were used.""" filters = [] if obj.include_naturschutzbehörde: filters.append("Naturschutzbehörde") if obj.include_jagdbehörde: filters.append("Jagdbehörde") return ", ".join(filters) if filters else _("Keine Filter") filters_used.short_description = _("Filter") def has_add_permission(self, request): """Disable manual creation of logs.""" return False # Custom admin site configuration admin.site.site_header = "Django FBF Administration" admin.site.site_title = "Django FBF Admin" admin.site.index_title = "Willkommen zur Django FBF Administration"