mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-10-31 22:24:30 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			163 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2020 by Animath
 | |
| # SPDX-License-Identifier: GPL-3.0-or-later
 | |
| 
 | |
| from django.contrib import admin
 | |
| from django.contrib.admin import ModelAdmin
 | |
| from django.contrib.auth.admin import UserAdmin
 | |
| from django.contrib.auth.models import User
 | |
| from django.utils.translation import gettext_lazy as _
 | |
| from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicChildModelFilter, PolymorphicInlineSupportMixin, \
 | |
|     PolymorphicParentModelAdmin, StackedPolymorphicInline
 | |
| 
 | |
| from .models import CoachRegistration, ParticipantRegistration, Payment, Registration, \
 | |
|     StudentRegistration, VolunteerRegistration
 | |
| 
 | |
| 
 | |
| class RegistrationInline(StackedPolymorphicInline):
 | |
|     class StudentRegistrationInline(StackedPolymorphicInline.Child):
 | |
|         model = StudentRegistration
 | |
|         autocomplete_fields = ('team',)
 | |
|         show_change_link = True
 | |
| 
 | |
|     class CoachRegistrationInline(StackedPolymorphicInline.Child):
 | |
|         model = CoachRegistration
 | |
|         autocomplete_fields = ('team',)
 | |
|         show_change_link = True
 | |
| 
 | |
|     class VolunteerRegistrationInline(StackedPolymorphicInline.Child):
 | |
|         model = VolunteerRegistration
 | |
|         show_change_link = True
 | |
| 
 | |
|     model = Registration
 | |
|     child_inlines = (
 | |
|         StudentRegistrationInline,
 | |
|         CoachRegistrationInline,
 | |
|         VolunteerRegistrationInline,
 | |
|     )
 | |
| 
 | |
| 
 | |
| class PaymentInline(admin.TabularInline):
 | |
|     model = Payment
 | |
|     extra = 0
 | |
|     autocomplete_fields = ('registrations',)
 | |
| 
 | |
| 
 | |
| @admin.register(Registration)
 | |
| class RegistrationAdmin(PolymorphicParentModelAdmin):
 | |
|     child_models = (StudentRegistration, CoachRegistration, VolunteerRegistration,)
 | |
|     list_display = ('user', 'first_name', 'last_name', 'type', 'email_confirmed',)
 | |
|     list_filter = (PolymorphicChildModelFilter, 'email_confirmed',)
 | |
|     search_fields = ('user__first_name', 'user__last_name', 'user__email',)
 | |
|     polymorphic_list = True
 | |
| 
 | |
|     @admin.display(description=_('first name'), ordering='user__first_name')
 | |
|     def first_name(self, record):
 | |
|         return record.user.first_name
 | |
| 
 | |
|     @admin.display(description=_('last name'), ordering='user__last_name')
 | |
|     def last_name(self, record):
 | |
|         return record.user.last_name
 | |
| 
 | |
| 
 | |
| @admin.register(ParticipantRegistration)
 | |
| class ParticipantRegistrationAdmin(PolymorphicChildModelAdmin):
 | |
|     list_display = ('user', 'first_name', 'last_name', 'type', 'team', 'email_confirmed',)
 | |
|     list_filter = ('email_confirmed',)
 | |
|     search_fields = ('user__first_name', 'user__last_name', 'user__email',)
 | |
|     autocomplete_fields = ('user', 'team',)
 | |
| 
 | |
|     @admin.display(description=_('first name'), ordering='user__first_name')
 | |
|     def first_name(self, record):
 | |
|         return record.user.first_name
 | |
| 
 | |
|     @admin.display(description=_('last name'), ordering='user__last_name')
 | |
|     def last_name(self, record):
 | |
|         return record.user.last_name
 | |
| 
 | |
| 
 | |
| @admin.register(StudentRegistration)
 | |
| class StudentRegistrationAdmin(PolymorphicChildModelAdmin):
 | |
|     list_display = ('user', 'first_name', 'last_name', 'team', 'email_confirmed',)
 | |
|     list_filter = ('email_confirmed',)
 | |
|     search_fields = ('user__first_name', 'user__last_name', 'user__email',)
 | |
