Vereinfachung Membership ist nun ein custom login model, keine Abhängikeiten mehr zu auth.User.
absofort können alle Benutzer ins Ranking eingetragen werden und nicht mehr nur "zahlende Mitglieder".
This commit is contained in:
committed by
Christian Berg
parent
b96b485b61
commit
bafbf38612
@@ -15,6 +15,9 @@ from utils.html5 import forms
|
||||
from . import models
|
||||
|
||||
|
||||
USER_MODEL = get_user_model()
|
||||
|
||||
|
||||
class HanchanForm(forms.ModelForm):
|
||||
error_css_class = 'error'
|
||||
required_css_class = 'required'
|
||||
@@ -29,10 +32,8 @@ class HanchanForm(forms.ModelForm):
|
||||
}
|
||||
|
||||
def clean_start(self):
|
||||
u"""
|
||||
Das Datum darf nicht in der Zukunft liegen und es muss innerhalb der
|
||||
Dauer des Events liegen.
|
||||
"""
|
||||
u"""Das Datum darf nicht in der Zukunft liegen und es muss innerhalb
|
||||
der Dauer des Events liegen."""
|
||||
start = self.cleaned_data['start']
|
||||
event = self.cleaned_data['event']
|
||||
if start > timezone.now():
|
||||
@@ -57,9 +58,6 @@ class HanchanAdminForm(HanchanForm):
|
||||
class PlayerForm(forms.ModelForm):
|
||||
error_css_class = 'error'
|
||||
required_css_class = 'required'
|
||||
player_choices = get_user_model().objects.filter(groups__in=(1, 2))
|
||||
player_choices = player_choices.order_by('username').distinct()
|
||||
user = forms.ModelChoiceField(player_choices, required=True)
|
||||
comment = forms.CharField(
|
||||
widget=forms.widgets.TextInput(attrs={'maxlength': 255}),
|
||||
required=False
|
||||
@@ -73,7 +71,6 @@ class PlayerForm(forms.ModelForm):
|
||||
self.fields['score'].widget.attrs['size'] = 6
|
||||
self.fields['score'].widget.attrs['type'] = 'number'
|
||||
|
||||
|
||||
class Meta(object):
|
||||
model = models.Player
|
||||
fields = ('hanchan', 'user', 'score', 'bonus_points', 'comment')
|
||||
@@ -93,7 +90,7 @@ class PlayerInlineFormSet(BaseInlineFormSet):
|
||||
class SeasonSelectForm(django.forms.Form):
|
||||
season = django.forms.ChoiceField(label='', choices=('a', 'b', 'c'))
|
||||
|
||||
def __init__(self, user, data=None, *args, **kwargs):
|
||||
def __init__(self, user, *args, **kwargs):
|
||||
super(SeasonSelectForm, self).__init__(args, kwargs)
|
||||
season_list = models.LadderRanking.objects.filter(user=user)
|
||||
season_list = season_list.select_related('user')
|
||||
|
||||
143
src/mahjong_ranking/migrations/0001_initial.py
Normal file
143
src/mahjong_ranking/migrations/0001_initial.py
Normal file
@@ -0,0 +1,143 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('events', '__first__'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='EventRanking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
||||
('avg_placement', models.FloatField(default=4)),
|
||||
('avg_score', models.FloatField(default=0)),
|
||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||
('good_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('won_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('dirty', models.BooleanField(default=True, editable=False)),
|
||||
('event', models.ForeignKey(to='events.Event')),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Hanchan',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||
('confirmed', models.BooleanField(default=True, help_text='Nur g\xfcltige und best\xe4tigte Hanchans kommen in die Wertung.', verbose_name='Wurde best\xe4tigt')),
|
||||
('player_names', models.CharField(max_length=127, editable=False)),
|
||||
('start', models.DateTimeField(help_text='Wichtig damit die richtigen Hanchans in die Wertung kommen.', verbose_name='Beginn')),
|
||||
('valid', models.BooleanField(default=False, verbose_name='Ist g\xfcltig')),
|
||||
('event', models.ForeignKey(to='events.Event')),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-start',),
|
||||
'verbose_name': 'Hanchan',
|
||||
'verbose_name_plural': 'Hanchans',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KyuDanRanking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('dan', models.PositiveSmallIntegerField(null=True, blank=True)),
|
||||
('dan_points', models.PositiveIntegerField(default=0)),
|
||||
('kyu', models.PositiveSmallIntegerField(default=10, null=True, blank=True)),
|
||||
('kyu_points', models.PositiveIntegerField(default=0)),
|
||||
('won_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('good_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||
('dirty', models.BooleanField(default=True, editable=False)),
|
||||
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-dan_points', '-kyu_points'),
|
||||
'verbose_name': 'Ky\u016b/Dan Wertung',
|
||||
'verbose_name_plural': 'Ky\u016b/Dan Wertungen',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LadderRanking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
||||
('avg_placement', models.FloatField(null=True, blank=True)),
|
||||
('avg_score', models.FloatField(null=True, blank=True)),
|
||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||
('good_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('won_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('dirty', models.BooleanField(default=True, editable=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LadderSeason',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=100)),
|
||||
('start', models.DateField()),
|
||||
('end', models.DateField()),
|
||||
('dirty', models.BooleanField(default=True, editable=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('start',),
|
||||
'verbose_name': 'Saison',
|
||||
'verbose_name_plural': 'Saisons',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Player',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('score', models.PositiveIntegerField(default=0)),
|
||||
('placement', models.PositiveSmallIntegerField(default=None, null=True, blank=True)),
|
||||
('kyu_points', models.PositiveSmallIntegerField(default=None, null=True, blank=True)),
|
||||
('dan_points', models.PositiveSmallIntegerField(default=None, null=True, blank=True)),
|
||||
('bonus_points', models.PositiveSmallIntegerField(default=0, null=True, blank=True)),
|
||||
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||
('hanchan', models.ForeignKey(to='mahjong_ranking.Hanchan')),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['-score'],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ladderranking',
|
||||
name='season',
|
||||
field=models.ForeignKey(to='mahjong_ranking.LadderSeason'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ladderranking',
|
||||
name='user',
|
||||
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='hanchan',
|
||||
name='players',
|
||||
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Spieler', through='mahjong_ranking.Player'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='hanchan',
|
||||
name='season',
|
||||
field=models.ForeignKey(blank=True, editable=False, to='mahjong_ranking.LadderSeason', null=True),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='player',
|
||||
unique_together=set([('hanchan', 'user')]),
|
||||
),
|
||||
]
|
||||
0
src/mahjong_ranking/migrations/__init__.py
Normal file
0
src/mahjong_ranking/migrations/__init__.py
Normal file
@@ -12,9 +12,7 @@ from django.utils import timezone
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from events.models import Event
|
||||
from . import KYU_RANKS, DAN_RANKS, DAN_RANKS_DICT, MIN_HANCHANS_FOR_LADDER
|
||||
from . import logger, set_dirty
|
||||
|
||||
from . import KYU_RANKS, DAN_RANKS, DAN_RANKS_DICT, MIN_HANCHANS_FOR_LADDER, logger, set_dirty
|
||||
|
||||
kyu_dan_rankings = set()
|
||||
ladder_rankings = set()
|
||||
|
||||
@@ -10,14 +10,8 @@
|
||||
<legend>{% trans "Delete Hanchan" %}</legend>
|
||||
{% include 'form.html' %}
|
||||
<p class="buttonbar">
|
||||
<button type="button" onclick="window.history.back()">
|
||||
<img src="{{STATIC_URL}}icons/cancel.png" alt="{% trans 'Cancel' %}"/>
|
||||
{% trans 'Cancel' %}
|
||||
</button>
|
||||
<button type="submit">
|
||||
<img src="{{STATIC_URL}}icons/table_delete.png" alt="{% trans 'Delete' %}"/>
|
||||
{% trans 'Delete' %}
|
||||
</button>
|
||||
<button type="button" onclick="window.history.back()"><span class="fa fa-close"></span> {% trans 'Cancel' %}</button>
|
||||
<button type="submit"><span class="fa fa-trash"></span> {% trans 'Delete' %}</button>
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
|
||||
|
||||
<p class="buttonbar">
|
||||
<a href="{{hanchan.get_absolute_url}}" class="button"><img src="{{STATIC_URL}}icons/arrow_undo.png" alt="{% trans 'back' %}" /> {% trans 'back' %}</a>
|
||||
<button type="submit"><img src="{{STATIC_URL}}icons/table_save.png" alt="{% trans 'save' %}" /> {% trans 'save' %}</button>
|
||||
<a href="{% url 'event-hanchan-list' event.pk %}" class="button"><span class="fa fa-undo"></span> {% trans 'back' %}</a>
|
||||
<button type="submit"><span class="fa fa-hdd-o"></span> {% trans 'save' %}</button>
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
@@ -31,14 +31,10 @@
|
||||
{% endif %}
|
||||
<p class="grid_12 more_link">
|
||||
{% if perms.mahjong_ranking.delete_hanchan %}
|
||||
<a href="{% url 'delete-hanchan' hanchan.pk %}" class="button"><img src="{{STATIC_URL}}icons/table_delete.png"
|
||||
alt="{% trans 'Delete' %}"/>
|
||||
{% trans 'Delete Hanchan' %}</a>
|
||||
<a href="{% url 'delete-hanchan' hanchan.pk %}" class="button"><span class="fa fa-trash"></span> {% trans 'Delete Hanchan' %}</a>
|
||||
{% endif %}
|
||||
{% if perms.mahjong_ranking.change_hanchan %}
|
||||
<a href="{% url 'edit-hanchan' hanchan.pk %}" class="button"><img src="{{STATIC_URL}}icons/table_edit.png"
|
||||
alt="{% trans 'Edit' %}"/>
|
||||
{% trans 'Edit Hanchan' %}</a>
|
||||
<a href="{% url 'edit-hanchan' hanchan.pk %}" class="button"><span class="fa fa-pencil"></span> {% trans 'Edit Hanchan' %}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% empty %}
|
||||
@@ -48,9 +44,7 @@
|
||||
|
||||
{% block buttonbar %}
|
||||
{% if perms.mahjong_ranking.add_hanchan %}
|
||||
<a class="button" href="{{event.get_edit_url}}"><img src="{{STATIC_URL}}icons/calendar_edit.png"
|
||||
alt="{% trans 'Add' %}"/> {% trans 'Edit Event' %}</a>
|
||||
<a class="button" href="{% url 'add-hanchan-form' event.id %}"><img src="{{STATIC_URL}}icons/table_add.png"
|
||||
alt="{% trans 'Add' %}"/> {% trans 'Add Hanchan' %}</a>
|
||||
<a class="button" href="{{event.get_edit_url}}"><span class="fa fa-pencil"></span> {% trans 'Edit Event' %}</a>
|
||||
<a class="button" href="{% url 'add-hanchan-form' event.id %}"><span class="fa fa-plus-circle"></span> {% trans 'Add Hanchan' %}</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -11,29 +11,29 @@
|
||||
<tr>
|
||||
<th>{% trans 'Avatar' %}</th>
|
||||
<th>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+username' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_up.png" alt="▴"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+username' %}?page={{page_obj.number}}" class="fa fa-sort-asc"></a>
|
||||
{% trans 'Nickname' %}
|
||||
<a href="{% url 'kyudanranking-list' order_by='-username' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_down.png" alt="▾"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='-username' %}?page={{page_obj.number}}" class="fa fa-sort-desc"></a>
|
||||
</th>
|
||||
<th>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+full_name'%}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_up.png" alt="▴"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+full_name'%}?page={{page_obj.number}}" class="fa fa-sort-asc"></a>
|
||||
{% trans 'Full Name' %}
|
||||
<a href="{% url 'kyudanranking-list' order_by='-full_name' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_down.png" alt="▾"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='-full_name' %}?page={{page_obj.number}}" class="fa fa-sort-desc"></a>
|
||||
</th>
|
||||
<th>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+rank' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_up.png" alt="▴"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+rank' %}?page={{page_obj.number}}" class="fa fa-sort-asc"></a>
|
||||
{% trans 'Rank' %}
|
||||
<a href="{% url 'kyudanranking-list' order_by='-rank' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_down.png" alt="▾"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='-rank' %}?page={{page_obj.number}}" class="fa fa-sort-desc"></a>
|
||||
</th>
|
||||
<th>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+score' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_up.png" alt="▴"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+score' %}?page={{page_obj.number}}" class="fa fa-sort-asc"></a>
|
||||
{% trans 'Score' %}
|
||||
<a href="{% url 'kyudanranking-list' order_by='-score' %}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_down.png" alt="▾"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='-score' %}?page={{page_obj.number}}" class="fa fa-sort-desc"></a>
|
||||
</th>
|
||||
<th>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+hanchan_count'%}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_up.png" alt="▴"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='+hanchan_count'%}?page={{page_obj.number}}" class="fa fa-sort-asc"></a>
|
||||
{% trans 'Games Total' %}
|
||||
<a href="{% url 'kyudanranking-list' order_by='-hanchan_count'%}?page={{page_obj.number}}"><img src="{{STATIC_URL}}icons/bullet_arrow_down.png" alt="▾"/></a>
|
||||
<a href="{% url 'kyudanranking-list' order_by='-hanchan_count'%}?page={{page_obj.number}}" class="fa fa-sort-desc"></a>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<h2>Mahjong Ranking - {{season.name}}</h2>
|
||||
<div id="teaser_text">
|
||||
<ul class="info">
|
||||
<li class="date">{% trans 'Start' %}: {{season.start}}</li>
|
||||
<li class="date">{% trans 'End' %}: {{season.end}}</li>
|
||||
<li class="user">{% trans 'Participants' %}: {{season.participants}}</li>
|
||||
<li><span class="fa fa-calendar-o"></span> {% trans 'Start' %}: {{season.start}}</li>
|
||||
<li><span class="fa fa-calendar-o"></span> {% trans 'End' %}: {{season.end}}</li>
|
||||
<li><span class="fa fa-users"></span> {% trans 'Participants' %}: {{season.participants}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -48,7 +48,7 @@
|
||||
{% endwith %}
|
||||
{% empty %}
|
||||
<tr>
|
||||
<td colspan="8">Leider hat es noch niemand in das Ranking geschafft.
|
||||
<td colspan="9">Leider hat es noch niemand in das Ranking geschafft.
|
||||
Ein Spieler wird erst ins Ranking genommen wenn er 5 Hanchans absolviert hat.
|
||||
</td>
|
||||
</tr>
|
||||
@@ -59,19 +59,18 @@
|
||||
|
||||
{% block redbox %}
|
||||
<h2>{% trans 'Latest Hanchans' %}</h2>
|
||||
<ul class="list">
|
||||
<ul class="fa-ul">
|
||||
{% for hanchan in latest_hanchan_list %}
|
||||
<li class="hanchan">
|
||||
<a href="{% url 'event-hanchan-list' hanchan.event.pk %}">{{hanchan.event.name}}</a>
|
||||
<li><span class="fa-li fa fa-table"></span> <a href="{% url 'event-hanchan-list' hanchan.event.pk %}">{{hanchan.event.name}}</a>
|
||||
{{hanchan.start|time:'H:i'}}:
|
||||
<small>{{hanchan.player_names}}</small>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<h3>{% trans 'Latest Events' %}</h3>
|
||||
<ul class="list">
|
||||
<ul class="fa-ul">
|
||||
{% for event in latest_event_list %}
|
||||
<li class="event"><a href="{% url 'event-hanchan-list' event.pk %}">{{event.name}}</a></li>
|
||||
<li><span class="fa-li fa fa-calendar-o"></span> <a href="{% url 'event-hanchan-list' event.pk %}">{{event.name}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<h3>{% trans 'Ladder Archive' %}</h3>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{% extends "membership/membership_detail.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %} {% trans 'Dan Score for' %} {{membership.user.username}} {% endblock %}
|
||||
{% block teaser %}<h2>{% trans 'Dan Score for' %} {{membership.user.username}}</h2>{% endblock %}
|
||||
{% block title %} {% trans 'Dan Score for' %} {{membership.username}} {% endblock %}
|
||||
{% block teaser %}<h2>{% trans 'Dan Score for' %} {{membership.username}}</h2>{% endblock %}
|
||||
|
||||
{% block score_list %}
|
||||
<div class="grid_12">
|
||||
@@ -42,14 +42,10 @@
|
||||
<td>{{ result.comment }}</td>
|
||||
<td>
|
||||
{% if perms.mahjong_ranking.delete_hanchan %}
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_delete.png"
|
||||
alt="{% trans 'Delete' %}"
|
||||
title="{% trans 'Delete Hanchan' %}"/></a>
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><span class="fa fa-trash" title="{% trans 'Delete Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
{% if perms.mahjong_ranking.change_hanchan %}
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_edit.png"
|
||||
alt="{% trans 'Edit' %}"
|
||||
title="{% trans 'Edit Hanchan' %}"/></a>
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><span class="fa fa-pencil" title="{% trans 'Edit Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
|
||||
{% block title %} {% trans 'Kyu Score for' %} {{player.username}} {% endblock %}
|
||||
|
||||
{% block teaser %}<h2>{% trans 'Invalid hanchans with' %} {{membership.user.username}}</h2>{% endblock %}
|
||||
{% block teaser %}<h2>{% trans 'Invalid hanchans with' %} {{membership.username}}</h2>{% endblock %}
|
||||
|
||||
{% block score_list %}
|
||||
<div class="grid_12">
|
||||
<h2>{% trans 'Invalid hanchans with' %} {{membership.user.username}}</h2>
|
||||
<h2>{% trans 'Invalid hanchans with' %} {{membership.username}}</h2>
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>{% trans 'Event' %}</th>
|
||||
@@ -31,10 +31,10 @@
|
||||
<td>{{ result.comment }}</td>
|
||||
<td>
|
||||
{% if perms.mahjong_ranking.delete_hanchan %}
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_delete.png" alt="{% trans 'Delete' %}" title="{% trans 'Delete Hanchan' %}"/></a>
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><span class="fa fa-trash" title="{% trans 'Delete Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
{% if perms.mahjong_ranking.change_hanchan %}
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_edit.png" alt="{% trans 'Edit' %}" title="{% trans 'Edit Hanchan' %}"/></a>
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><span class="fa fa-pencil" title="{% trans 'Edit Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{% extends "membership/membership_detail.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %} {% trans 'Kyu Score for' %} {{membership.user.username}} {% endblock %}
|
||||
{% block title %} {% trans 'Kyu Score for' %} {{membership.username}} {% endblock %}
|
||||
|
||||
{% block teaser %}<h2>{% trans 'Kyu Score for' %}{{membership.user.username}}</h2>{% endblock %}
|
||||
{% block teaser %}<h2>{% trans 'Kyu Score for' %}{{membership.username}}</h2>{% endblock %}
|
||||
|
||||
{% block score_list %}
|
||||
<div class="grid_12">
|
||||
@@ -39,10 +39,10 @@
|
||||
<td class="center">{{result.kyu_points}}</td>
|
||||
<td>
|
||||
{% if perms.mahjong_ranking.delete_hanchan %}
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_delete.png" alt="{% trans 'Delete' %}" title="{% trans 'Delete Hanchan' %}"/></a>
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><span class="fa fa-trash" title="{% trans 'Delete Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
{% if perms.mahjong_ranking.change_hanchan %}
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_edit.png" alt="{% trans 'Edit' %}" title="{% trans 'Edit Hanchan' %}"/></a>
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><span class="fa fa-pencil" title="{% trans 'Edit Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{% extends "membership/membership_detail.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %} {% trans 'Ladder Score for' %} {{membership.user.username}} {% endblock %}
|
||||
{% block teaser %}<h2>{% trans 'Ladder Score for' %} {{membership.user.username}}</h2>{% endblock %}
|
||||
{% block title %} {% trans 'Ladder Score for' %} {{membership.username}} {% endblock %}
|
||||
{% block teaser %}<h2>{% trans 'Ladder Score for' %} {{membership.username}}</h2>{% endblock %}
|
||||
|
||||
{% block score_list %}
|
||||
<div class="grid_12">
|
||||
@@ -36,10 +36,10 @@
|
||||
{% endfor %}
|
||||
<td>
|
||||
{% if perms.mahjong_ranking.delete_hanchan %}
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_delete.png" alt="{% trans 'Delete' %}" title="{% trans 'Delete Hanchan' %}"/></a>
|
||||
<a href="{% url 'delete-hanchan' result.hanchan.pk %}"><span class="fa fa-trash" title="{% trans 'Delete Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
{% if perms.mahjong_ranking.change_hanchan %}
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><img src="{{STATIC_URL}}icons/table_edit.png" alt="{% trans 'Edit' %}" title="{% trans 'Edit Hanchan' %}"/></a>
|
||||
<a href="{% url 'edit-hanchan' result.hanchan.pk %}"><span class="fa fa-pencil" title="{% trans 'Edit Hanchan' %}"></span></a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -47,7 +47,7 @@
|
||||
</tbody>
|
||||
<tfooter>
|
||||
<tr><td colspan="9" class="right">
|
||||
<form action="{% url 'player-ladder-score' membership.user.username %}">
|
||||
<form action="{% url 'player-ladder-score' membership.username %}">
|
||||
<label for="id_season">{% trans 'Season' %}:</label> {{seasons_select_form.season}} <button type="submit">{% trans 'Go' %}</button>
|
||||
</form>
|
||||
</td></tr>
|
||||
|
||||
@@ -293,9 +293,7 @@ class PlayerScore(LoginRequiredMixin, generic.ListView):
|
||||
def get(self, request, *args, **kwargs):
|
||||
try:
|
||||
user_model = auth.get_user_model()
|
||||
self.user = user_model.objects.get(
|
||||
username=self.kwargs.get('username'))
|
||||
self.membership = Membership.objects.get(user=self.user)
|
||||
self.user = user_model.objects.get(username=self.kwargs.get('username'))
|
||||
except user_model.DoesNotExist:
|
||||
raise django.http.Http404(
|
||||
_("No user found matching the name %s") % self.kwargs.get(
|
||||
@@ -304,7 +302,7 @@ class PlayerScore(LoginRequiredMixin, generic.ListView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = generic.ListView.get_context_data(self, **kwargs)
|
||||
context['membership'] = self.membership
|
||||
context['membership'] = self.user
|
||||
try:
|
||||
context['kyu_dan_ranking'] = models.KyuDanRanking.objects.get(
|
||||
user=self.user)
|
||||
|
||||
Reference in New Issue
Block a user