From c4f965070e50c0ae7372948aa07f3018311946ca Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Fri, 5 Apr 2024 12:23:10 +0200
Subject: [PATCH] new courses landing page
---
rowers/interactiveplots.py | 9 +-
rowers/templates/courses_challenges.html | 105 +++++++++++++++++++++++
rowers/urls.py | 2 +
rowers/views/racesviews.py | 80 ++++++++++++++++-
templates/newbase.html | 4 +-
5 files changed, 193 insertions(+), 7 deletions(-)
create mode 100644 rowers/templates/courses_challenges.html
diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py
index 4c03a9bb..1c64244c 100644
--- a/rowers/interactiveplots.py
+++ b/rowers/interactiveplots.py
@@ -2263,7 +2263,7 @@ def course_map(course):
- var mymap = L.map('map_canvas', {{
+ var mymap = L.map('map_canvas_{id}', {{
center: [{latmean}, {lonmean}],
zoom: 13,
layers: [outdoors]
@@ -2306,6 +2306,7 @@ def course_map(course):
""".format(
+ id=course.id,
latmean=latmean,
lonmean=lonmean,
scoordinates=scoordinates,
@@ -2314,8 +2315,10 @@ def course_map(course):
)
div = """
-
- """
+
+ """.format(
+ id=course.id,
+ )
return script, div
diff --git a/rowers/templates/courses_challenges.html b/rowers/templates/courses_challenges.html
new file mode 100644
index 00000000..7c83ed87
--- /dev/null
+++ b/rowers/templates/courses_challenges.html
@@ -0,0 +1,105 @@
+{% extends "newbase.html" %}
+{% load static %}
+{% load rowerfilters %}
+{% load leaflet_tags %}
+
+{% block meta %}
+{% leaflet_js %}
+{% leaflet_css %}
+{% endblock %}
+
+{% block title %}Rowsandall Virtual Challenges{% endblock %}
+
+{% block scripts %}
+
+
+{% endblock %}
+
+{% block main %}
+
+
+ -
+
Courses you might like
+
+ -
+
+ All Courses
+
+ Courses I like
+
+
+{% for course in coursesdicts %}
+
+
+ {{ course.course.name }}
+
+ {{ course.course.country }}
+ {{ course.course.distance }}m
+
+ {{ course.div|safe}}
+ {{ course.script|safe}}
+
+
+{% endfor %}
+
+ Interesting Challenges
+
+
+
+ Challenges page
+
+ Nearby Challenges
+
+
+{% for challenge in challengesdicts %}
+
+
+ {{ challenge.challenge.name }}
+
+ {{ challenge.challenge.startdate|date:"Y-m-d" }}
+ {{ challenge.challenge.start_time|time:"H:i e" }}
+ to
+ {{ challenge.challenge.enddate|date:"Y-m-d" }}
+ {{ challenge.challenge.end_time|time:"H:i e" }}
+ ({{ challenge.challenge.timezone }})
+ {% if challenge.challenge.sessiontype == 'fastest_time' %}
+ Time Challenge: To be rowed on the water
+ {% elif challenge.challenge.sessiontype == 'fastest_distance' %}
+ Distance Challenge: To be rowed on the water
+ {% elif challenge.challenge.sessiontype != 'race' %}
+ Indoor Race: To be rowed on a Concept2 ergometer
+ {% endif %}
+
+ {% if challenge.challenge.sessiontype == 'fastest_time' %}
+
+

+
+ {% elif challenge.challenge.sessiontype == 'fastest_distance' %}
+
+

+
+ {% elif challenge.challenge.sessiontype != 'race' %}
+
+

+
+
+ {% endif %}
+
+ {{ challenge.div|safe}}
+ {{ challenge.script|safe}}
+
+
+{% endfor %}
+
+
+
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_racing.html' %}
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index a2c62399..c5d829b8 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -309,6 +309,8 @@ urlpatterns = [
name='workouts_view'),
re_path(r'^list-workouts/user/(?P\d+)/$', views.workouts_view,
name='workouts_view'),
+ re_path(r'^courses/$', views.courses_challenges_view,
+ name='courses_challenges_view'),
re_path(r'^virtualevents/$', views.virtualevents_view,
name='virtualevents_view'),
re_path(r'^virtualevent/createchoice/$', TemplateView.as_view(
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index a545d016..86294801 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -8,10 +8,86 @@ from django import forms
from rowers.plannedsessions import timefield_to_seconds_duration
from rowers.courses import getnearestraces, getnearestcourses,coursetokml, coursestokml
+from random import sample
+
+# landing page for challenges & courses
+def courses_challenges_view(request):
+ r = getrower(request.user)
+ g = GeoIP2()
+
+ ip = request.META.get('HTTP_X_REAL_IP', '1.1.1.1')
+ try:
+ lat_lon = g.lat_lon(ip)
+ city = g.city(ip)
+ except: # pragma: no cover
+ lat_lon = None
+ city = {
+ 'city': '',
+ 'country_name': '',
+ 'time_zone': '',
+ }
+
+ courses = GeoCourse.objects.all().order_by("country", "name", "distance")
+ nearby_courses = getnearestcourses(lat_lon, courses, whatisnear=2000)
+ liked_courses = GeoCourse.objects.filter(followers=r)
+ courses = GeoCourse.objects.filter(id__in=[course.id for course in nearby_courses]) | liked_courses
+
+ courses = sample(list(courses),3)
+
+ coursesdicts = []
+ for course in courses:
+ script, div = course_map(course)
+ coursesdicts.append({
+ 'course': course,
+ 'script': script,
+ 'div': div,
+ })
+
+ challenges = VirtualRace.objects.filter(startdate__gte=timezone.now())
+ challenges2 = VirtualRace.objects.filter(startdate__lte=timezone.now(),
+ evaluation_closure__gte=timezone.now()-datetime.timedelta(days=3))
+
+ challenges = challenges | challenges2
+ while len(challenges) < 3:
+ allchallenges = VirtualRace.objects.all().order_by("-startdate")
+ challenges = list(challenges)+sample(list(allchallenges), 3-len(challenges))
+ challenges = list(set(challenges))
+
+ challenges = sample(list(challenges),3)
+
+ challengesdicts = []
+ for challenge in challenges:
+ script = ''
+ div = ''
+ if challenge.course:
+ script, div = course_map(challenge.course)
+
+ challengesdicts.append(
+ {
+ 'script': script,
+ 'div': div,
+ 'challenge': challenge,
+ }
+ )
+
+ breadcrumbs = [
+ {
+ 'url': reverse('courses_challenges_view'),
+ 'name': 'Courses and Challenges'
+ }
+ ]
+
+
+ return render(request, "courses_challenges.html",
+ {
+ 'coursesdicts': coursesdicts,
+ 'rower': r,
+ 'challengesdicts': challengesdicts,
+ 'breadcrumbs': breadcrumbs,
+ })
+
# List Courses
-
-
def courses_view(request):
r = getrower(request.user)
g = GeoIP2()
diff --git a/templates/newbase.html b/templates/newbase.html
index 54db92b3..baa53d37 100644
--- a/templates/newbase.html
+++ b/templates/newbase.html
@@ -206,8 +206,8 @@
-
- Challenges
+
+ Challenges, Courses