Private
Public Access
1
0

Merge branch 'develop' into feature/charts-microservice

This commit is contained in:
2024-04-05 13:17:16 +02:00
11 changed files with 416 additions and 14 deletions

View File

@@ -410,12 +410,15 @@ def trendflexdata(workouts, options, userid=0):
except (ValueError, AttributeError): # pragma: no cover
return ('', 'Error: not enough data')
else: # pragma: no cover
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
groups = datadf.groupby(pd.cut(datadf['days ago'], bins,
labels=False))
try:
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
groups = datadf.groupby(pd.cut(datadf['days ago'], bins,
labels=False))
except (ValueError, AttributeError): # pragma: no cover
return ('', 'Error: not enough data')
xvalues = []
yvalues = []

View File

@@ -2332,7 +2332,6 @@ def plannedsession_view(request, id=0, userid=0):
if ps.sessiontype == 'coursetest': # pragma: no cover
vs = CourseTestResult.objects.filter(plannedsession=ps,
workoutid=w.id)
if vs:
for record in vs:
if record.workoutid == w.id:

View File

@@ -8,10 +8,99 @@ 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
if courses.count() >= 3:
courses = sample(list(courses),3)
else:
courses = GeoCourse.objects.all().order_by("country", "name", "distance")
coursesdicts = []
for course in courses:
script, div = course_map(course)
coursesdicts.append({
'course': course,
'script': script,
'div': div,
})
allchallenges = VirtualRace.objects.all().order_by("-startdate")
totalnrchallenges = allchallenges.count()
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
count = 3
if totalnrchallenges > count:
allchallenges = list(allchallenges)
while len(challenges) < count:
try:
challenges = list(challenges)+sample(allchallenges, count-len(challenges))
except ValueError:
count = count-1
challenges = list(set(challenges))
else:
challenges = VirtualRace.objects.all()
count = challenges.count()
challenges = sample(list(challenges),count)
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()
@@ -280,6 +369,13 @@ def course_view(request, id=0):
workoutid__isnull=False,
coursecompleted=True).order_by("duration", "-distance")
# get own training results
ownrecords = CourseTestResult.objects.filter(
courseid = course.id,
userid = r.id,
coursecompleted=True
).order_by("duration", "-distance")
if request.user.is_authenticated:
notsharing = Rower.objects.filter(
share_course_results=False).exclude(id=r.id)
@@ -371,6 +467,7 @@ def course_view(request, id=0):
'mapdiv': div,
'nosessions': False,
'records': records,
'ownrecords': ownrecords,
'rower': r,
'form': form,
'onlyme': onlyme,