def player_earnings(request, player_id): player = get_object_or_404(Player, id=int(player_id)) base = base_ctx('Ranking', 'Earnings', request, context=player) earnings = Earnings.objects.filter(player=player) totalearnings = earnings.aggregate(Sum('earnings'))['earnings__sum'] for event in earnings: dict = get_placements(event.event) for earning, placement in dict.items(): if event.placement in placement: event.min = min(placement) event.max = max(placement) event.earliest = event.event.get_earliest() event.latest = event.event.get_latest() #sort by latest date def getLatest( object ): return object.latest earnings= list(earnings) earnings.sort( key=getLatest, reverse=True ) base.update({'player': player, 'earnings': earnings, 'totalearnings': totalearnings}) return render_to_response('player_earnings.html', base)
def earnings(request, player_id): player = get_object_or_404(Player, id=player_id) base = base_ctx('Ranking', 'Earnings', request, context=player) # {{{ Gather data earnings = player.earnings_set.prefetch_related('event__earnings_set').order_by('-event__latest') totalearnings = earnings.aggregate(Sum('earnings'))['earnings__sum'] # Get placement range for each prize for e in earnings: placements = get_placements(e.event) for prize, rng in placements.items(): if rng[0] <= e.placement <= rng[1]: e.rng = rng # }}} # {{{ Sum up earnings by currency currencies = {e.currency for e in earnings} by_currency = {cur: sum([e.origearnings for e in earnings if e.currency == cur]) for cur in currencies} if len(by_currency) == 1 and 'USD' in by_currency: by_currency = None # }}} base.update({ 'player': player, 'earnings': earnings, 'totalearnings': totalearnings, 'by_currency': by_currency, }) base.update({"title": player.tag}) return render_to_response('player_earnings.html', base)
def earnings(request, player_id): player = get_object_or_404(Player, id=player_id) base = base_ctx('Ranking', 'Earnings', request, context=player) year = get_param(request, 'year', 'all') # {{{ Gather data earnings = player.earnings_set if year != 'all': earnings = earnings.filter(event__latest__year=year) earnings = earnings.prefetch_related('event__earnings_set').order_by( '-event__latest') totalearnings = earnings.aggregate(Sum('earnings'))['earnings__sum'] years = range(2010, datetime.now().year + 1) def year_is_valid(y): return player.earnings_set.filter(event__latest__year=y).exists() valid_years = filter(year_is_valid, years) # Get placement range for each prize for e in earnings: placements = get_placements(e.event) for prize, rng in placements.items(): if rng[0] <= e.placement <= rng[1]: e.rng = rng # }}} # {{{ Sum up earnings by currency currencies = {e.currency for e in earnings} by_currency = { cur: sum([e.origearnings for e in earnings if e.currency == cur]) for cur in currencies } if len(by_currency) == 1 and 'USD' in by_currency: by_currency = None # }}} base.update({ 'player': player, 'earnings': earnings, 'totalearnings': totalearnings, 'by_currency': by_currency, 'year': year, 'valid_years': reversed(list(valid_years)) }) return render_to_response('player_earnings.djhtml', base)
def earnings(request, player_id): player = get_object_or_404(Player, id=player_id) base = base_ctx("Ranking", "Earnings", request, context=player) year = get_param(request, "year", "all") # {{{ Gather data earnings = player.earnings_set if year != "all": earnings = earnings.filter(event__latest__year=year) earnings = earnings.prefetch_related("event__earnings_set").order_by("-event__latest") totalearnings = earnings.aggregate(Sum("earnings"))["earnings__sum"] years = range(2010, datetime.now().year + 1) def year_is_valid(y): return player.earnings_set.filter(event__latest__year=y).exists() valid_years = filter(year_is_valid, years) # Get placement range for each prize for e in earnings: placements = get_placements(e.event) for prize, rng in placements.items(): if rng[0] <= e.placement <= rng[1]: e.rng = rng # }}} # {{{ Sum up earnings by currency currencies = {e.currency for e in earnings} by_currency = {cur: sum([e.origearnings for e in earnings if e.currency == cur]) for cur in currencies} if len(by_currency) == 1 and "USD" in by_currency: by_currency = None # }}} base.update( { "player": player, "earnings": earnings, "totalearnings": totalearnings, "by_currency": by_currency, "year": year, "valid_years": reversed(list(valid_years)), } ) return render_to_response("player_earnings.djhtml", base)
def earnings(request, player_id): player = get_object_or_404(Player, id=player_id) base = base_ctx('Ranking', 'Earnings', request, context=player) year = get_param(request, 'year', 'all') # {{{ Gather data earnings = player.earnings_set if year != 'all': earnings = earnings.filter(event__latest__year=year) earnings = earnings.prefetch_related('event__earnings_set').order_by('-event__latest') totalearnings = earnings.aggregate(Sum('earnings'))['earnings__sum'] years = range(2010, datetime.now().year + 1) def year_is_valid(y): return player.earnings_set.filter(event__latest__year=y).exists() valid_years = filter(year_is_valid, years) # Get placement range for each prize for e in earnings: placements = get_placements(e.event) for prize, rng in placements.items(): if rng[0] <= e.placement <= rng[1]: e.rng = rng # }}} # {{{ Sum up earnings by currency currencies = {e.currency for e in earnings} by_currency = {cur: sum([e.origearnings for e in earnings if e.currency == cur]) for cur in currencies} if len(by_currency) == 1 and 'USD' in by_currency: by_currency = None # }}} base.update({ 'player': player, 'earnings': earnings, 'totalearnings': totalearnings, 'by_currency': by_currency, 'year': year, 'valid_years': reversed(list(valid_years)) }) return render_to_response('player_earnings.djhtml', base)
def events(request, event_id=None): # {{{ Get base context, redirect if necessary if 'goto' in request.GET: return redirect('/results/events/' + request.GET['goto']) base = base_ctx('Results', 'By Event', request) # }}} # {{{ Display the main table if event ID is not given if event_id is None: root_events = ( Event.objects .annotate(num_uplinks=Count("uplink")) .filter(num_uplinks=1) .order_by('name') .only('id', 'name', 'big', 'category', 'fullname') ) base.update({ 'bigs': ( list(root_events.filter(big=True, category=CAT_INDIVIDUAL)) + list(root_events.filter(big=True, category=CAT_TEAM)) + list(root_events.filter(big=True, category=CAT_FREQUENT)) ), 'smalls': ( list(root_events.filter(big=False, category=CAT_INDIVIDUAL).order_by('name')) + list(root_events.filter(big=False, category=CAT_TEAM).order_by('name')) + list(root_events.filter(big=False, category=CAT_FREQUENT).order_by('name')) ) }) base['messages'].append(Message( _('The events are organized in a hierarchical fashion. Thus, all GSL tournaments ' 'are filed under GSL, all Code S under their respective seasons, all groups under ' 'their respective Code S event, and so on.'), type=Message.INFO )) return render_to_response('events.djhtml', base) # }}} # {{{ Get object, generate messages, and ensure big is set. Find familial relationships. event = get_object_or_404(Event, id=event_id) base['messages'] += generate_messages(event) matches = event.get_matchset() if matches.count() > 200 and not event.big: event.set_big(True) base.update({ 'event': event, 'siblings': event.get_parent().get_immediate_children().exclude(id=event.id) if event.get_parent() else None, 'path': event.get_ancestors(id=True), 'children': event.get_immediate_children(), }) # }}} # {{{ Make forms if base['adm']: def check_form(formname, cl, check): if request.method == 'POST' and check in request.POST: f = cl(request=request, event=event) base['messages'] += f.update_event(event) else: f = cl(event=event) base[formname] = f check_form('form', EventModForm, 'modevent') check_form('addform', AddForm, 'addevent') if event.has_children(): check_form('reorderform', ReorderForm, 'reorder') if event.type == TYPE_EVENT: check_form('ppform', PrizepoolModForm, 'modpp') check_form('wcsform', WCSModForm, 'modwcs') if not event.has_children() and event.get_immediate_matchset().exists(): check_form('stform', StoriesForm, 'modstory') if 'close' in request.GET and request.GET['close'] == '1': event.close() base['messages'].append(Message(_('Sucessfully closed event.'), type=Message.SUCCESS)) # }}} # {{{ Prizepool information for the public total_earnings = Earnings.objects.filter(event__uplink__parent=event) local_earnings = Earnings.objects.filter(event=event) ranked_prize = local_earnings.exclude(placement=0)\ .order_by('-earnings', 'placement') unranked_prize = list( local_earnings.filter(placement=0).order_by('-earnings') ) placements = get_placements(event) prize_pool_table = list() for k, g in groupby(ranked_prize, key=lambda x: x.earnings): gl = list(g) prize_pool_table.append((k, placements[k], gl, len(gl))) if len(prize_pool_table) > 0: base['ranked_prize'] = prize_pool_table if len(unranked_prize) > 0: base['unranked_prize'] = unranked_prize currencies = list({r['currency'] for r in total_earnings.values('currency').distinct()}) base.update({ 'prizepool': total_earnings.aggregate(Sum('earnings'))['earnings__sum'], 'nousdpp': len(currencies) > 1 or len(currencies) == 1 and currencies[0] != 'USD', 'prizepoolorig': [{ 'pp': total_earnings.filter(currency=k).aggregate(Sum('origearnings'))['origearnings__sum'], 'cur': k, } for k in currencies], }) # }}} # {{{ Other easy statistics add_links = request.user.is_authenticated() and request.user.is_staff base.update({ 'game': etn(lambda: dict(GAMES)[matches.values('game').distinct()[0]['game']]), 'nmatches': matches.count(), 'ngames': sum(count_winloss_games(matches)), 'pvp_games': count_mirror_games(matches, 'P'), 'tvt_games': count_mirror_games(matches, 'T'), 'zvz_games': count_mirror_games(matches, 'Z'), 'matches': display_matches( matches.prefetch_related('message_set') .prefetch_related('pla', 'plb', 'eventobj') .annotate(Count('eventobj__match')) .order_by('-eventobj__latest', '-eventobj__idx', '-date', '-id')[0:200], eventcount=True, add_links=add_links ), 'nplayers': Player.objects.filter( Q(id__in=matches.values('pla')) | Q(id__in=matches.values('plb')) ).count(), }) offlines = list(matches.values('offline').distinct()) if len(offlines) > 1: base['offline'] = _('Both') elif len(offlines) == 1: base['offline'] = _('Offline') if offlines[0]['offline'] else _('Online') base['pvt_wins'], base['pvt_loss'] = count_matchup_games(matches, 'P', 'T') base['pvz_wins'], base['pvz_loss'] = count_matchup_games(matches, 'P', 'Z') base['tvz_wins'], base['tvz_loss'] = count_matchup_games(matches, 'T', 'Z') base['tot_mirror'] = base['pvp_games'] + base['tvt_games'] + base['zvz_games'] # }}} return render_to_response('eventres.djhtml', base)
def events(request, event_id=None): # {{{ Get base context, redirect if necessary if 'goto' in request.GET: return redirect('/results/events/' + request.GET['goto']) base = base_ctx('Results', 'By Event', request) # }}} # {{{ Display the main table if event ID is not given if event_id is None: root_events = (Event.objects.annotate( num_uplinks=Count("uplink")).filter( num_uplinks=1).order_by('name').only('id', 'name', 'big', 'category', 'fullname')) base.update({ 'bigs': (list(root_events.filter(big=True, category=CAT_INDIVIDUAL)) + list(root_events.filter(big=True, category=CAT_TEAM)) + list(root_events.filter(big=True, category=CAT_FREQUENT))), 'smalls': (list( root_events.filter(big=False, category=CAT_INDIVIDUAL).order_by('name')) + list( root_events.filter(big=False, category=CAT_TEAM).order_by('name')) + list( root_events.filter(big=False, category=CAT_FREQUENT).order_by('name'))) }) base['messages'].append( Message(_( 'The events are organized in a hierarchical fashion. Thus, all GSL tournaments ' 'are filed under GSL, all Code S under their respective seasons, all groups under ' 'their respective Code S event, and so on.'), type=Message.INFO)) return render_to_response('events.djhtml', base) # }}} # {{{ Get object, generate messages, and ensure big is set. Find familial relationships. event = get_object_or_404(Event, id=event_id) base['messages'] += generate_messages(event) matches = event.get_matchset() if matches.count() > 200 and not event.big: event.set_big(True) base.update({ 'event': event, 'siblings': event.get_parent().get_immediate_children().exclude( id=event.id) if event.get_parent() else None, 'path': event.get_ancestors(id=True), 'children': event.get_immediate_children(), }) # }}} # {{{ Make forms if base['adm']: def check_form(formname, cl, check): if request.method == 'POST' and check in request.POST: f = cl(request=request, event=event) base['messages'] += f.update_event(event) else: f = cl(event=event) base[formname] = f check_form('form', EventModForm, 'modevent') check_form('addform', AddForm, 'addevent') if event.has_children(): check_form('reorderform', ReorderForm, 'reorder') if event.type == TYPE_EVENT: check_form('ppform', PrizepoolModForm, 'modpp') if not event.has_children() and event.get_immediate_matchset().exists( ): check_form('stform', StoriesForm, 'modstory') # }}} # {{{ Prizepool information for the public total_earnings = Earnings.objects.filter(event__uplink__parent=event) local_earnings = Earnings.objects.filter(event=event) ranked_prize = local_earnings.exclude(placement=0)\ .order_by('-earnings', 'placement') unranked_prize = list( local_earnings.filter(placement=0).order_by('-earnings')) placements = get_placements(event) prize_pool_table = list() for k, g in groupby(ranked_prize, key=lambda x: x.earnings): gl = list(g) prize_pool_table.append((k, placements[k], gl, len(gl))) if len(prize_pool_table) > 0: base['ranked_prize'] = prize_pool_table if len(unranked_prize) > 0: base['unranked_prize'] = unranked_prize currencies = list( {r['currency'] for r in total_earnings.values('currency').distinct()}) base.update({ 'prizepool': total_earnings.aggregate(Sum('earnings'))['earnings__sum'], 'nousdpp': len(currencies) > 1 or len(currencies) == 1 and currencies[0] != 'USD', 'prizepoolorig': [{ 'pp': total_earnings.filter(currency=k).aggregate( Sum('origearnings'))['origearnings__sum'], 'cur': k, } for k in currencies], }) # }}} # {{{ Other easy statistics add_links = request.user.is_authenticated() and request.user.is_staff base.update({ 'game': etn(lambda: dict(GAMES)[matches.values('game').distinct()[0]['game']]), 'nmatches': matches.count(), 'ngames': sum(count_winloss_games(matches)), 'pvp_games': count_mirror_games(matches, 'P'), 'tvt_games': count_mirror_games(matches, 'T'), 'zvz_games': count_mirror_games(matches, 'Z'), 'matches': display_matches( matches.prefetch_related('message_set').prefetch_related( 'pla', 'plb', 'eventobj').annotate(Count('eventobj__match')).order_by( '-eventobj__latest', '-eventobj__idx', '-date', '-id')[0:200], eventcount=True, add_links=add_links), 'nplayers': Player.objects.filter( Q(id__in=matches.values('pla')) | Q(id__in=matches.values('plb'))).count(), }) offlines = list(matches.values('offline').distinct()) if len(offlines) > 1: base['offline'] = _('Both') elif len(offlines) == 1: base['offline'] = _('Offline') if offlines[0]['offline'] else _( 'Online') base['pvt_wins'], base['pvt_loss'] = count_matchup_games(matches, 'P', 'T') base['pvz_wins'], base['pvz_loss'] = count_matchup_games(matches, 'P', 'Z') base['tvz_wins'], base['tvz_loss'] = count_matchup_games(matches, 'T', 'Z') base['tot_mirror'] = base['pvp_games'] + base['tvt_games'] + base[ 'zvz_games'] # }}} return render_to_response('eventres.djhtml', base)