diff --git a/rowers/templates/manualadd.html b/rowers/templates/manualadd.html index a70040c1..09a435f0 100644 --- a/rowers/templates/manualadd.html +++ b/rowers/templates/manualadd.html @@ -22,12 +22,12 @@ $( document ).ready(function() { || $(this).val() == 'churchboat' ) { $('#id_boattype').toggle(true); - } else { + } else { $('#id_boattype').toggle(false); - $('#id_boattype').val('1x'); + $('#id_boattype').val('1x'); } }); -$('#id_workouttype').change(); +$('#id_workouttype').change(); }); {% endblock %} @@ -41,13 +41,17 @@ $('#id_workouttype').change(); Please correct the error{{ form.errors|pluralize }} below.

{% endif %} - +
{{ form.as_table }} {{ metricsform.as_table }}
+ Optional, add image (PM screenshot, for example as evidence for a virtual race): + + {{ iform.as_table }} +
{% csrf_token %}

@@ -56,7 +60,7 @@ $('#id_workouttype').change(); - + {% endblock %} diff --git a/rowers/templates/virtualevent.html b/rowers/templates/virtualevent.html index c697c265..25c90e4a 100644 --- a/rowers/templates/virtualevent.html +++ b/rowers/templates/virtualevent.html @@ -131,7 +131,7 @@ Contact Phone{{ race.contact_phone }} - Comment{{ race.comment|linebreaks }} + Comment{{ race.comment|linebreaks|urlshorten:"50" }} @@ -187,7 +187,7 @@ {% if race.sessiontype == 'indoorrace' %} - Enter your race result manually + Enter your race result manually If you don't have a data file, enter the results diff --git a/rowers/urls.py b/rowers/urls.py index a616e32c..75479549 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -198,6 +198,7 @@ urlpatterns = [ re_path(r'^list-workouts/$',views.workouts_view,name='workouts_view'), re_path(r'^list-courses/$',views.courses_view,name='courses_view'), re_path(r'^courses/upload/$',views.course_upload_view,name='course_upload_view'), + re_path(r'^workout/addmanual/(?P\d+)$',views.addmanual_view,name='addmanual_view'), re_path(r'^workout/addmanual/$',views.addmanual_view,name='addmanual_view'), re_path(r'^team-compare-select/workout/(?P\d+)/team/(?P\d+)/user/(?P\d+)/$',views.team_comparison_select,name='team_comparison_select'), # re_path(r'^team-compare-select/team/(?P\d+)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/user/(?P\d+)/$',views.team_comparison_select,name='team_comparison_select'), diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 15ea49d4..a60603cc 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -465,6 +465,9 @@ def virtualevents_view(request): races = (races1 | races2).order_by("startdate","start_time") + if len(races) == 0: + races = VirtualRace.objects.all() + if not request.user.is_anonymous: r = getrower(request.user) else: diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 2e5701e0..bb192e93 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -555,7 +555,7 @@ def workout_histo_view(request,id=0): # add a workout manually @login_required() -def addmanual_view(request): +def addmanual_view(request,raceid=0): r = Rower.objects.get(user=request.user) breadcrumbs = [ @@ -665,6 +665,79 @@ def addmanual_view(request): messages.info(request,'New workout created') + iform = ImageForm(request.POST,request.FILES) + if iform.is_valid(): + f = iform.cleaned_data['file'] + + if f is not None: + filename,path_and_filename = handle_uploaded_image(f) + try: + width, height = Image.open(path_and_filename).size + except: + message = "Not a valid image" + messages.error(request,message) + os.remove(path_and_filename) + + i = GraphImage(workout=w, + creationdatetime=timezone.now(), + filename = path_and_filename, + width=width,height=height) + i.save() + + if raceid != 0: + try: + race = VirtualRace.objects.get(id=raceid) + except VirtualRace.DoesNotExist: + messages.error(request,"Race does not exist") + url = reverse('workout_edit_view', + kwargs = {'id':encoder.encode_hex(id)}) + return HttpResponseRedirect(url) + + can_submit = race_can_submit(r,race) or race_can_resubmit(r,race) + can_submit = can_submit and race.sessiontype == 'indoorrace' + if not can_submit: + messages.error(request,'You cannot submit a result for this race') + if can_submit: + records = IndoorVirtualRaceResult.objects.filter(race=race,userid=r.id) + if not records: + messages.error(request,'You have to register for the race first') + url = reverse('virtualevent_view',kwargs = {'id':race.id}) + return HttpResponseRedirect(url) + + recordid = records[0].id + + result, comments, errors, jobid = add_workout_indoorrace( + [w],race,r,recordid=recordid + ) + for c in comments: + messages.info(request,c) + for er in errors: + messages.error(request,er) + + if result: + otherrecords = IndoorVirtualRaceResult.objects.filter( + race = race + ).exclude(userid=r.id) + for otherrecord in otherrecords: + try: + otheruser = Rower.objects.get(id=otherrecord.userid) + othername = otheruser.user.first_name+' '+otheruser.user.last_name + registeredname = r.user.first_name+' '+r.user.last_name + if otherrecord.emailnotifications: + job = myqueue( + queue, + handle_sendemail_racesubmission, + otheruser.user.email, othername, + registeredname, + race.name, + race.id + ) + except Rower.DoesNotExist: + pass + + url = reverse('virtualevent_view',kwargs = {'id':race.id}) + return HttpResponseRedirect(url) + url = reverse( 'workout_edit_view', kwargs={'id':encoder.encode_hex(id)} @@ -673,6 +746,7 @@ def addmanual_view(request): else: return render(request,'manualadd.html', {'form':form, + 'iform':iform, 'metricsform':metricsform, 'breadcrumbs':breadcrumbs, 'active':'nav-workouts', @@ -688,10 +762,12 @@ def addmanual_view(request): } form = WorkoutForm(initial=initial) + iform = ImageForm() metricsform = MetricsForm() return render(request,'manualadd.html', {'form':form, + 'iform':iform, 'metricsform':metricsform, 'breadcrumbs':breadcrumbs, 'active':'nav-workouts',