Private
Public Access
1
0

adding more links to courses and selecting which users to see

This commit is contained in:
2024-10-31 16:03:48 +01:00
parent 11e5a851e1
commit f1cf8d47c0
5 changed files with 89 additions and 1 deletions

View File

@@ -43,6 +43,8 @@ class OpaqueEncoder:
def encode_hex(self, i):
"""Transcode an integer and return it as an 8-character hex string."""
if i is None:
return None
return "%08x" % self.transcode(i)
def encode_base64(self, i): # pragma: no cover
@@ -51,6 +53,8 @@ class OpaqueEncoder:
def decode_hex(self, s):
"""Decode an 8-character hex string, returning the original integer."""
if s is None:
return None
return self.transcode(int(str(s), 16))
def decode_base64(self, s): # pragma: no cover

View File

@@ -28,6 +28,22 @@
{{ mapscript|safe }}
</li>
{% if courses %}
<li class="grid_2">
{% for course in courses %}
Timed Course: <a href="/rowers/courses/{{ course.id }}" target="_"/>{{ course }}</a><br />
{% endfor %}
</li>
{% endif %}
{% if suggested_courses %}
<li class="grid_2">
{% for course in suggested_courses %}
Suggested Course: {{ course }}<br />
<a href="/rowers/courses/{{ course.id }}/workout/{{ workout.id|encode }}" target="_"/>See course</a><br />
<a href="/rowers/workout/{{ workout.id|encode }}/submit/{{ course.id }}" target="_"/>Measure time on course</a><br />
{% endfor %}
</li>
{% endif %}
</ul>

View File

@@ -19,6 +19,18 @@
<h1>Course Map Comparison</h1>
<p>
<form method="GET">
{% for competitor in competitors %}
{% if competitor in selected_users %}
<input type="checkbox" name="users" value="{{ competitor.id|encode }}" checked>{{ competitor }}<br>
{% else %}
<input type="checkbox" name="users" value="{{ competitor.id|encode }}">{{ competitor }}<br>
{% endif %}
{% endfor %}
<input type="submit" value="Submit">
</form>
</p>
<p>Click on a line to see the label. Double click on a line to remove it. Reload to get back all lines.</p>
<p>We show your original GPS coordinates on the course. For course time, we use a finer interpolation, to get
the exact time when you crossed the line.</p>

Binary file not shown.

View File

@@ -1337,12 +1337,49 @@ def course_mapcompare_view(request, id=0):
except GeoCourse.DoesNotExist: # pragma: no cover
raise Http404("Course does not exist")
focususer = encoder.decode_hex(request.GET.get('user',None))
if focususer:
try:
focususer = Rower.objects.get(id=focususer).id
except Rower.DoesNotExist:
focususer = None
focususers = request.GET.getlist('users',[])
focususers = [encoder.decode_hex(f) for f in focususers]
results = VirtualRaceResult.objects.filter(
course=course,
workoutid__isnull=False,
coursecompleted=True,
).order_by("distance", "duration")
competitor_ids = []
for result in results:
if result.userid not in competitor_ids:
competitor_ids.append(result.userid)
competitors = Rower.objects.filter(id__in=competitor_ids)
if focususer:
results2 = results.filter(userid=focususer)
else:
results2 = VirtualRaceResult.objects.none()
if focususers:
results3 = results.filter(userid__in=focususers)
else:
results3 = VirtualRaceResult.objects.none()
if results2 or results3:
results = results2 | results3
selected_ids = []
for result in results:
if result.userid not in selected_ids:
selected_ids.append(result.userid)
selected_users = Rower.objects.filter(id__in=selected_ids)
workoutids = [result.workoutid for result in results]
startenddict = {}
@@ -1407,7 +1444,9 @@ def course_mapcompare_view(request, id=0):
'results': results,
'active': 'nav-racing',
'teamid': 0,
'teams': []
'teams': [],
'competitors': competitors,
'selected_users': selected_users,
})
@@ -4660,6 +4699,21 @@ def workout_map_view(request, id=0):
if request.user == w.user.user:
mayedit = 1
records = VirtualRaceResult.objects.filter(
workoutid=w.id, userid=w.user.user.id, coursecompleted=True
)
courses = []
if records.count() > 0:
courses = list(set([record.course for record in records]))
has_latlon, lat_mean, lon_mean = dataprep.workout_has_latlon(w.id)
suggested_courses = getnearestcourses([lat_mean, lon_mean], GeoCourse.objects.all(), whatisnear=25,
strict=True)
suggested_courses = list(set(courses) ^ set(suggested_courses))
return render(request, 'map_view.html',
{'mapscript': mapscript,
'workout': w,
@@ -4668,6 +4722,8 @@ def workout_map_view(request, id=0):
'active': 'nav-workouts',
'mapdiv': mapdiv,
'mayedit': mayedit,
'courses': courses,
'suggested_courses': suggested_courses,
})