From aa520bbf98a2b32bf0951c925bf6b48cee709cb9 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 2 Dec 2018 19:18:04 +0100 Subject: [PATCH] adding race selector to workout upload --- rowers/forms.py | 32 +++++- rowers/plannedsessions.py | 3 +- rowers/templates/menu_racing.html | 2 +- rowers/templates/racelist.html | 4 +- rowers/views.py | 165 +++++++++++++++++++++++++++++- 5 files changed, 199 insertions(+), 7 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index d6dc0cdd..c73770fc 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1,6 +1,9 @@ from django import forms 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 django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User @@ -16,6 +19,7 @@ from utils import landingpages from metrics import axes + # login form class LoginForm(forms.Form): username = forms.CharField() @@ -254,6 +258,10 @@ class UploadOptionsForm(forms.Form): makeprivate = forms.BooleanField(initial=False,required=False, label='Make Workout Private') + submitrace = forms.ModelChoiceField(queryset=VirtualRace.objects.all(), + label='Submit as Race Result', + required=False) + landingpage = forms.ChoiceField(choices=nextpages, initial='workout_edit_view', label='After Upload, go to') @@ -261,6 +269,28 @@ class UploadOptionsForm(forms.Form): class Meta: 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 # after a successful upload. This version allows the Team manager to select # a team member diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 09c657b4..c152305c 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -1006,6 +1006,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0): record.duration = ws[0].duration + if ws[0].weightcategory != record.weightcategory: errors.append('Your workout weight category did not match the weight category you registered') return 0,comments, errors,0 @@ -1029,7 +1030,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0): record.coursecompleted = True record.workoutid = ws[0].id record.save() - + add_workouts_plannedsession(ws,race,r) diff --git a/rowers/templates/menu_racing.html b/rowers/templates/menu_racing.html index 3add6467..62c7c54f 100644 --- a/rowers/templates/menu_racing.html +++ b/rowers/templates/menu_racing.html @@ -45,7 +45,7 @@  Submit Workout
  • - +  Upload your race result
  • diff --git a/rowers/templates/racelist.html b/rowers/templates/racelist.html index a0f96927..02e999a0 100644 --- a/rowers/templates/racelist.html +++ b/rowers/templates/racelist.html @@ -37,10 +37,10 @@ {% if rower %} {% if race|can_register:rower %}   - {% elif race|can_submit:rower %} -   {% elif race|race_complete:rower %}   + {% elif race|can_submit:rower %} +   {% elif race|future_registered:rower %}   {% elif race|past_not_registered:rower %} diff --git a/rowers/views.py b/rowers/views.py index eaac8cbb..4d1df1a8 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -11462,7 +11462,7 @@ def workout_upload_view(request, response = {} if request.method == 'POST': form = DocumentsForm(request.POST,request.FILES) - optionsform = UploadOptionsForm(request.POST) + optionsform = UploadOptionsForm(request.POST,request=request) if form.is_valid(): # f = request.FILES['file'] @@ -11503,6 +11503,11 @@ def workout_upload_view(request, makeprivate = optionsform.cleaned_data['makeprivate'] landingpage = optionsform.cleaned_data['landingpage'] + try: + race = optionsform.cleaned_data['submitrace'] + except KeyError: + race = None + uploadoptions = { 'makeprivate':makeprivate, 'make_plot':make_plot, @@ -11688,6 +11693,28 @@ def workout_upload_view(request, else: 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': url = reverse(landingpage, @@ -11736,7 +11763,8 @@ def workout_upload_view(request, uploadoptions['upload_to_MapMyFitness'] = True form = DocumentsForm(initial=docformoptions) - optionsform = UploadOptionsForm(initial=uploadoptions) + optionsform = UploadOptionsForm(initial=uploadoptions, + request=request) return render(request, 'document_form.html', {'form':form, '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", {'workout':workout, 'active':'nav-racing', 'graphs':g, + 'buttons':buttons, 'interactiveplot':script, 'the_div':div, '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', { 'form':form, + 'buttons':buttons, 'breadcrumbs':breadcrumbs, 'race':race, 'userid':r.user.id, @@ -16593,9 +16663,32 @@ def virtualevent_register_view(request,id=0): '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', { 'form':form, + 'buttons':buttons, 'breadcrumbs':breadcrumbs, 'race':race, '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', { 'form':form, + 'buttons':buttons, 'race':race, 'breadcrumbs':breadcrumbs, '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', { 'form':racecreateform, 'breadcrumbs':breadcrumbs, + 'buttons':buttons, 'rower':r, 'race':race, @@ -17143,9 +17280,33 @@ def indoorvirtualevent_edit_view(request,id=0): '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', { 'form':racecreateform, + 'buttons':buttons, 'breadcrumbs':breadcrumbs, 'rower':r, 'race':race,