From 966b5454d3a1da358985016adfbf3e5819dde391 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 29 Jun 2022 21:36:40 +0200 Subject: [PATCH] fix --- boatmovers/forms.py | 5 +++ boatmovers/templates/athlete.html | 16 ++++++++ boatmovers/templates/csvform.html | 14 +++++++ boatmovers/templates/race.html | 3 ++ boatmovers/urls.py | 2 + boatmovers/views.py | 63 +++++++++++++++++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 boatmovers/forms.py create mode 100644 boatmovers/templates/athlete.html create mode 100644 boatmovers/templates/csvform.html diff --git a/boatmovers/forms.py b/boatmovers/forms.py new file mode 100644 index 00000000..ca5efb59 --- /dev/null +++ b/boatmovers/forms.py @@ -0,0 +1,5 @@ +from django import forms + +class CsvForm(forms.Form): + file = forms.FileField(label='CSV File') + # comment = forms.CharField(required=False) diff --git a/boatmovers/templates/athlete.html b/boatmovers/templates/athlete.html new file mode 100644 index 00000000..ad92e6ce --- /dev/null +++ b/boatmovers/templates/athlete.html @@ -0,0 +1,16 @@ +{% extends "boatmovers_base.html" %} + +{% block main %} +

+ {{ athlete.first_name }} {{ athlete.last_name }} +

+

+ + {% for result in results %} + + + + {% endfor %} +
{{ result.order }}{{ result.race.name }}
+

+{% endblock %} diff --git a/boatmovers/templates/csvform.html b/boatmovers/templates/csvform.html new file mode 100644 index 00000000..fe1e592a --- /dev/null +++ b/boatmovers/templates/csvform.html @@ -0,0 +1,14 @@ +{% extends "boatmovers_base.html" %} + +{% block main %} +

+ {{ athlete.first_name }} {{ athlete.last_name }} +

+

+

+ {{ form.as_p }} + + +
+

+{% endblock %} diff --git a/boatmovers/templates/race.html b/boatmovers/templates/race.html index 3e92de8a..ba1a7def 100644 --- a/boatmovers/templates/race.html +++ b/boatmovers/templates/race.html @@ -7,6 +7,9 @@

{{ race.date }}

+

+ Results +

diff --git a/boatmovers/urls.py b/boatmovers/urls.py index a2933262..56483293 100644 --- a/boatmovers/urls.py +++ b/boatmovers/urls.py @@ -6,10 +6,12 @@ import boatmovers.views as views urlpatterns = [ url(r'athlete/add/$',views.AthleteCreateView.as_view(),name='athlete_add'), + url(r'athlete/(?P\d+)/$',views.athlete_view,name='athlete_view'), url(r'crew/add/$',views.CrewCreateView.as_view(),name='crew_add'), url(r'race/add/$',views.RaceCreateView.as_view(),name='race_add'), url(r'result/add/$',views.ResultCreateView.as_view(),name='result_add'), url(r'race/(?P\d+)/$',views.race_view,name='race_view'), + url(r'race/(?P\d+)/csv/$',views.race_add_csv,name='race_add_csv'), url(r'race/(?P\d+)/verify/$',views.race_verify,name='race_verify'), url(r'race/(?P\d+)/process/$',views.race_process,name='race_process'), url(r'crew/(?P\d+)/$',views.crew_view,name='crew_view'), diff --git a/boatmovers/views.py b/boatmovers/views.py index 5ff1700c..3b048a8c 100644 --- a/boatmovers/views.py +++ b/boatmovers/views.py @@ -10,6 +10,9 @@ import collections from django.views.generic.edit import CreateView from boatmovers.models import Athlete, Crew, Race, Result import boatmovers.tasks as tasks +from boatmovers.forms import CsvForm +from boatmovers.scrapers import * +#from rowers.rows import handle_uploaded_file import django_rq queue = django_rq.get_queue('high') @@ -55,6 +58,24 @@ class ResultCreateView(CreateView): success_url = '/boatmovers/' +def athlete_view(request,id=0): + athlete = get_object_or_404(Athlete, pk=id) + crews = athlete.athlete_crews + resultslist = [] + + for crew in crews.values(): + c = Crew.objects.get(id=crew['id']) + results = Result.objects.filter(crew=c) + for result in results: + resultslist.append(result) + + return render(request, + 'athlete.html', + { + 'athlete':athlete, + 'results':resultslist, + }) + def boatmovers_view(request): athletes = Athlete.objects.filter(trueskill_exposed__gt=0, dummy=False).order_by('-trueskill_exposed','-birth_year','last_name','first_name') @@ -116,6 +137,48 @@ def race_verify(request, id=0): return HttpResponseRedirect(reverse('race_view',kwargs={'id':race.id})) +def handle_uploaded_file(f): + with open('media/results.csv', 'wb+') as destination: + for chunk in f.chunks(): + destination.write(chunk) + +def race_add_csv(request, id=0): + race = get_object_or_404(Race, pk=id) + if race.verified or race.processed: + messages.error(request,"Cannot upload CSV file for processed or verified race") + url = reverse("race_view",kwargs={'id':id}) + return HttpResponseRedirect(url) + + form = CsvForm() + if request.method == 'POST': + + form = CsvForm(request.POST, request.FILES) + + if form.is_valid(): + handle_uploaded_file(request.FILES['file']) + if race.crew_size == 1: + bankjes = ['Slag'] + elif race.crew_size == 2: + bankjes = ['Slag','Boeg'] + elif race.crew_size == 4: + bankjes = ['Slag','2','3','Boeg'] + elif race.crew_size == 8: + bankjes = ['Slag','2','3','4','5','6','7','Boeg'] + + csv_reader('media/results.csv',race.id,bankjes=bankjes,gender=race.gender) + + url = reverse('race_view',kwargs={'id':race.id}) + + return HttpResponseRedirect(url) + + + return render(request, + 'csvform.html', + { + 'race':race, + 'form':form, + }) + def race_process(request, id=0): race = get_object_or_404(Race, pk=id) job = queue.enqueue(tasks.race_process,race.id)