Private
Public Access
1
0

adding race selector to workout upload

This commit is contained in:
Sander Roosendaal
2018-12-02 19:18:04 +01:00
parent a746052fbf
commit aa520bbf98
5 changed files with 199 additions and 7 deletions

View File

@@ -1,6 +1,9 @@
from django import forms from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple from django.contrib.admin.widgets import FilteredSelectMultiple
from rowers.models import Workout,Rower,Team,PlannedSession,GeoCourse from rowers.models import (
Workout,Rower,Team,PlannedSession,GeoCourse,
VirtualRace,VirtualRaceResult,IndoorVirtualRaceResult
)
from rowers.rows import validate_file_extension,must_be_csv,validate_image_extension,validate_kml from rowers.rows import validate_file_extension,must_be_csv,validate_image_extension,validate_kml
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -16,6 +19,7 @@ from utils import landingpages
from metrics import axes from metrics import axes
# login form # login form
class LoginForm(forms.Form): class LoginForm(forms.Form):
username = forms.CharField() username = forms.CharField()
@@ -254,6 +258,10 @@ class UploadOptionsForm(forms.Form):
makeprivate = forms.BooleanField(initial=False,required=False, makeprivate = forms.BooleanField(initial=False,required=False,
label='Make Workout Private') label='Make Workout Private')
submitrace = forms.ModelChoiceField(queryset=VirtualRace.objects.all(),
label='Submit as Race Result',
required=False)
landingpage = forms.ChoiceField(choices=nextpages, landingpage = forms.ChoiceField(choices=nextpages,
initial='workout_edit_view', initial='workout_edit_view',
label='After Upload, go to') label='After Upload, go to')
@@ -261,6 +269,28 @@ class UploadOptionsForm(forms.Form):
class Meta: class Meta:
fields = ['make_plot','plottype','upload_toc2','makeprivate'] fields = ['make_plot','plottype','upload_toc2','makeprivate']
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request',None)
super(UploadOptionsForm, self).__init__(*args, **kwargs)
r = Rower.objects.get(user=self.request.user)
races = VirtualRace.objects.filter(
registration_closure__gt=timezone.now(),
sessiontype='indoorrace')
registrations = IndoorVirtualRaceResult.objects.filter(
race__in = races,
userid = r.id)
raceids = [r.race.id for r in registrations]
races = VirtualRace.objects.filter(
id__in=raceids
)
if races:
self.fields['submitrace'].queryset = races
else:
del self.fields['submitrace']
# The form to indicate additional actions to be performed immediately # The form to indicate additional actions to be performed immediately
# after a successful upload. This version allows the Team manager to select # after a successful upload. This version allows the Team manager to select
# a team member # a team member

View File

@@ -1006,6 +1006,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0):
record.duration = ws[0].duration record.duration = ws[0].duration
if ws[0].weightcategory != record.weightcategory: if ws[0].weightcategory != record.weightcategory:
errors.append('Your workout weight category did not match the weight category you registered') errors.append('Your workout weight category did not match the weight category you registered')
return 0,comments, errors,0 return 0,comments, errors,0
@@ -1029,7 +1030,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0):
record.coursecompleted = True record.coursecompleted = True
record.workoutid = ws[0].id record.workoutid = ws[0].id
record.save() record.save()
add_workouts_plannedsession(ws,race,r) add_workouts_plannedsession(ws,race,r)

View File

@@ -45,7 +45,7 @@
<i class="fas fa-file-plus fa-fw"></i>&nbsp;Submit Workout</a> <i class="fas fa-file-plus fa-fw"></i>&nbsp;Submit Workout</a>
</li> </li>
<li> <li>
<a href="/rowers/upload"> <a href="/rowers/workout/upload">
<i class="fas fa-file-upload fa-fw"></i>&nbsp;Upload your race result <i class="fas fa-file-upload fa-fw"></i>&nbsp;Upload your race result
</a> </a>
</li> </li>

View File

