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:
Christian Berg
2016-01-09 22:55:26 +01:00
parent 088efe2f39
commit b1586efbab
155 changed files with 2571 additions and 2835 deletions

View File

@@ -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)

View File

@@ -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)),

View 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),
),
]

View 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),
),
]

View File

@@ -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),
})

View File

@@ -20,5 +20,3 @@ MAISTAR_GAMES_FOR_LADDERRANKING = getattr(
MAISTAR_SEASON_START = getattr(
settings, 'MAISTAR_SEASON_START', date(year=1, month=8, day=1)
)

View File

@@ -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>&nbsp;</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>

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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"),
)

View File

@@ -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