Merge branch 'release/v2.81'
This commit is contained in:
@@ -103,6 +103,22 @@ def interactive_boxchart(datadf,fieldname):
|
|||||||
plot.yaxis.axis_label = axlabels[fieldname]
|
plot.yaxis.axis_label = axlabels[fieldname]
|
||||||
|
|
||||||
|
|
||||||
|
# add watermark
|
||||||
|
plot.extra_y_ranges = {"watermark": watermarkrange}
|
||||||
|
plot.extra_x_ranges = {"watermark": watermarkrange}
|
||||||
|
|
||||||
|
plot.image_url([watermarkurl],watermarkx,watermarky,
|
||||||
|
watermarkw,watermarkh,
|
||||||
|
global_alpha=watermarkalpha,
|
||||||
|
w_units='screen',
|
||||||
|
h_units='screen',
|
||||||
|
anchor=watermarkanchor,
|
||||||
|
dilate=True,
|
||||||
|
x_range_name = "watermark",
|
||||||
|
y_range_name = "watermark",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
plot.xaxis.formatter = DatetimeTickFormatter(
|
plot.xaxis.formatter = DatetimeTickFormatter(
|
||||||
days=["%d %B %Y"],
|
days=["%d %B %Y"],
|
||||||
months=["%d %B %Y"],
|
months=["%d %B %Y"],
|
||||||
@@ -1024,6 +1040,23 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
datadf.dropna(axis=1,how='all',inplace=True)
|
datadf.dropna(axis=1,how='all',inplace=True)
|
||||||
datadf.dropna(axis=0,how='any',inplace=True)
|
datadf.dropna(axis=0,how='any',inplace=True)
|
||||||
|
|
||||||
|
# test if we have drive energy
|
||||||
|
nowork = 1
|
||||||
|
try:
|
||||||
|
test = datadf['driveenergy'].mean()
|
||||||
|
nowork = 0
|
||||||
|
except KeyError:
|
||||||
|
datadf['driveenergy'] = 500.
|
||||||
|
|
||||||
|
# test if we have power
|
||||||
|
nopower = 1
|
||||||
|
try:
|
||||||
|
test = datadf['power'].mean()
|
||||||
|
nopower = 0
|
||||||
|
except KeyError:
|
||||||
|
datadf['power'] = 50.
|
||||||
|
|
||||||
|
|
||||||
yparamname1 = axlabels[yparam1]
|
yparamname1 = axlabels[yparam1]
|
||||||
if yparam2 != 'None':
|
if yparam2 != 'None':
|
||||||
yparamname2 = axlabels[yparam2]
|
yparamname2 = axlabels[yparam2]
|
||||||
@@ -1336,8 +1369,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
'time','pace','workoutstate','time']
|
'time','pace','workoutstate','time']
|
||||||
|
|
||||||
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True,
|
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True,
|
||||||
workstrokesonly=workstrokesonly,
|
workstrokesonly=workstrokesonly)
|
||||||
convertnewtons=False)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tests = rowdata[yparam2]
|
tests = rowdata[yparam2]
|
||||||
@@ -1352,6 +1384,22 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
rowdata.dropna(axis=1,how='all',inplace=True)
|
rowdata.dropna(axis=1,how='all',inplace=True)
|
||||||
rowdata.dropna(axis=0,how='any',inplace=True)
|
rowdata.dropna(axis=0,how='any',inplace=True)
|
||||||
|
|
||||||
|
# test if we have drive energy
|
||||||
|
nowork = 1
|
||||||
|
try:
|
||||||
|
test = rowdata['driveenergy'].mean()
|
||||||
|
nowork = 0
|
||||||
|
except KeyError:
|
||||||
|
rowdata['driveenergy'] = 500.
|
||||||
|
|
||||||
|
# test if we have power
|
||||||
|
nopower = 1
|
||||||
|
try:
|
||||||
|
test = rowdata['power'].mean()
|
||||||
|
nopower = 0
|
||||||
|
except KeyError:
|
||||||
|
rowdata['power'] = 50.
|
||||||
|
|
||||||
row = Workout.objects.get(id=id)
|
row = Workout.objects.get(id=id)
|
||||||
if rowdata.empty:
|
if rowdata.empty:
|
||||||
return "","No valid data"
|
return "","No valid data"
|
||||||
@@ -1437,6 +1485,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
else:
|
else:
|
||||||
rowdata['yname2'] = axlabels[yparam1]
|
rowdata['yname2'] = axlabels[yparam1]
|
||||||
|
|
||||||
|
|
||||||
# prepare data
|
# prepare data
|
||||||
source = ColumnDataSource(
|
source = ColumnDataSource(
|
||||||
rowdata
|
rowdata
|
||||||
@@ -1611,6 +1660,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
|
|
||||||
hover.mode = 'mouse'
|
hover.mode = 'mouse'
|
||||||
|
|
||||||
|
|
||||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||||
x1means=x1means,
|
x1means=x1means,
|
||||||
y1means=y1means,
|
y1means=y1means,
|
||||||
@@ -1626,13 +1676,13 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
var y1 = data['y1']
|
var y1 = data['y1']
|
||||||
var y2 = data['y2']
|
var y2 = data['y2']
|
||||||
var spm1 = data['spm']
|
var spm1 = data['spm']
|
||||||
var driveenergy1 = data['driveenergy']
|
|
||||||
var time1 = data['time']
|
var time1 = data['time']
|
||||||
var pace1 = data['pace']
|
var pace1 = data['pace']
|
||||||
var hr1 = data['hr']
|
var hr1 = data['hr']
|
||||||
var fpace1 = data['fpace']
|
var fpace1 = data['fpace']
|
||||||
var distance1 = data['distance']
|
var distance1 = data['distance']
|
||||||
var power1 = data['power']
|
var power1 = data['power']
|
||||||
|
var driveenergy1 = data['driveenergy']
|
||||||
var xname = data['xname'][0]
|
var xname = data['xname'][0]
|
||||||
var yname1 = data['yname1'][0]
|
var yname1 = data['yname1'][0]
|
||||||
var yname2 = data['yname2'][0]
|
var yname2 = data['yname2'][0]
|
||||||
|
|||||||
@@ -24,7 +24,28 @@
|
|||||||
|
|
||||||
|
|
||||||
<div id="title" class="grid_12 alpha">
|
<div id="title" class="grid_12 alpha">
|
||||||
<h1>Stroke Analysis</h1>
|
<div class="grid_10 alpha">
|
||||||
|
{% if theuser %}
|
||||||
|
<h3>{{ theuser.first_name }}'s Stroke Analysis</h3>
|
||||||
|
{% else %}
|
||||||
|
<h3>{{ user.first_name }}'s Stroke Analysis</h3>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2 omega">
|
||||||
|
{% if user.is_authenticated and user|is_manager %}
|
||||||
|
<div class="grid_2 alpha dropdown">
|
||||||
|
<button class="grid_2 alpha button green small dropbtn">
|
||||||
|
Change Rower
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for member in user|team_members %}
|
||||||
|
<a class="button green small" href="/rowers/{{ member.id }}/flexall/{{ xparam }}/{{ yparam1 }}/{{ yparam2 }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}">{{ member.first_name }} {{ member.last_name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
|
|||||||
@@ -35,11 +35,28 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<h1>Workout Statistics</h1>
|
<div class="grid_4 alpha">
|
||||||
<p>
|
{% if theuser %}
|
||||||
This is an experimental page which just lists a bunch of statistics for
|
<h3>{{ theuser.first_name }}'s Workout Statistics</h3>
|
||||||
your workouts. This page is under rapid development.
|
{% else %}
|
||||||
</p>
|
<h3>{{ user.first_name }}'s Workout Statistics</h3>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2 suffix_6 omega">
|
||||||
|
{% if user.is_authenticated and user|is_manager %}
|
||||||
|
<div class="grid_2 alpha dropdown">
|
||||||
|
<button class="grid_2 alpha button green small dropbtn">
|
||||||
|
Change Rower
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for member in user|team_members %}
|
||||||
|
<a class="button green small" href="/rowers/{{ member.id }}/cumstats/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/p/{{ plotfield }}">{{ member.first_name }} {{ member.last_name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<div id="summary" class="grid_6 alpha">
|
<div id="summary" class="grid_6 alpha">
|
||||||
|
|||||||
@@ -35,7 +35,28 @@
|
|||||||
|
|
||||||
|
|
||||||
<div id="title" class="grid_12 alpha">
|
<div id="title" class="grid_12 alpha">
|
||||||
<h1>Indoor Rower Power Histogram</h1>
|
<div class="grid_10 alpha">
|
||||||
|
{% if theuser %}
|
||||||
|
<h3>{{ theuser.first_name }}'s Indoor Rower Power Histogram</h3>
|
||||||
|
{% else %}
|
||||||
|
<h3>{{ user.first_name }}'s Indoor Rower Power Histogram</h3>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2 omega">
|
||||||
|
{% if user.is_authenticated and user|is_manager %}
|
||||||
|
<div class="grid_2 alpha dropdown">
|
||||||
|
<button class="grid_2 alpha button green small dropbtn">
|
||||||
|
Change Rower
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for member in user|team_members %}
|
||||||
|
<a class="button green small" href="/rowers/{{ member.id }}/histo/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}">{{ member.first_name }} {{ member.last_name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="summary" class="grid_6 alpha">
|
<div id="summary" class="grid_6 alpha">
|
||||||
|
|||||||
@@ -33,11 +33,15 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if team %}
|
||||||
|
<div class="grid_12 alpha">
|
||||||
|
{% include "teambuttons.html" with teamid=team.id team=team %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="grid_12">
|
||||||
<div id="workouts_table" class="grid_8 alpha">
|
<div id="workouts_table" class="grid_8 alpha">
|
||||||
{% if team %}
|
{% if team %}
|
||||||
<div class="grid_8 alpha">
|
|
||||||
{% include "teambuttons.html" with teamid=team.id %}
|
|
||||||
</div>
|
|
||||||
<h3>{{ team.name }} Team Workouts</h3>
|
<h3>{{ team.name }} Team Workouts</h3>
|
||||||
{% else %}
|
{% else %}
|
||||||
<h3>My Workouts</h3>
|
<h3>My Workouts</h3>
|
||||||
@@ -114,6 +118,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="grid_4 omega">
|
<div class="grid_4 omega">
|
||||||
{% if team %}
|
{% if team %}
|
||||||
<div class="grid_4" id="teambuttons">
|
<div class="grid_4" id="teambuttons">
|
||||||
@@ -152,7 +157,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="grid_5 alpha">
|
<div class="grid_5 alpha">
|
||||||
|
|||||||
@@ -34,11 +34,12 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid_12 alpha">
|
||||||
|
{% include "teambuttons.html" with teamid=teamid team=team %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_12">
|
||||||
<div id="workouts" class="grid_8 alpha">
|
<div id="workouts" class="grid_8 alpha">
|
||||||
<h1>Interactive Comparison</h1>
|
<h1>Interactive Comparison</h1>
|
||||||
<div class="grid_8 alpha">
|
|
||||||
{% include "teambuttons.html" with teamid=teamid%}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_4 omega">
|
<div class="grid_4 omega">
|
||||||
<form enctype="multipart/form-data" action="/rowers/multi-compare" method="post">
|
<form enctype="multipart/form-data" action="/rowers/multi-compare" method="post">
|
||||||
@@ -53,6 +54,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,28 @@
|
|||||||
|
|
||||||
|
|
||||||
<div id="title" class="grid_12 alpha">
|
<div id="title" class="grid_12 alpha">
|
||||||
<h1>Ranking Pieces (Indoor Rower)</h1>
|
<div class="grid_10 alpha">
|
||||||
|
{% if theuser %}
|
||||||
|
<h3>{{ theuser.first_name }}'s Ranking Pieces</h3>
|
||||||
|
{% else %}
|
||||||
|
<h3>{{ user.first_name }}'s Ranking Pieces</h3>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2 omega">
|
||||||
|
{% if user.is_authenticated and user|is_manager %}
|
||||||
|
<div class="grid_2 alpha dropdown">
|
||||||
|
<button class="grid_2 alpha button green small dropbtn">
|
||||||
|
Change Rower
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for member in user|team_members %}
|
||||||
|
<a class="button green small" href="/rowers/{{ member.id }}/ote-bests/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}">{{ member.first_name }} {{ member.last_name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="summary" class="grid_6 alpha">
|
<div id="summary" class="grid_6 alpha">
|
||||||
|
|||||||
@@ -4,10 +4,12 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<h1>{{ team.name }}</h1>
|
|
||||||
<div class="grid_8 alpha">
|
|
||||||
{% include "teambuttons.html" with teamid=team.id %}
|
{% include "teambuttons.html" with teamid=team.id %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="grid_12">
|
||||||
|
<div class="grid_8 alpha">
|
||||||
|
<h1>{{ team.name }}</h1>
|
||||||
|
|
||||||
<div class="grid_4 omega">
|
<div class="grid_4 omega">
|
||||||
<p>{{ team.notes }}</p>
|
<p>{{ team.notes }}</p>
|
||||||
<p><b>Manager:</b> {{ team.manager.first_name }} {{ team.manager.last_name }}</p>
|
<p><b>Manager:</b> {{ team.manager.first_name }} {{ team.manager.last_name }}</p>
|
||||||
@@ -90,7 +92,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<div class="grid_8 suffix_4 alpha">
|
{% include "teambuttons.html" with teamid=team.id team=team %}
|
||||||
{% include "teambuttons.html" with teamid=team.id %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<h3>{{ team.name }} Team Workouts</h3>
|
<h3>{{ team.name }} Team Workouts</h3>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<a class="button gray small" href="/rowers/team/{{ teamid }}/">Team Page</a>
|
<a class="button gray small" href="/rowers/team/{{ teamid }}/">Team Page</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_2 omega">
|
<div class="grid_2">
|
||||||
{% if user|is_manager and user|has_teams %}
|
{% if user|is_manager and user|has_teams %}
|
||||||
<p>
|
<p>
|
||||||
<a class="button gray small" href="/rowers/workout/upload/team/">Upload Workout</a>
|
<a class="button gray small" href="/rowers/workout/upload/team/">Upload Workout</a>
|
||||||
@@ -23,3 +23,14 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="grid_2 omega">
|
||||||
|
{% if team and team.manager == user %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/team/{{ teamid }}/memberstats">
|
||||||
|
Team Stats
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Team {% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="grid_12 alpha">
|
||||||
|
{% include "teambuttons.html" with teamid=team.id team=team %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_12 alpha">
|
||||||
|
<h1>{{ team.name }} Stats</h1>
|
||||||
|
<p>
|
||||||
|
Links to the cumulative statistics pages for your team's members
|
||||||
|
</p>
|
||||||
|
<table width="70%" class="listtable shortpadded">
|
||||||
|
<tbody>
|
||||||
|
{% for u in theusers %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ u.first_name }} {{ u.last_name }}</td>
|
||||||
|
<td><a href="/rowers/{{ u.id }}/ote-bests">Ranking Pieces</a></td>
|
||||||
|
<td><a href="/rowers/flexall/u/{{ u.id }}">Stroke Analysis</a></td>
|
||||||
|
<td><a href="/rowers/histo/u/{{ u.id }}">Power Histogram</a></td>
|
||||||
|
<td><a href="/rowers/cumstats/u/{{ u.id }}">Stats</a></td>
|
||||||
|
<td><a href="/rowers/user-boxplot-select/user/{{ u.id }}/">Box Chart</a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -7,18 +7,35 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if team %}
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<div class="grid_8 suffix_4 alpha">
|
{% include "teambuttons.html" with teamid=team.id team=team %}
|
||||||
{% include "teambuttons.html" with teamid=team.id %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
|
<div class="grid_4 alpha">
|
||||||
{% if theuser %}
|
{% if theuser %}
|
||||||
<h3>{{ theuser.first_name }}'s Workouts</h3>
|
<h3>{{ theuser.first_name }}'s Workouts</h3>
|
||||||
{% else %}
|
{% else %}
|
||||||
<h3>{{ user.first_name }}'s Workouts</h3>
|
<h3>{{ user.first_name }}'s Workouts</h3>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="grid_2 prefix_6 omega">
|
||||||
|
{% if user.is_authenticated and user|is_manager %}
|
||||||
|
<div class="grid_2 alpha dropdown">
|
||||||
|
<button class="grid_2 alpha button green small dropbtn">
|
||||||
|
Change Rower
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for member in user|team_members %}
|
||||||
|
<a class="button green small" href="/rowers/user-boxplot-select/user/{{ member.id }}/">{{ member.first_name }} {{ member.last_name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="grid_12 alpha">
|
<div class="grid_12 alpha">
|
||||||
<div class="grid_4 alpha">
|
<div class="grid_4 alpha">
|
||||||
|
|
||||||
|
|||||||
@@ -125,3 +125,17 @@ def has_teams(user):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def team_members(user):
|
||||||
|
try:
|
||||||
|
therower = Rower.objects.get(user=user)
|
||||||
|
if therower.rowerplan != 'coach':
|
||||||
|
return []
|
||||||
|
teams = Team.objects.filter(manager=user)
|
||||||
|
members = Rower.objects.filter(team__in=teams)
|
||||||
|
return [rower.user for rower in members]
|
||||||
|
except TypeError:
|
||||||
|
return []
|
||||||
|
|
||||||
|
return []
|
||||||
|
|||||||
+1
-1
@@ -311,7 +311,7 @@ def workout_tp_upload(user,w):
|
|||||||
tcxfile = createtpworkoutdata(w)
|
tcxfile = createtpworkoutdata(w)
|
||||||
if tcxfile:
|
if tcxfile:
|
||||||
res,reason,status_code,headers = uploadactivity(
|
res,reason,status_code,headers = uploadactivity(
|
||||||
r.tptoken,tcxfile,
|
thetoken,tcxfile,
|
||||||
name=w.name
|
name=w.name
|
||||||
)
|
)
|
||||||
if res == 0:
|
if res == 0:
|
||||||
|
|||||||
+6
-2
@@ -124,7 +124,7 @@ urlpatterns = [
|
|||||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
url(r'^team-compare-select/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
||||||
url(r'^team-compare-select/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.team_comparison_select),
|
url(r'^team-compare-select/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.team_comparison_select),
|
||||||
url(r'^team-compare-select/$',views.team_comparison_select),
|
url(r'^team-compare-select/$',views.team_comparison_select),
|
||||||
url(r'^user-boxplot-select/team/(?P<userid>\d+)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.user_boxplot_select),
|
url(r'^user-boxplot-select/user/(?P<userid>\d+)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.user_boxplot_select),
|
||||||
url(r'^user-boxplot-select/user/(?P<userid>\d+)/$',views.user_boxplot_select),
|
url(r'^user-boxplot-select/user/(?P<userid>\d+)/$',views.user_boxplot_select),
|
||||||
url(r'^user-boxplot-select/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.user_boxplot_select),
|
url(r'^user-boxplot-select/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.user_boxplot_select),
|
||||||
url(r'^user-boxplot-select/$',views.user_boxplot_select),
|
url(r'^user-boxplot-select/$',views.user_boxplot_select),
|
||||||
@@ -135,16 +135,19 @@ urlpatterns = [
|
|||||||
url(r'^ote-bests/(?P<deltadays>\d+)$',views.rankings_view),
|
url(r'^ote-bests/(?P<deltadays>\d+)$',views.rankings_view),
|
||||||
url(r'^ote-bests/$',views.rankings_view),
|
url(r'^ote-bests/$',views.rankings_view),
|
||||||
url(r'^(?P<theuser>\d+)/ote-bests/$',views.rankings_view),
|
url(r'^(?P<theuser>\d+)/ote-bests/$',views.rankings_view),
|
||||||
|
url(r'^(?P<theuser>\d+)/flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.cum_flex),
|
||||||
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.cum_flex),
|
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.cum_flex),
|
||||||
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)$',views.cum_flex),
|
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)$',views.cum_flex),
|
||||||
url(r'^flexall/$',views.cum_flex),
|
url(r'^flexall/$',views.cum_flex),
|
||||||
|
|
||||||
|
url(r'^histo/u/(?P<theuser>\d+)$',views.histo),
|
||||||
|
url(r'^flexall/u/(?P<theuser>\d+)$',views.cum_flex),
|
||||||
url(r'^(?P<theuser>\d+)/histo/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.histo),
|
url(r'^(?P<theuser>\d+)/histo/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.histo),
|
||||||
url(r'^(?P<theuser>\d+)/histo/(?P<deltadays>\d+)$',views.histo),
|
url(r'^(?P<theuser>\d+)/histo/(?P<deltadays>\d+)$',views.histo),
|
||||||
url(r'^histo/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.histo),
|
url(r'^histo/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.histo),
|
||||||
url(r'^histo/(?P<deltadays>\d+)$',views.histo),
|
url(r'^histo/(?P<deltadays>\d+)$',views.histo),
|
||||||
url(r'^histo/$',views.histo),
|
url(r'^histo/$',views.histo),
|
||||||
|
url(r'^cumstats/u/(?P<theuser>\d+)$',views.cumstats),
|
||||||
url(r'^cumstats/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)/p/(?P<plotfield>\w+.*)$',views.cumstats),
|
url(r'^cumstats/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)/p/(?P<plotfield>\w+.*)$',views.cumstats),
|
||||||
url(r'^(?P<theuser>\d+)/cumstats/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)/p/(?P<plotfield>\w+.*)$',views.cumstats),
|
url(r'^(?P<theuser>\d+)/cumstats/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)/p/(?P<plotfield>\w+.*)$',views.cumstats),
|
||||||
url(r'^(?P<theuser>\d+)/cumstats/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.cumstats),
|
url(r'^(?P<theuser>\d+)/cumstats/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.cumstats),
|
||||||
@@ -227,6 +230,7 @@ urlpatterns = [
|
|||||||
url(r'^user-boxplot$',views.boxplot_view),
|
url(r'^user-boxplot$',views.boxplot_view),
|
||||||
url(r'^me/teams/$',views.rower_teams_view),
|
url(r'^me/teams/$',views.rower_teams_view),
|
||||||
url(r'^team/(?P<id>\d+)/$',views.team_view),
|
url(r'^team/(?P<id>\d+)/$',views.team_view),
|
||||||
|
url(r'^team/(?P<id>\d+)/memberstats$',views.team_members_stats_view),
|
||||||
url(r'^team/(?P<id>\d+)/edit$',views.team_edit_view),
|
url(r'^team/(?P<id>\d+)/edit$',views.team_edit_view),
|
||||||
url(r'^team/(?P<id>\d+)/leaveconfirm/$',views.team_leaveconfirm_view),
|
url(r'^team/(?P<id>\d+)/leaveconfirm/$',views.team_leaveconfirm_view),
|
||||||
url(r'^team/(?P<id>\d+)/leave/$',views.team_leave_view),
|
url(r'^team/(?P<id>\d+)/leave/$',views.team_leave_view),
|
||||||
|
|||||||
+27
-2
@@ -2004,8 +2004,8 @@ def cum_flex(request,theuser=0,
|
|||||||
if result:
|
if result:
|
||||||
promember=1
|
promember=1
|
||||||
|
|
||||||
if not promember:
|
#if not promember:
|
||||||
return HttpResponseRedirect("/rowers/about/")
|
#return HttpResponseRedirect("/rowers/about/")
|
||||||
|
|
||||||
# get all indoor rows of in date range
|
# get all indoor rows of in date range
|
||||||
|
|
||||||
@@ -7706,3 +7706,28 @@ def team_delete_view(request,id):
|
|||||||
url = reverse(rower_teams_view)
|
url = reverse(rower_teams_view)
|
||||||
response = HttpResponseRedirect(url)
|
response = HttpResponseRedirect(url)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
|
||||||
|
def team_members_stats_view(request,id):
|
||||||
|
r = Rower.objects.get(user=request.user)
|
||||||
|
try:
|
||||||
|
t = Team.objects.get(id=id)
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
raise Http404("This team doesn't exist")
|
||||||
|
if t.manager != request.user:
|
||||||
|
raise PermissionDenied("You are not allowed to see this page")
|
||||||
|
|
||||||
|
members = Rower.objects.filter(team=t).order_by("user__last_name","user__first_name")
|
||||||
|
|
||||||
|
theusers = [member.user for member in members]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
response = render(request,'teamstats.html',
|
||||||
|
{
|
||||||
|
'teams':get_my_teams(request.user),
|
||||||
|
'team':t,
|
||||||
|
'theusers':theusers,
|
||||||
|
})
|
||||||
|
|
||||||
|
return response
|
||||||
|
|||||||
Reference in New Issue
Block a user