from django.contrib import admin from django.utils.html import format_html from django.utils.safestring import mark_safe from .models import HomeWidget, HomeWidgetConditionGroup, HomeWidgetCondition, TeambuildingVote @admin.register(TeambuildingVote) class TeambuildingVoteAdmin(admin.ModelAdmin): list_display = ("id", "voter_name", "vote_gael", "vote_charly", "vote_tequila", "vote_vivien", "created_at") list_filter = ("created_at",) search_fields = ("voter_name",) class HomeWidgetConditionInline(admin.TabularInline): """Inline pour les conditions dans un groupe.""" model = HomeWidgetCondition extra = 0 fields = ('condition_type', 'is_negated', 'role', 'team', 'contract', 'thematic', 'is_intern', 'is_active') autocomplete_fields = ('role', 'team', 'contract', 'thematic') @admin.register(HomeWidgetConditionGroup) class HomeWidgetConditionGroupAdmin(admin.ModelAdmin): """Admin pour les groupes de conditions.""" list_display = ('widget', 'label', 'order', 'priority', 'conditions_summary', 'is_active') list_editable = ('order', 'priority', 'is_active') list_filter = ('widget', 'is_active') search_fields = ('label',) inlines = [HomeWidgetConditionInline] def conditions_summary(self, obj): """Affiche le résumé des conditions.""" summary = obj.get_summary() return format_html('{}', summary) conditions_summary.short_description = 'Conditions' class HomeWidgetConditionGroupInline(admin.StackedInline): """Inline pour les groupes de conditions dans un widget.""" model = HomeWidgetConditionGroup extra = 0 fields = ('label', 'order', 'priority', 'template_override', 'is_active', 'conditions_summary_display') readonly_fields = ('conditions_summary_display',) show_change_link = True def conditions_summary_display(self, obj): """Affiche le résumé des conditions si le groupe existe.""" if obj.pk: return format_html('{}', obj.get_summary()) return "-" conditions_summary_display.short_description = 'Conditions' @admin.register(HomeWidget) class HomeWidgetAdmin(admin.ModelAdmin): """Admin pour les widgets.""" list_display = ('widget_code', 'is_active', 'conditions_overview') list_editable = ('is_active',) list_filter = ('is_active',) search_fields = ('widget_code',) inlines = [HomeWidgetConditionGroupInline] def conditions_overview(self, obj): """Affiche la synthèse complète des groupes de conditions.""" groups = obj.condition_groups.filter(is_active=True).order_by('priority') if not groups.exists(): return format_html( 'Aucun groupe — visible pour tous' ) parts = [] for group in groups: label_html = f'{group.label}: ' if group.label else '' conditions = format_html('{}', group.get_summary()) order_badge = format_html( 'ordre {}', group.order ) parts.append(f'({label_html}{conditions} {order_badge})') separator = format_html(' OU ') return mark_safe(separator.join(parts)) conditions_overview.short_description = 'Configuration'