Merge branch 'develop' into feature/charts-microservice
This commit is contained in:
@@ -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 = []
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user