Files
kasu/src/mahjong_ranking/admin.py

122 lines
4.4 KiB
Python

""" Adds management of the mahong ranking system to the admin interface. """
from django.contrib import admin
from django.utils.translation import ugettext as _
from . import models, set_dirty
def recalculate(modeladmin, request, queryset): # Ignore PyLintBear (W0613)
""" An admin action to force recalculation of the selected items. """
if isinstance(modeladmin, HanchanAdmin):
for hanchan in queryset:
hanchan.save()
elif isinstance(modeladmin, EventRankingAdmin):
for event_ranking in queryset:
set_dirty(event=event_ranking.event_id, user=event_ranking.user_id)
elif isinstance(modeladmin, KyuDanAdmin):
for kyu_dan_ranking in queryset:
set_dirty(user=kyu_dan_ranking.user_id)
elif isinstance(modeladmin, SeasonRankingAdmin):
for ladder_ranking in queryset:
set_dirty(user=ladder_ranking.user_id,
season=ladder_ranking.season)
recalculate.short_description = _("Recalculate")
def confirm(modeladmin, request, queryset): # Ignore PyLintBear (W0613)
"""An admin action to quickly set selected hanchans to confirmed. """
for hanchan in queryset:
hanchan.confirmed = True
hanchan.save()
confirm.short_description = _("Confirm")
def unconfirm(modeladmin, request, queryset): # Ignore PyLintBear (W0613)
"""An admin action to quickly set selected hanchans to unconfirmed. """
for hanchan in queryset:
hanchan.confirmed = False
hanchan.save()
unconfirm.short_description = _('Set unconfirmed')
class EventRankingAdmin(admin.ModelAdmin):
""" Lists the Event Rankings and allows to recalculate them. """
list_filter = ['event']
list_display = ('placement', 'user', 'event', 'avg_placement', 'avg_score',
'hanchan_count', 'good_hanchans', 'won_hanchans')
list_display_links = ('user',)
actions = [recalculate]
class HanchanAdmin(admin.ModelAdmin):
""" To administrate the stored Hanchans. """
actions = [recalculate, confirm, unconfirm]
date_hierarchy = 'start'
list_filter = ('season', 'event', 'confirmed')
search_fields = ('player_names',)
list_display = ('event', 'start', 'player_names', 'comment', 'confirmed')
readonly_fields = ('season', 'player1_comment', 'player2_comment',
'player3_comment', 'player4_comment')
fieldsets = (
('Hanchan', {
'fields': (
('event', 'season'),
'start',
('player1', 'player1_input_score', 'player1_comment'),
('player2', 'player2_input_score', 'player2_comment'),
('player3', 'player3_input_score', 'player3_comment'),
('player4', 'player4_input_score', 'player4_comment'),
'comment', 'confirmed'
),
'classes': ('grp-collapse grp-open',),
}),
)
class KyuDanAdmin(admin.ModelAdmin):
""" Lists the Kyu/dan Rankings and allows to recalculate them. """
actions = [recalculate]
list_display = ('user', 'kyu', 'kyu_points', 'dan', 'dan_points',
'hanchan_count')
readonly_fields = ('user', 'kyu', 'kyu_points', 'dan', 'dan_points')
fieldsets = (
('Aktueller Dan/Kyū', {
'fields': ('user', ('kyu', 'kyu_points'), ('dan', 'dan_points')),
'classes': ('grp-collapse grp-open',),
}),
('Frühere Aufzeichnungen', {
'fields': ('legacy_date', 'legacy_hanchan_count',
('legacy_kyu_points', 'legacy_dan_points')),
'classes': ('grp-collapse grp-closed',),
}),
)
class SeasonRankingAdmin(admin.ModelAdmin):
""" Lists the Season Rankings and allows to recalculate them. """
actions = [recalculate]
list_display = ('placement', 'season', 'user', 'avg_placement',
'avg_score', 'hanchan_count', 'good_hanchans',
'won_hanchans')
list_display_links = ('user',)
list_filter = ('season',)
class LadderSeasonAdmin(admin.ModelAdmin):
""" Seasons will be generated automaticly, but you can examine them here."""
actions = [recalculate]
list_display = ('name', 'start', 'end')
admin.site.register(models.Hanchan, HanchanAdmin)
admin.site.register(models.KyuDanRanking, KyuDanAdmin)
admin.site.register(models.SeasonRanking, SeasonRankingAdmin)
admin.site.register(models.EventRanking, EventRankingAdmin)