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'