@@ -37,10 +37,10 @@
{% if rower %} {% if rower %}
{% if race|can_register:rower %} {% if race|can_register:rower %}
<a class="white dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a> <a class="white dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a>
{% elif race|can_submit:rower %}
<a class="orange dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a>
{% elif race|race_complete:rower %} {% elif race|race_complete:rower %}
<a class="green dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a> <a class="green dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a>
{% elif race|can_submit:rower %}
<a class="orange dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a>
{% elif race|future_registered:rower %} {% elif race|future_registered:rower %}
<a class="orange dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a> <a class="orange dot" href="/rowers/virtualevent/{{ race.id }}">&nbsp;</a>
{% elif race|past_not_registered:rower %} {% elif race|past_not_registered:rower %}

View File

@@ -11462,7 +11462,7 @@ def workout_upload_view(request,
response = {} response = {}
if request.method == 'POST': if request.method == 'POST':
form = DocumentsForm(request.POST,request.FILES) form = DocumentsForm(request.POST,request.FILES)
optionsform = UploadOptionsForm(request.POST) optionsform = UploadOptionsForm(request.POST,request=request)
if form.is_valid(): if form.is_valid():
# f = request.FILES['file'] # f = request.FILES['file']
@@ -11503,6 +11503,11 @@ def workout_upload_view(request,
makeprivate = optionsform.cleaned_data['makeprivate'] makeprivate = optionsform.cleaned_data['makeprivate']
landingpage = optionsform.cleaned_data['landingpage'] landingpage = optionsform.cleaned_data['landingpage']
try:
race = optionsform.cleaned_data['submitrace']
except KeyError:
race = None
uploadoptions = { uploadoptions = {
'makeprivate':makeprivate, 'makeprivate':makeprivate,
'make_plot':make_plot, 'make_plot':make_plot,
@@ -11688,6 +11693,28 @@ def workout_upload_view(request,
else: else:
messages.error(request,message) messages.error(request,message)
if race and race_can_submit(r,race):
records = IndoorVirtualRaceResult.objects.filter(
race=race,
userid=r.id
)
if records:
result,comments,errors,jobid = add_workout_indoorrace(
[w],race,r,recordid=records[0].id
)
if result:
messages.info(
request,
"We have submitted your workout to the race")
for c in comments:
messages.info(request,c)
for er in errors:
messages.error(request,er)
if landingpage != 'workout_upload_view': if landingpage != 'workout_upload_view':
url = reverse(landingpage, url = reverse(landingpage,
@@ -11736,7 +11763,8 @@ def workout_upload_view(request,
uploadoptions['upload_to_MapMyFitness'] = True uploadoptions['upload_to_MapMyFitness'] = True
form = DocumentsForm(initial=docformoptions) form = DocumentsForm(initial=docformoptions)
optionsform = UploadOptionsForm(initial=uploadoptions) optionsform = UploadOptionsForm(initial=uploadoptions,
request=request)
return render(request, 'document_form.html', return render(request, 'document_form.html',
{'form':form, {'form':form,
'active':'nav-workouts', 'active':'nav-workouts',
@@ -16122,11 +16150,32 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0):
}, },
] ]
buttons = []
if not request.user.is_anonymous():
if race_can_register(r,race):
buttons += ['registerbutton']
if race_can_adddiscipline(r,race):
buttons += ['adddisciplinebutton']
if race_can_submit(r,race):
buttons += ['submitbutton']
if race_can_resubmit(r,race):
buttons += ['resubmitbutton']
if race_can_withdraw(r,race):
buttons += ['withdrawbutton']
if race_can_edit(r,race):
buttons += ['editbutton']
return render(request,"disqualification_view.html", return render(request,"disqualification_view.html",
{'workout':workout, {'workout':workout,
'active':'nav-racing', 'active':'nav-racing',
'graphs':g, 'graphs':g,
'buttons':buttons,
'interactiveplot':script, 'interactiveplot':script,
'the_div':div, 'the_div':div,
'mapscript':mapscript, 'mapscript':mapscript,
@@ -16464,10 +16513,31 @@ def virtualevent_addboat_view(request,id=0):
] ]
buttons = []
if not request.user.is_anonymous():
if race_can_register(r,race):
buttons += ['registerbutton']
if race_can_adddiscipline(r,race):
buttons += ['adddisciplinebutton']
if race_can_submit(r,race):
buttons += ['submitbutton']
if race_can_resubmit(r,race):
buttons += ['resubmitbutton']
if race_can_withdraw(r,race):
buttons += ['withdrawbutton']
if race_can_edit(r,race):
buttons += ['editbutton']
return render(request,'virtualeventregister.html', return render(request,'virtualeventregister.html',
{ {
'form':form, 'form':form,
'buttons':buttons,
'breadcrumbs':breadcrumbs, 'breadcrumbs':breadcrumbs,
'race':race, 'race':race,
'userid':r.user.id, 'userid':r.user.id,
@@ -16593,9 +16663,32 @@ def virtualevent_register_view(request,id=0):
'name': 'Register' 'name': 'Register'
} }
] ]
buttons = []
if not request.user.is_anonymous():
if race_can_register(r,race):
buttons += ['registerbutton']
if race_can_adddiscipline(r,race):
buttons += ['adddisciplinebutton']
if race_can_submit(r,race):
buttons += ['submitbutton']
if race_can_resubmit(r,race):
buttons += ['resubmitbutton']
if race_can_withdraw(r,race):
buttons += ['withdrawbutton']
if race_can_edit(r,race):
buttons += ['editbutton']
return render(request,'virtualeventregister.html', return render(request,'virtualeventregister.html',
{ {
'form':form, 'form':form,
'buttons':buttons,
'breadcrumbs':breadcrumbs, 'breadcrumbs':breadcrumbs,
'race':race, 'race':race,
'userid':r.user.id, 'userid':r.user.id,
@@ -16717,9 +16810,31 @@ def indoorvirtualevent_register_view(request,id=0):
} }
] ]
buttons = []
if not request.user.is_anonymous():
if race_can_register(r,race):
buttons += ['registerbutton']
if race_can_adddiscipline(r,race):
buttons += ['adddisciplinebutton']
if race_can_submit(r,race):
buttons += ['submitbutton']
if race_can_resubmit(r,race):
buttons += ['resubmitbutton']
if race_can_withdraw(r,race):
buttons += ['withdrawbutton']
if race_can_edit(r,race):
buttons += ['editbutton']
return render(request,'virtualeventregister.html', return render(request,'virtualeventregister.html',
{ {
'form':form, 'form':form,
'buttons':buttons,
'race':race, 'race':race,
'breadcrumbs':breadcrumbs, 'breadcrumbs':breadcrumbs,
'userid':r.user.id, 'userid':r.user.id,
@@ -17067,10 +17182,32 @@ def virtualevent_edit_view(request,id=0):
} }
] ]
buttons = []
if not request.user.is_anonymous():
if race_can_register(r,race):
buttons += ['registerbutton']
if race_can_adddiscipline(r,race):
buttons += ['adddisciplinebutton']
if race_can_submit(r,race):
buttons += ['submitbutton']
if race_can_resubmit(r,race):
buttons += ['resubmitbutton']
if race_can_withdraw(r,race):
buttons += ['withdrawbutton']
if race_can_edit(r,race):
buttons += ['editbutton']
return render(request,'virtualeventedit.html', return render(request,'virtualeventedit.html',
{ {
'form':racecreateform, 'form':racecreateform,
'breadcrumbs':breadcrumbs, 'breadcrumbs':breadcrumbs,
'buttons':buttons,
'rower':r, 'rower':r,
'race':race, 'race':race,
@@ -17143,9 +17280,33 @@ def indoorvirtualevent_edit_view(request,id=0):
'name': 'Edit' 'name': 'Edit'
} }
] ]
buttons = []
if not request.user.is_anonymous():
if race_can_register(r,race):
buttons += ['registerbutton']
if race_can_adddiscipline(r,race):
buttons += ['adddisciplinebutton']
if race_can_submit(r,race):
buttons += ['submitbutton']
if race_can_resubmit(r,race):
buttons += ['resubmitbutton']
if race_can_withdraw(r,race):
buttons += ['withdrawbutton']
if race_can_edit(r,race):
buttons += ['editbutton']
return render(request,'virtualeventedit.html', return render(request,'virtualeventedit.html',
{ {
'form':racecreateform, 'form':racecreateform,
'buttons':buttons,
'breadcrumbs':breadcrumbs, 'breadcrumbs':breadcrumbs,
'rower':r, 'rower':r,
'race':race, 'race':race,