Merge branch 'release/v12.19'
This commit is contained in:
@@ -48,6 +48,10 @@ $('#id_workouttype').change();
|
|||||||
{{ form.as_table }}
|
{{ form.as_table }}
|
||||||
{{ metricsform.as_table }}
|
{{ metricsform.as_table }}
|
||||||
</table>
|
</table>
|
||||||
|
Optional, add image (PM screenshot, for example as evidence for a virtual race):
|
||||||
|
<table>
|
||||||
|
{{ iform.as_table }}
|
||||||
|
</table>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<input class="button green" type="submit" value="Save">
|
<input class="button green" type="submit" value="Save">
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
<th>Contact Phone</th><td>{{ race.contact_phone }}</td>
|
<th>Contact Phone</th><td>{{ race.contact_phone }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Comment</th><td>{{ race.comment|linebreaks }}</td>
|
<th>Comment</th><td>{{ race.comment|linebreaks|urlshorten:"50" }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -187,7 +187,7 @@
|
|||||||
{% if race.sessiontype == 'indoorrace' %}
|
{% if race.sessiontype == 'indoorrace' %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="/rowers/workout/addmanual">Enter your race result manually</a>
|
<a href="/rowers/workout/addmanual/{{ race.id }}">Enter your race result manually</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
If you don't have a data file, enter the results
|
If you don't have a data file, enter the results
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ urlpatterns = [
|
|||||||
re_path(r'^list-workouts/$',views.workouts_view,name='workouts_view'),
|
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'^list-courses/$',views.courses_view,name='courses_view'),
|
||||||
re_path(r'^courses/upload/$',views.course_upload_view,name='course_upload_view'),
|
re_path(r'^courses/upload/$',views.course_upload_view,name='course_upload_view'),
|
||||||
|
re_path(r'^workout/addmanual/(?P<raceid>\d+)$',views.addmanual_view,name='addmanual_view'),
|
||||||
re_path(r'^workout/addmanual/$',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<id>\d+)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
re_path(r'^team-compare-select/workout/(?P<id>\d+)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||||
# re_path(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
# re_path(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||||
|
|||||||
@@ -465,6 +465,9 @@ def virtualevents_view(request):
|
|||||||
|
|
||||||
races = (races1 | races2).order_by("startdate","start_time")
|
races = (races1 | races2).order_by("startdate","start_time")
|
||||||
|
|
||||||
|
if len(races) == 0:
|
||||||
|
races = VirtualRace.objects.all()
|
||||||
|
|
||||||
if not request.user.is_anonymous:
|
if not request.user.is_anonymous:
|
||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -555,7 +555,7 @@ def workout_histo_view(request,id=0):
|
|||||||
|
|
||||||
# add a workout manually
|
# add a workout manually
|
||||||
@login_required()
|
@login_required()
|
||||||
def addmanual_view(request):
|
def addmanual_view(request,raceid=0):
|
||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
|
|
||||||
breadcrumbs = [
|
breadcrumbs = [
|
||||||
@@ -665,6 +665,79 @@ def addmanual_view(request):
|
|||||||
|
|
||||||
messages.info(request,'New workout created')
|
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(
|
url = reverse(
|
||||||
'workout_edit_view',
|
'workout_edit_view',
|
||||||
kwargs={'id':encoder.encode_hex(id)}
|
kwargs={'id':encoder.encode_hex(id)}
|
||||||
@@ -673,6 +746,7 @@ def addmanual_view(request):
|
|||||||
else:
|
else:
|
||||||
return render(request,'manualadd.html',
|
return render(request,'manualadd.html',
|
||||||
{'form':form,
|
{'form':form,
|
||||||
|
'iform':iform,
|
||||||
'metricsform':metricsform,
|
'metricsform':metricsform,
|
||||||
'breadcrumbs':breadcrumbs,
|
'breadcrumbs':breadcrumbs,
|
||||||
'active':'nav-workouts',
|
'active':'nav-workouts',
|
||||||
@@ -688,10 +762,12 @@ def addmanual_view(request):
|
|||||||
|
|
||||||
}
|
}
|
||||||
form = WorkoutForm(initial=initial)
|
form = WorkoutForm(initial=initial)
|
||||||
|
iform = ImageForm()
|
||||||
metricsform = MetricsForm()
|
metricsform = MetricsForm()
|
||||||
|
|
||||||
return render(request,'manualadd.html',
|
return render(request,'manualadd.html',
|
||||||
{'form':form,
|
{'form':form,
|
||||||
|
'iform':iform,
|
||||||
'metricsform':metricsform,
|
'metricsform':metricsform,
|
||||||
'breadcrumbs':breadcrumbs,
|
'breadcrumbs':breadcrumbs,
|
||||||
'active':'nav-workouts',
|
'active':'nav-workouts',
|
||||||
|
|||||||
Reference in New Issue
Block a user