|     autocomplete_fields = ('user', 'team',)
 | |
| 
 | |
|     @admin.display(description=_('first name'), ordering='user__first_name')
 | |
|     def first_name(self, record):
 | |
|         return record.user.first_name
 | |
| 
 | |
|     @admin.display(description=_('last name'), ordering='user__last_name')
 | |
|     def last_name(self, record):
 | |
|         return record.user.last_name
 | |
| 
 | |
| 
 | |
| @admin.register(CoachRegistration)
 | |
| class CoachRegistrationAdmin(PolymorphicChildModelAdmin):
 | |
|     list_display = ('user', 'first_name', 'last_name', 'team', 'email_confirmed',)
 | |
|     list_filter = ('email_confirmed',)
 | |
|     search_fields = ('user__first_name', 'user__last_name', 'user__email',)
 | |
|     autocomplete_fields = ('user', 'team',)
 | |
| 
 | |
|     @admin.display(description=_('first name'), ordering='user__first_name')
 | |
|     def first_name(self, record):
 | |
|         return record.user.first_name
 | |
| 
 | |
|     @admin.display(description=_('last name'), ordering='user__last_name')
 | |
|     def last_name(self, record):
 | |
|         return record.user.last_name
 | |
| 
 | |
| 
 | |
| @admin.register(VolunteerRegistration)
 | |
| class VolunteerRegistrationAdmin(PolymorphicChildModelAdmin):
 | |
|     list_display = ('user', 'first_name', 'last_name', 'tournaments', 'email_confirmed',)
 | |
|     list_filter = ('organized_tournaments', 'email_confirmed',)
 | |
|     search_fields = ('user__first_name', 'user__last_name', 'user__email',)
 | |
|     autocomplete_fields = ('user',)
 | |
| 
 | |
|     @admin.display(description=_('first name'), ordering='user__first_name')
 | |
|     def first_name(self, record):
 | |
|         return record.user.first_name
 | |
| 
 | |
|     @admin.display(description=_('last name'), ordering='user__last_name')
 | |
|     def last_name(self, record):
 | |
|         return record.user.last_name
 | |
| 
 | |
|     @admin.display(description=_("tournaments"))
 | |
|     def tournaments(self, record):
 | |
|         return ', '.join(tr.name for tr in record.interesting_tournaments) or None
 | |
| 
 | |
| 
 | |
| @admin.register(Payment)
 | |
| class PaymentAdmin(ModelAdmin):
 | |
|     list_display = ('concerned_people', 'tournament', 'team', 'grouped', 'type', 'amount', 'final', 'valid', )
 | |
|     search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email',
 | |
|                      'registrations__team__name', 'registrations__team__participation__team__trigram',)
 | |
|     list_filter = ('registrations__team__participation__valid', 'type',
 | |
|                    'grouped', 'valid', 'registrations__team__participation__tournament', 'final',)
 | |
|     autocomplete_fields = ('registrations',)
 | |
|     actions = ('mark_as_valid', 'mark_as_pending', 'mark_as_invalid',)
 | |
| 
 | |
|     @admin.display(description=_('concerned people'))
 | |
|     def concerned_people(self, record: Payment):
 | |
|         return ", ".join(f"{reg.user.first_name} {reg.user.last_name}" for reg in record.registrations.all())
 | |
| 
 | |
|     @admin.action(description=_('Mark as valid'))
 | |
|     def mark_as_valid(self, request, queryset):
 | |
|         queryset.update(valid=True)
 | |
| 
 | |
|     @admin.action(description=_('Mark as pending'))
 | |
|     def mark_as_pending(self, request, queryset):
 | |
|         queryset.update(valid=None)
 | |
| 
 | |
|     @admin.action(description=_('Mark as invalid'))
 | |
|     def mark_as_invalid(self, request, queryset):
 | |
|         queryset.update(valid=False)
 | |
| 
 | |
| 
 | |
| admin.site.unregister(User)
 | |
| 
 | |
| 
 | |
| @admin.register(User)
 | |
| class UserCustomAdmin(PolymorphicInlineSupportMixin, UserAdmin):
 | |
|     inlines = [RegistrationInline]
 |