Private
Public Access
1
0

fusion done

This commit is contained in:
Sander Roosendaal
2018-10-09 11:26:15 +02:00
parent ffa523851e
commit aae0bb5cdb
3 changed files with 263 additions and 196 deletions

View File

@@ -1,22 +1,34 @@
{% extends "base.html" %}
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Workouts{% endblock %}
{% block content %}
{% block main %}
<div class="grid_12 alpha">
<h3>Fusion Editor</h3>
</div>
<div class="grid_12 alpha">
<div class="grid_6 alpha">
<h1>Fusion Editor</h1>
<ul class="main-content">
<li class="grid_2">
<form enctype="multipart/form-data" action="" method="post">
<p>
<table>
{{ form.as_table }}
</table>
</p>
<p>
{% csrf_token %}
<input name='fusion' class="button green" type="submit" value="Submit">
</p>
</form>
</li>
<li class="grid_2">
<p>
Adding sensor data from workout {{ workout2.id }} into workout {{ workout1.id }}.
This will create a new workout. After you submit the form, you will be
taken to the newly created workout. If you are happy with the result, you
can delete the two original workouts manually.
Adding sensor data from workout {{ workout2.id }} into workout {{ workout1.id }}.
This will create a new workout. After you submit the form, you will be
taken to the newly created workout. If you are happy with the result, you
can delete the two original workouts manually.
</p>
<p>
Workout 1: {{ workout1.name }}
@@ -24,21 +36,13 @@
<p>
Workout 2: {{ workout2.name }}
</p>
<p>On the right hand side, please select the columns from workout 2 that
<p>Please select the columns from workout 2 that
you want to replace the equivalent columns in workout 1. </p>
</div>
<div class="grid_4">
<form enctype="multipart/form-data" action="" method="post">
<table>
{{ form.as_table }}
</table>
{% csrf_token %}
</div>
<div class="grid_2 omega">
<input name='fusion' class="button green" type="submit" value="Submit"> </form>
</div>
</div>
</li>
</ul>
{% endblock %}
{% block sidebar %}
{% include 'menu_workout.html' %}
{% endblock %}

View File

