from django.contrib import admin from django.utils import timezone from tournaments.models import team_registration from tournaments.models.data_access import DataAccess from tournaments.models.device_token import DeviceToken from .models import BaseModel, Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log, ModelLog from django.contrib.auth.admin import UserAdmin from django.contrib.auth.forms import UserCreationForm, UserChangeForm from .forms import CustomUserCreationForm, CustomUserChangeForm from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter class AutoUpdateAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): if isinstance(obj, BaseModel): obj.last_updated_by = request.user obj.last_update = timezone.now() super().save_model(request, obj, form, change) class CustomUserAdmin(UserAdmin): form = CustomUserChangeForm add_form = CustomUserCreationForm model = CustomUser list_display = ['email', 'username', 'is_active', 'is_staff', 'first_name', 'last_name', 'date_joined', 'event_count'] fieldsets = [ (None, {'fields': ['id', 'username', 'email', 'password', 'first_name', 'last_name', 'is_active', 'clubs', 'country', 'phone', 'licence_id', 'umpire_code', 'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods', 'summons_display_format', 'summons_display_entry_fee', 'summons_use_full_custom_message', 'match_formats_default_duration', 'bracket_match_format_preference', 'group_stage_match_format_preference', 'loser_bracket_match_format_preference', 'device_id' ]}), ] add_fieldsets = [ ( None, { "classes": ["wide"], "fields": ['username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'clubs', 'country', 'phone', 'licence_id', 'umpire_code', ], }, ), ] class EventAdmin(AutoUpdateAdmin): list_display = ['creation_date', 'name', 'club', 'creator'] list_filter = ['creator'] ordering = ['-creation_date'] class TournamentAdmin(AutoUpdateAdmin): list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'is_canceled'] list_filter = ['is_deleted'] class TeamRegistrationAdmin(AutoUpdateAdmin): list_display = ['player_names', 'group_stage_position', 'name', 'tournament'] list_filter = [SimpleTournamentListFilter] class TeamScoreAdmin(AutoUpdateAdmin): list_display = ['team_registration', 'score', 'walk_out', 'match'] list_filter = [TeamScoreTournamentListFilter] class RoundAdmin(AutoUpdateAdmin): list_display = ['tournament', 'name', 'index', 'parent'] list_filter = [SimpleTournamentListFilter, SimpleIndexListFilter] search_fields = ['id'] class PlayerRegistrationAdmin(AutoUpdateAdmin): list_display = ['first_name', 'last_name', 'licence_id', 'rank'] search_fields = ('first_name', 'last_name') class MatchAdmin(AutoUpdateAdmin): list_display = ['__str__', 'round', 'group_stage', 'start_date', 'index'] list_filter = [MatchTypeListFilter, MatchTournamentListFilter, SimpleIndexListFilter] class GroupStageAdmin(AutoUpdateAdmin): list_display = ['tournament', 'index', 'start_date'] list_filter = [SimpleTournamentListFilter] class ClubAdmin(AutoUpdateAdmin): list_display = ['name', 'acronym', 'city', 'creator', 'events_count', 'broadcast_code'] search_fields = ('name', 'acronym') class PurchaseAdmin(AutoUpdateAdmin): list_display = ['user', 'identifier', 'product_id', 'quantity', 'purchase_date', 'revocation_date'] class CourtAdmin(AutoUpdateAdmin): list_display = ['index', 'name', 'club'] class DateIntervalAdmin(AutoUpdateAdmin): list_display = ['court_index', 'event'] class FailedApiCallAdmin(AutoUpdateAdmin): list_display = ['date', 'user', 'type', 'error'] list_filter = ['user'] class LogAdmin(AutoUpdateAdmin): list_display = ['date', 'user', 'message'] list_filter = ['user'] class DeviceTokenAdmin(AutoUpdateAdmin): list_display = ['user', 'value'] class ModelLogAdmin(admin.ModelAdmin): list_display = ['get_users', 'date', 'operation', 'model_id', 'model_name'] list_filter = ['users'] ordering = ['-date'] @admin.display(description='Users') def get_users(self, obj): return ", ".join([str(item) for item in obj.users.all()]) class DataAccessAdmin(AutoUpdateAdmin): list_display = ['owner', 'get_shared_users', 'model_name', 'model_id'] list_filter = ['owner', 'shared_with'] ordering = ['-granted_at'] @admin.display(description='Shared with') def get_shared_users(self, obj): return ", ".join([str(item) for item in obj.shared_with.all()]) admin.site.register(CustomUser, CustomUserAdmin) admin.site.register(Club, ClubAdmin) admin.site.register(Event, EventAdmin) admin.site.register(Round, RoundAdmin) admin.site.register(GroupStage, GroupStageAdmin) admin.site.register(Match, MatchAdmin) admin.site.register(TeamScore, TeamScoreAdmin) admin.site.register(TeamRegistration, TeamRegistrationAdmin) admin.site.register(Tournament, TournamentAdmin) admin.site.register(PlayerRegistration, PlayerRegistrationAdmin) admin.site.register(Purchase, PurchaseAdmin) admin.site.register(Court, CourtAdmin) admin.site.register(DateInterval, DateIntervalAdmin) admin.site.register(FailedApiCall, FailedApiCallAdmin) admin.site.register(Log, LogAdmin) admin.site.register(DeviceToken, DeviceTokenAdmin) admin.site.register(ModelLog, ModelLogAdmin) admin.site.register(DataAccess, DataAccessAdmin)