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' %} +
    + Marked Course +
    + {% elif challenge.challenge.sessiontype == 'fastest_distance' %} +
    + Marked Course +
    + {% elif challenge.challenge.sessiontype != 'race' %} +
    + Marked Course +
    + + {% 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