@@ -1,36 +1,34 @@
{% extends "base.html" %}
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Workouts{% endblock %}
{% block content %}
<div id="workouts" class="grid_4 alpha">
<div class="grid_4 alpha">
<h1>Workout {{ id }}</h1>
<table width=100%>
<tr>
{% block main %}
<h1>Workout {{ id }} Sensor Fusion</h1>
<ul class="main-content">
<li>
<table width=100%>
<tr>
<th>Rower:</th><td>{{ first_name }} {{ last_name }}</td>
</tr><tr>
<tr>
</tr><tr>
<tr>
<th>Name:</th><td>{{ workout.name }}</td>
</tr><tr>
<tr>
</tr><tr>
<tr>
<th>Date:</th><td>{{ workout.date }}</td>
</tr><tr>
</tr><tr>
<th>Time:</th><td>{{ workout.starttime }}</td>
</tr><tr>
</tr><tr>
<th>Distance:</th><td>{{ workout.distance }}m</td>
</tr><tr>
</tr><tr>
<th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td>
</tr><tr>
</tr><tr>
<th>Type:</th><td>{{ workout.workouttype }}</td>
</tr><tr>
</tr><tr>
<th>Weight Category:</th><td>{{ workout.weightcategory }}</td>
</tr>
</table>
</div>
<div class="grid_4 alpha">
</tr>
</table>
<p>
<form id="searchform" action=""
method="get" accept-charset="utf-8">
@@ -40,82 +38,108 @@
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
</form>
</p>
</div>
Select start and end date for a date range:
<div class="grid_4 alpha">
<p>
<form enctype="multipart/form-data" action="/rowers/workout/fusion/{{ id }}/" method="post">
<table>
{{ dateform.as_table }}
</table>
{% csrf_token %}
</div>
<div class="grid_2 suffix_2 omega">
<p>
Select start and end date for a date range:
</p>
<p>
<form enctype="multipart/form-data" action="/rowers/workout/fusion/{{ id }}/" method="post">
<table>
{{ dateform.as_table }}
</table>
{% csrf_token %}
</p>
<input name='daterange' class="button green" type="submit" value="Submit"> </form>
</p>
</div>
</li>
<li class="grid_3">
<h1>Fuse this workout with data from:</h1>
{% if workouts %}
<p>
<span>
{% if workouts.has_previous %}
{% if request.GET.q %}
<a class="wh" href="?page=1&q={{ request.GET.q }}">
<i class="fas fa-arrow-alt-to-left"></i>
</a>
<a class="wh" href="?page={{ workouts.previous_page_number }}&q={{ request.GET.q }}">
<i class="fas fa-arrow-alt-left"></i>
</a>
{% else %}
<a class="wh" href="?page=1">
<i class="fas fa-arrow-alt-to-left"></i>
</a>
<a class="wh" href="?page={{ workouts.previous_page_number }}">
<i class="fas fa-arrow-alt-left"></i>
</a>
{% endif %}
{% endif %}
<span>
Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
</span>
{% if workouts.has_next %}
{% if request.GET.q %}
<a class="wh" href="?page={{ workouts.next_page_number }}&q={{ request.GET.q }}">
<i class="fas fa-arrow-alt-right"></i>
</a>
<a class="wh" href="?page={{ workouts.paginator.num_pages }}&q={{ request.GET.q }}">
<i class="fas fa-arrow-alt-to-right">
</a>
{% else %}
<a class="wh" href="?page={{ workouts.next_page_number }}">
<i class="fas fa-arrow-alt-right"></i>
</a>
<a class="wh" href="?page={{ workouts.paginator.num_pages }}">
<i class="fas fa-arrow-alt-to-right"></i>
</a>
{% endif %}
{% endif %}
</span>
</p>
</div>
<div id="fusion" class="grid_8 omega">
<h1>Fuse this workout with data from:</h1>
{% if workouts %}
<table width="100%" class="listtable">
<thead>
<tr>
<th> Date</th>
<th> Time</th>
<th> Name</th>
<th> Type</th>
<th> Distance </th>
<th> Duration </th>
<th> Avg HR </th>
<th> Max HR </th>
<th> Fusion</th>
</tr>
</thead>
</tbody>
{% for cworkout in workouts %}
<tr>
<td> {{ cworkout.date }} </td>
<td> {{ cworkout.starttime }} </td>
<td> <a href="/rowers/workout/{{ workout.id }}/edit">{{ cworkout.name }}</a> </td>
<td> {{ cworkout.workouttype }} </td>
<td> {{ cworkout.distance }}m</td>
<td> {{ cworkout.duration |durationprint:"%H:%M:%S.%f" }} </td>
<td> {{ cworkout.averagehr }} </td>
<td> {{ cworkout.maxhr }} </td>
{% if id == cworkout.id %}
<td>&nbsp;</td>
{% else %}
<td> <a class="button blue small" href="/rowers/workout/fusion/{{ id }}/{{ cworkout.id }}">Fusion</a> </td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p> No workouts found </p>
{% endif %}
<div class="grid_2 prefix_5 suffix_1 omega">
<span class="button gray small">
{% if workouts.has_previous %}
<a class="wh" href="/rowers/workout/fusion/{{ id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}?page={{ workouts.previous_page_number }}">&lt;</a>
<table width="100%" class="listtable">
<thead>
<tr>
<th> Date</th>
<th> Time</th>
<th> Name</th>
<th> Type</th>
<th> Distance </th>
<th> Duration </th>
<th> Avg HR </th>
<th> Max HR </th>
<th> Fusion</th>
</tr>
</thead>
<tbody>
{% for cworkout in workouts %}
<tr>
<td> {{ cworkout.date }} </td>
<td> {{ cworkout.starttime }} </td>
<td> <a href="/rowers/workout/{{ workout.id }}/edit">{{ cworkout.name }}</a> </td>
<td> {{ cworkout.workouttype }} </td>
<td> {{ cworkout.distance }}m</td>
<td> {{ cworkout.duration |durationprint:"%H:%M:%S.%f" }} </td>
<td> {{ cworkout.averagehr }} </td>
<td> {{ cworkout.maxhr }} </td>
{% if id == cworkout.id %}
<td>&nbsp;</td>
{% else %}
<td> <a class="button blue small" href="/rowers/workout/fusion/{{ id }}/{{ cworkout.id }}">Fusion</a> </td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p> No workouts found </p>
{% endif %}
<span>
Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
</span>
{% if workouts.has_next %}
<a class="wh" href="/rowers/workout/fusion/{{ id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}?page={{ workouts.next_page_number }}">&gt;</a>
{% endif %}
</span>
</div>
</div>
</li>
</ul>
{% endblock %}
{% block sidebar %}
{% include 'menu_workout.html' %}
{% endblock %}

View File

