def person (request,person_name): c=RequestContext(request) person = get_object_or_404(Person,name=person_name) entries = person.entry_set.all().order_by('-total_score') entriescount = entries.count() entriescountseason = entries.filter(round__season=Season.latest()).count() averagescore = entries.aggregate(Avg('total_score'))['total_score__avg'] averagescoreseason = entries.filter(round__season=Season.latest()).aggregate(Avg('total_score'))['total_score__avg'] return render_to_response('person.html',{'person':person,'entries':entries,'entriescount':entriescount,'entriescountseason':entriescountseason,'averagescore':averagescore,'averagescoreseason':averagescoreseason},c)
def bulkadd(request): thisround = Round.objects.all().order_by('-id')[0] resultstext = request.POST.get('resultstext') resultsarr = [] if resultstext != None: results = resultstext.split("\n") if request.POST.get('assign')=='true': for result in results: result = result.replace("\t\t","\t") bits = result.split("\t") mapname = request.POST.get('map'+bits[0]) person = None if mapname=='new': person = Person(name=bits[0]) person.save() person=Person.objects.get(name=bits[0]) elif mapname==None: person=Person.objects.get(name=bits[0]) else: person=Person.objects.get(id=mapname) thisentry=Entry(person=person,round=thisround,technical_score=bits[1],theme_score=bits[2],impact_score=bits[3],total_score=bits[4]) thisentry.save() return HttpResponseRedirect("/cp/photocomp/round/") else: peopledropdown = "" peopledropdownarr = ["<option value=\"new\">(create new...)</option>"] for person in Person.objects.all().order_by('name'): peopledropdownarr.append('<option value="'+str(person.id)+'">'+person.name+'</option>') peopledropdown = ''.join(peopledropdownarr) for result in results: result = result.replace("\t\t","\t") bits = result.split("\t") if (len(bits)>=5): mapsto = bits[0] if Person.objects.filter(name=mapsto).exists()==False: mapsto = "<select name=\"map"+bits[0]+"\">"+peopledropdown+"</select>" resultsarr.append("<tr><td>"+bits[0]+"</td><td>"+mapsto+"</td><td>"+bits[1]+"</td><td>"+bits[2]+"</td><td>"+bits[3]+"</td><td>"+bits[4]+"</td></tr>") return render_to_response("admin/bulkadd.html", { 'season':Season.latest(), 'round':thisround, 'resultstext':resultstext, 'resultsarr':resultsarr }, RequestContext(request,{}))
def season(request,season_name=None): c=RequestContext(request) if season_name == None: season=Season.latest() else: season = get_object_or_404(Season,name=season_name) rounds = Round.objects.filter(season=season).order_by('number') rounds = rounds.reverse() if len(rounds)==0: return render_to_response('season.html',{'season':season},c) else: winner = None counter = 0 while winner == None: latestround = rounds[counter] entries = Entry.objects.filter(round=latestround).order_by('-total_score') if len(entries) > 0: winner=entries[0] counter+=1 seasonscores=Entry.objects.values('person__name','round__season').filter(round__season=season).annotate(total=Sum('total_score'), entered=Count('round')).order_by('-total') rank = 1 previous = None seasonscores = list(seasonscores) previous = seasonscores[0] previous['rank'] = 1 for i, entry in enumerate(seasonscores[1:]): if entry['total'] != previous['total']: rank = i + 2 entry['rank'] = str(rank) else: entry['rank'] = "%s=" % rank previous['rank'] = entry['rank'] previous = entry bestentry = None if season.complete: winner = Person.objects.all().filter(name=seasonscores[0]['person__name'])[0] bestentry = Entry.objects.all().filter(person=winner,round__season=season).order_by('-total_score')[0] rounds = rounds.reverse() return render_to_response('season.html',{'season':season,'rounds':rounds,'latestround':latestround,'winner':winner,'seasonscores':seasonscores,'bestentry':bestentry},c)