Fehler bei Vergabe von Bonuspunkte korrigiert.
Kommentare für Bonuspunkte werden jetzt als Kommentar beim Spieler hinterlassen, nicht als Kommentar in der Hanchan. FIXED: 3_in_a_row counter wurde nicht zurückgesetzt wenn Bonuspunkte vergeben wurden. FIXED: Durchschnittliche Platzierung während eines Events wurde nur als Ganzzahl berechnet. Wird nun als Fießkomma berechnet und gesichert.
This commit is contained in:
@@ -27,7 +27,7 @@ class GameForm(forms.ModelForm):
|
||||
cleaned_data = super(GameForm, self).clean()
|
||||
players_in_game = set()
|
||||
for player_nr in (
|
||||
'player1', 'player2', 'player3', 'player4', 'player5', 'player6'):
|
||||
'player1', 'player2', 'player3', 'player4', 'player5', 'player6'):
|
||||
current_player = cleaned_data.get(player_nr)
|
||||
if current_player and current_player in players_in_game:
|
||||
msg = _("%s may only participate once." % current_player)
|
||||
|
||||
@@ -16,7 +16,8 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='Game',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('id', models.AutoField(verbose_name='ID',
|
||||
serialize=False, auto_created=True, primary_key=True)),
|
||||
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||
('player1_score', models.SmallIntegerField(verbose_name='Punkte')),
|
||||
('player1_placement', models.PositiveSmallIntegerField(editable=False)),
|
||||
@@ -30,25 +31,36 @@ class Migration(migrations.Migration):
|
||||
('player5_placement', models.PositiveSmallIntegerField(editable=False)),
|
||||
('player6_score', models.SmallIntegerField(verbose_name='Punkte')),
|
||||
('player6_placement', models.PositiveSmallIntegerField(editable=False)),
|
||||
('confirmed', models.BooleanField(default=True, help_text='das Spiel z\xe4hlt nur wenn es best\xe4tigt wurde', verbose_name='Wurde best\xe4tigt')),
|
||||
('confirmed', models.BooleanField(
|
||||
default=True, help_text='das Spiel z\xe4hlt nur wenn es best\xe4tigt wurde', verbose_name='Wurde best\xe4tigt')),
|
||||
('player_names', models.CharField(max_length=255, editable=False)),
|
||||
('season', models.PositiveSmallIntegerField(verbose_name='Saison', editable=False, db_index=True)),
|
||||
('event', models.ForeignKey(related_name='maistargame_set', to='events.Event')),
|
||||
('player1', models.ForeignKey(related_name='+', verbose_name='Spieler 1', to=settings.AUTH_USER_MODEL)),
|
||||
('player2', models.ForeignKey(related_name='+', verbose_name='Spieler 2', to=settings.AUTH_USER_MODEL)),
|
||||
('player3', models.ForeignKey(related_name='+', verbose_name='Spieler 3', to=settings.AUTH_USER_MODEL)),
|
||||
('player4', models.ForeignKey(related_name='+', verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL)),
|
||||
('player5', models.ForeignKey(related_name='+', verbose_name='Spieler 5', to=settings.AUTH_USER_MODEL)),
|
||||
('player6', models.ForeignKey(related_name='+', verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL)),
|
||||
('season', models.PositiveSmallIntegerField(
|
||||
verbose_name='Saison', editable=False, db_index=True)),
|
||||
('event', models.ForeignKey(
|
||||
related_name='maistargame_set', to='events.Event')),
|
||||
('player1', models.ForeignKey(related_name='+',
|
||||
verbose_name='Spieler 1', to=settings.AUTH_USER_MODEL)),
|
||||
('player2', models.ForeignKey(related_name='+',
|
||||
verbose_name='Spieler 2', to=settings.AUTH_USER_MODEL)),
|
||||
('player3', models.ForeignKey(related_name='+',
|
||||
verbose_name='Spieler 3', to=settings.AUTH_USER_MODEL)),
|
||||
('player4', models.ForeignKey(related_name='+',
|
||||
verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL)),
|
||||
('player5', models.ForeignKey(related_name='+',
|
||||
verbose_name='Spieler 5', to=settings.AUTH_USER_MODEL)),
|
||||
('player6', models.ForeignKey(related_name='+',
|
||||
verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ranking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('id', models.AutoField(verbose_name='ID',
|
||||
serialize=False, auto_created=True, primary_key=True)),
|
||||
('season', models.PositiveSmallIntegerField(verbose_name='Saison')),
|
||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
||||
('avg_placement', models.PositiveSmallIntegerField(null=True, blank=True)),
|
||||
('avg_placement', models.PositiveSmallIntegerField(
|
||||
null=True, blank=True)),
|
||||
('avg_score', models.SmallIntegerField(null=True, blank=True)),
|
||||
('games_count', models.PositiveSmallIntegerField(default=0)),
|
||||
('games_good', models.PositiveSmallIntegerField(default=0)),
|
||||
|
||||
19
src/maistar_ranking/migrations/0002_auto_20150823_2232.py
Normal file
19
src/maistar_ranking/migrations/0002_auto_20150823_2232.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('maistar_ranking', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='comment',
|
||||
field=models.TextField(verbose_name='Kommentar', blank=True),
|
||||
),
|
||||
]
|
||||
19
src/maistar_ranking/migrations/0003_auto_20150901_2204.py
Normal file
19
src/maistar_ranking/migrations/0003_auto_20150901_2204.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('maistar_ranking', '0002_auto_20150823_2232'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='comment',
|
||||
field=models.TextField(verbose_name='Anmerkung', blank=True),
|
||||
),
|
||||
]
|
||||
@@ -87,9 +87,6 @@ class Game(models.Model):
|
||||
for nr in range(1, 7):
|
||||
self._player_list.append({
|
||||
'user': getattr(self, 'player%d' % nr),
|
||||
'membership': Membership.objects.get(
|
||||
user=getattr(self, 'player%d' % nr)
|
||||
),
|
||||
'score': getattr(self, 'player%d_score' % nr),
|
||||
'placement': getattr(self, 'player%d_placement' % nr),
|
||||
})
|
||||
|
||||
@@ -20,5 +20,3 @@ MAISTAR_GAMES_FOR_LADDERRANKING = getattr(
|
||||
MAISTAR_SEASON_START = getattr(
|
||||
settings, 'MAISTAR_SEASON_START', date(year=1, month=8, day=1)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
{% extends "events/event_detail.html" %}
|
||||
{% load i18n humanize %}
|
||||
{% load i18n humanize thumbnail %}
|
||||
|
||||
{% block title %}{% trans 'Mai-Star Games' %} - {{ event.name }}{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
<h2 class="grid_12">{% trans 'Played Mai-Star Games' %}</h2>
|
||||
<p> </p>
|
||||
|
||||
{% for game in game_list %}
|
||||
<article id="{{ game.pk }}">
|
||||
|
||||
<h3 class="grid_12">{{ forloop.counter|ordinal }} {% trans 'Game' %}</h3>
|
||||
{% for player in game.player_list %}
|
||||
<div class="grid_2 center">
|
||||
<h4>{{ player.placement|ordinal }} {% trans 'Place' %}</h4>
|
||||
<a href="{% url 'maistar-player-games' username=player.user.username season=game.season %}"><img
|
||||
src="{% if player.membership.thumbnail %}{{player.membership.thumbnail.url}}{% else %}{{STATIC_URL}}img/unknown_thumbnail.png{% endif %}" alt=""/></a>
|
||||
<a class="avatar player" href="{% url 'maistar-player-games' username=player.user.username season=game.season %}"><img
|
||||
src="{% thumbnail player.user.avatar|default:'unknown_profile.jpg' 'avatar' %}"
|
||||
width="70" height="70" alt=""/></a>
|
||||
<p><a href="{% url 'maistar-player-games' username=player.user.username season=game.season %}">{{player.user.username}}</a><br/>
|
||||
{{player.score}} {% trans 'Points' %}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="grid_12 buttonbar">
|
||||
<div class="grid_12 more_link">
|
||||
{% if perms.maistar_ranking.delete_dame %}
|
||||
<a class="button" href="{% url 'maistar-delete-game' game.pk %}"><span class="fa fa-trash"></span> {% trans 'Delete Game' %}</a>
|
||||
{% endif %}
|
||||
@@ -27,6 +27,7 @@
|
||||
<a class="button" href="{% url 'maistar-edit-game' game.pk %}"><span class="fa fa-pencil"></span> {% trans 'Edit Game' %}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</article>
|
||||
{% empty %}
|
||||
<p class="grid_12">{% trans 'No Mai-Star games have been added to this event yet.'%}</p>
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
{% block teaser %} <h1>{% trans 'Mai-Star Games' %}: {{membership.username}} <br/> {% trans 'Season' %} {{season}}</h1> {% endblock %}
|
||||
|
||||
{% block score_list %}
|
||||
<div class="grid_12">
|
||||
<h2>{% trans 'Mai-Star Games with' %} {{ membership.username }} - {{season}}</h2>
|
||||
<h2 class="grid_12">{% trans 'Mai-Star Games with' %} {{ membership.username }} - {{season}}</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
@@ -50,6 +49,4 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -1,10 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n comments humanize %}
|
||||
{% load i18n comments humanize thumbnail %}
|
||||
|
||||
{% block teaser %} <h1>{% trans 'Mai-Star Ranking' %} - {% trans 'Season' %} {{season}}</h1> {% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
<main class="grid_12">
|
||||
{% block content %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -27,7 +26,9 @@
|
||||
{% with player.user.get_profile as profile %}
|
||||
<tr>
|
||||
<td class="center">{{ player.placement|ordinal }}</td>
|
||||
<td><a href="{{ player.get_absolute_url }}"><img src="{% if profile.thumbnail %}{{profile.thumbnail.url}}{% else %}{{STATIC_URL}}img/unknown_thumbnail.png{% endif %}" class="avatar" alt="{{ player.user }}"/></a></td>
|
||||
<td><a href="{{ player.get_absolute_url }}"><img
|
||||
src="{% thumbnail player.user.avatar|default:'unknown_profile.jpg' 'avatar' %}"
|
||||
width="70" height="70" class="avatar" alt="{{ player.user }}"/></a></td>
|
||||
<td><a href="{{ player.get_absolute_url }}">{{player.user}}</a></td>
|
||||
<td>{% if user.is_authenticated %}{{profile.last_name}} {{profile.first_name}}{% else %} ---{% endif %}</td>
|
||||
<td class="right">{{player.avg_placement|floatformat:0 }}</td>
|
||||
@@ -45,7 +46,6 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</main>
|
||||
{% endblock %}
|
||||
|
||||
{% block redbox %}
|
||||
|
||||
@@ -13,12 +13,19 @@ from .views import DeleteGame, ListGames, ListPlayerGames, \
|
||||
urlpatterns = patterns(
|
||||
'maistar_ranking.views',
|
||||
url('^$', ListRankings.as_view()),
|
||||
url(r'^event/(?P<event>[\d]+)/maistar/$', ListGames.as_view(), name="maistar-game-list"),
|
||||
url(r'^event/(?P<event>[\d]+)/maistar/add/$', GameForm.as_view(), name="maistar-add-game"),
|
||||
url(r'^maistar/(?P<game>[\d]+)/edit/$', GameForm.as_view(), name="maistar-edit-game"),
|
||||
url(r'^maistar/(?P<game>[\d]+)/delete/$', DeleteGame.as_view(), name="maistar-delete-game"),
|
||||
url(r'^event/(?P<event>[\d]+)/maistar/$',
|
||||
ListGames.as_view(), name="maistar-game-list"),
|
||||
url(r'^event/(?P<event>[\d]+)/maistar/add/$',
|
||||
GameForm.as_view(), name="maistar-add-game"),
|
||||
url(r'^maistar/(?P<game>[\d]+)/edit/$',
|
||||
GameForm.as_view(), name="maistar-edit-game"),
|
||||
url(r'^maistar/(?P<game>[\d]+)/delete/$',
|
||||
DeleteGame.as_view(), name="maistar-delete-game"),
|
||||
url(r'^maistar/$', ListRankings.as_view(), name="maistar-ranking"),
|
||||
url(r'^maistar/(?P<season>[\d]+)/$', ListRankings.as_view(), name="maistar-ranking"),
|
||||
url(r'^player/(?P<username>[\-\.\d\w]+)/maistar/$', ListPlayerGames.as_view(), name="maistar-player-games"),
|
||||
url(r'^player/(?P<username>[\-\.\d\w]+)/maistar/(?P<season>[\d]+)/$', ListPlayerGames.as_view(), name="maistar-player-games"),
|
||||
url(r'^maistar/(?P<season>[\d]+)/$',
|
||||
ListRankings.as_view(), name="maistar-ranking"),
|
||||
url(r'^player/(?P<username>[\-\.\d\w]+)/maistar/$',
|
||||
ListPlayerGames.as_view(), name="maistar-player-games"),
|
||||
url(r'^player/(?P<username>[\-\.\d\w]+)/maistar/(?P<season>[\d]+)/$',
|
||||
ListPlayerGames.as_view(), name="maistar-player-games"),
|
||||
)
|
||||
|
||||
@@ -84,7 +84,8 @@ class ListPlayerGames(PlayerScore):
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(ListPlayerGames, self).get_context_data()
|
||||
context['membership'] = self.user
|
||||
context['season_list'] = models.Ranking.objects.filter(user=self.user).values_list('season', flat=True)
|
||||
context['season_list'] = models.Ranking.objects.filter(
|
||||
user=self.user).values_list('season', flat=True)
|
||||
context['season'] = self.season
|
||||
return context
|
||||
|
||||
@@ -116,6 +117,7 @@ class ListRankings(generic.ListView):
|
||||
context['is_archive'] = self.is_archive
|
||||
context['season'] = self.season
|
||||
context['season_list'] = models.Ranking.objects.get_seasons()
|
||||
context['latest_games'] = models.Game.objects.filter(confirmed=True)[:3]
|
||||
context['latest_events'] = Event.objects.archive()[:3]
|
||||
context['latest_games'] = models.Game.objects.filter(confirmed=True)[
|
||||
:3]
|
||||
context['latest_events'] = Event.objects.latest_events(num=3)
|
||||
return context
|
||||
|
||||
Reference in New Issue
Block a user