optimiert werden. jQuery wurde entfernt. Übersetzungen wurden korrigiert. Neue sync.sh Datei, welche änderungen mit rsync auf den Server spielt und das neuladen erzwingt.
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
# -*- encoding: utf-8 -*-
|
|
"""
|
|
Created on 22.11.2014
|
|
|
|
@author: christian
|
|
"""
|
|
from django.db import models
|
|
|
|
from . import settings
|
|
|
|
|
|
class GameManager(models.Manager):
|
|
use_for_related_fields = True
|
|
|
|
def player_games(self, player, season=None, **kwargs):
|
|
queryset = self.filter(
|
|
models.Q(player1=player) | models.Q(player2=player) |
|
|
models.Q(player3=player) | models.Q(player4=player) |
|
|
models.Q(player5=player) | models.Q(player6=player)
|
|
)
|
|
if season:
|
|
queryset = queryset.filter(season=season)
|
|
if kwargs:
|
|
queryset = queryset.filter(**kwargs)
|
|
return queryset
|
|
|
|
|
|
class LadderManager(models.Manager):
|
|
use_for_related_fields = True
|
|
|
|
def calculate_rankings(self, season):
|
|
"""
|
|
Berechnet die Jahresrankings für die Spieler neu.
|
|
@param season: Das Jahr das neu berechnet werden soll
|
|
@type season: Integer
|
|
"""
|
|
rankings = self.filter(season=season)
|
|
rankings.update(placement=None)
|
|
rankings = rankings.filter(
|
|
games_count__gte=settings.MAISTAR_GAMES_FOR_LADDERRANKING) # @IgnorePep8
|
|
rankings = rankings.order_by('avg_placement', '-avg_score')
|
|
placement = 1
|
|
previous_avg_placement = None
|
|
previous_avg_score = None
|
|
previous_placement = None
|
|
for ranking in rankings:
|
|
if ranking.avg_placement == previous_avg_placement \
|
|
and ranking.avg_score == previous_avg_score:
|
|
ranking.placement = previous_placement
|
|
else:
|
|
ranking.placement = placement
|
|
ranking.save(force_update=True)
|
|
previous_avg_placement = ranking.avg_placement
|
|
previous_avg_score = ranking.avg_score
|
|
previous_placement = ranking.placement
|
|
placement += 1
|
|
|
|
def get_seasons(self):
|
|
return self.values_list('season', flat=True).order_by(
|
|
'season').distinct()
|