123 lines
3.4 KiB
Python
123 lines
3.4 KiB
Python
from django.shortcuts import render
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.shortcuts import get_object_or_404
|
|
from django.urls import reverse
|
|
|
|
import collections
|
|
|
|
# Create your views here.
|
|
from django.views.generic.edit import CreateView
|
|
from boatmovers.models import Athlete, Crew, Race, Result
|
|
|
|
class AthleteCreateView(CreateView):
|
|
model = Athlete
|
|
fields = [
|
|
'first_name',
|
|
'last_name',
|
|
'birth_year',
|
|
'gender',
|
|
'club',
|
|
]
|
|
success_url = '/boatmovers/'
|
|
|
|
class CrewCreateView(CreateView):
|
|
model = Crew
|
|
fields = [
|
|
'name',
|
|
'athletes'
|
|
]
|
|
|
|
success_url = '/boatmovers/'
|
|
|
|
class RaceCreateView(CreateView):
|
|
model = Race
|
|
fields = [
|
|
'name',
|
|
'resulturl',
|
|
'date',
|
|
'crew_size',
|
|
#'resultlist',
|
|
]
|
|
|
|
success_url = '/boatmovers/'
|
|
|
|
class ResultCreateView(CreateView):
|
|
model = Result
|
|
fields = [
|
|
'crew',
|
|
'race',
|
|
'order'
|
|
]
|
|
|
|
success_url = '/boatmovers/'
|
|
|
|
def boatmovers_view(request):
|
|
athletes = Athlete.objects.filter(trueskill_exposed__gt=0).order_by('-trueskill_exposed','-birth_year','last_name','first_name')
|
|
|
|
races = Race.objects.filter(verified=True,processed=True).order_by('-date')
|
|
new_races = Race.objects.filter(processed=False).order_by('date')
|
|
|
|
return render(request,
|
|
'boatmovers.html',
|
|
{'athletes':athletes,
|
|
'races': races,
|
|
'new_races': new_races}
|
|
)
|
|
|
|
def race_view(request,id=0):
|
|
race = get_object_or_404(Race, pk=id)
|
|
results = race.results.all().order_by('order')
|
|
|
|
crews = []
|
|
athletes = []
|
|
|
|
for result in results:
|
|
crews.append(result.crew.id)
|
|
for athlete in result.crew.athletes.all():
|
|
athletes.append(athlete.id)
|
|
|
|
# duplicates
|
|
duplicate_athletes = [item for item, count in collections.Counter(athletes).items() if count>1]
|
|
duplicate_crews = [item for item, count in collections.Counter(crews).items() if count>1]
|
|
duplicate_athletes_crews = []
|
|
for athlete_id in duplicate_athletes:
|
|
athlete = Athlete.objects.get(id=athlete_id)
|
|
crews = [crew.id for crew in athlete.athlete_crews.all()]
|
|
for crew in crews:
|
|
duplicate_athletes_crews.append(crew)
|
|
|
|
|
|
return render(request,
|
|
'race.html',
|
|
{
|
|
'race':race,
|
|
'results':results,
|
|
'duplicate_athletes':duplicate_athletes,
|
|
'duplicate_crews':duplicate_crews,
|
|
'duplicate_athletes_crews':duplicate_athletes_crews
|
|
}
|
|
)
|
|
|
|
def race_verify(request, id=0):
|
|
race = get_object_or_404(Race, pk=id)
|
|
outcome = race.validate()
|
|
|
|
return HttpResponseRedirect(reverse('race_view',kwargs={'id':race.id}))
|
|
|
|
def race_process(request, id=0):
|
|
race = get_object_or_404(Race, pk=id)
|
|
outcome = race.process()
|
|
|
|
return HttpResponseRedirect(reverse('race_view',kwargs={'id':race.id}))
|
|
|
|
def crew_view(request, id=0):
|
|
crew = get_object_or_404(Crew, pk=id)
|
|
athletes = crew.athletes.all().order_by("-trueskill_exposed")
|
|
|
|
return render(request,
|
|
'crew.html',
|
|
{
|
|
'crew':crew,
|
|
'athletes':athletes
|
|
})
|