@@ -6528,73 +6528,93 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
try:
r = getrower(request.user)
u = User.objects.get(id=r.user.id)
if request.method == 'POST':
dateform = DateRangeForm(request.POST)
if dateform.is_valid():
startdate = dateform.cleaned_data['startdate']
enddate = dateform.cleaned_data['enddate']
else:
dateform = DateRangeForm(initial={
'startdate':startdate,
'enddate':enddate,
})
if startdatestring:
startdate = iso8601.parse_date(startdatestring)
if enddatestring:
enddate = iso8601.parse_date(enddatestring)
startdate = datetime.datetime.combine(startdate,datetime.time())
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
#enddate = enddate+datetime.timedelta(days=1)
if enddate < startdate:
s = enddate
enddate = startdate
startdate = s
workouts = Workout.objects.filter(user=r,
startdatetime__gte=startdate,
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id)
query = request.GET.get('q')
if query:
query_list = query.split()
workouts = workouts.filter(
reduce(operator.and_,
(Q(name__icontains=q) for q in query_list)) |
reduce(operator.and_,
(Q(notes__icontains=q) for q in query_list))
)
paginator = Paginator(workouts,15) # show 25 workouts per page
page = request.GET.get('page')
try:
workouts = paginator.page(page)
except PageNotAnInteger:
workouts = paginator.page(1)
except EmptyPage:
workouts = paginator.page(paginator.num_pages)
row = get_workout(id)
messages.info(request,successmessage)
messages.error(request,message)
return render(request, 'fusion_list.html',
{'id':int(id),
'workout':row,
'workouts': workouts,
'last_name':u.last_name,
'first_name':u.first_name,
'dateform':dateform,
'startdate':startdate,
'enddate':enddate,
'teams':get_my_teams(request.user),
})
except Rower.DoesNotExist:
raise Http404("User has no rower instance")
u = User.objects.get(id=r.user.id)
if request.method == 'POST':
dateform = DateRangeForm(request.POST)
if dateform.is_valid():
startdate = dateform.cleaned_data['startdate']
enddate = dateform.cleaned_data['enddate']
else:
dateform = DateRangeForm(initial={
'startdate':startdate,
'enddate':enddate,
})
if startdatestring:
startdate = iso8601.parse_date(startdatestring)
if enddatestring:
enddate = iso8601.parse_date(enddatestring)
startdate = datetime.datetime.combine(startdate,datetime.time())
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
#enddate = enddate+datetime.timedelta(days=1)
if enddate < startdate:
s = enddate
enddate = startdate
startdate = s
workouts = Workout.objects.filter(user=r,
startdatetime__gte=startdate,
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id)
query = request.GET.get('q')
if query:
query_list = query.split()
workouts = workouts.filter(
reduce(operator.and_,
(Q(name__icontains=q) for q in query_list)) |
reduce(operator.and_,
(Q(notes__icontains=q) for q in query_list))
)
paginator = Paginator(workouts,15) # show 25 workouts per page
page = request.GET.get('page')
try:
workouts = paginator.page(page)
except PageNotAnInteger:
workouts = paginator.page(1)
except EmptyPage:
workouts = paginator.page(paginator.num_pages)
row = get_workout(id)
messages.info(request,successmessage)
messages.error(request,message)
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'name':'Workouts'
},
{
'url':get_workout_default_page(request,row.id),
'name': str(row.id)
},
{
'url':reverse(workout_fusion_list,kwargs={'id':id}),
'name': 'Sensor Fusion'
}
]
return render(request, 'fusion_list.html',
{'id':int(id),
'workout':row,
'rower':r,
'active':'nav-workouts',
'breadcrumbs':breadcrumbs,
'workouts': workouts,
'last_name':u.last_name,
'first_name':u.first_name,
'dateform':dateform,
'startdate':startdate,
'enddate':enddate,
'teams':get_my_teams(request.user),
})
# Basic view of workout
def workout_view(request,id=0):
@@ -11021,6 +11041,9 @@ def workout_split_view(request,id=id):
# Fuse two workouts
@user_passes_test(ispromember,login_url="/",redirect_field_name=None)
def workout_fusion_view(request,id1=0,id2=1):
r = getrower(request.user)
try:
w1 = Workout.objects.get(id=id1)
w2 = Workout.objects.get(id=id2)
@@ -11061,20 +11084,36 @@ def workout_fusion_view(request,id1=0,id2=1):
})
return HttpResponseRedirect(url)
else:
return render(request, 'fusion.html',
{'form':form,
'teams':get_my_teams(request.user),
'workout1':w1,
'workout2':w2,
})
form = FusionMetricChoiceForm(instance=w2)
else:
form = FusionMetricChoiceForm(instance=w2)
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'name':'Workouts'
},
{
'url':get_workout_default_page(request,w1.id),
'name': str(w1.id)
},
{
'url':reverse(workout_fusion_list,kwargs={'id':id1}),
'name': 'Sensor Fusion'
},
{
'url':reverse(workout_fusion_view,kwargs={'id1':id1,'id2':id2}),
'name': 'Sensor Fusion'
}
]
return render(request, 'fusion.html',
{'form':form,
'teams':get_my_teams(request.user),
'workout':w1,
'rower':r,
'breadcrumbs':breadcrumbs,
'active':'nav-workouts',
'workout1':w1,
'workout2':w2,
})