Merge tag 'v5.98' into develop
releasing plan v1.0
This commit is contained in:
@@ -263,6 +263,12 @@ def clean_df_stats(datadf, workstrokesonly=True, ignorehr=True,
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# protect 0 spm values from being nulled
|
||||||
|
try:
|
||||||
|
datadf['spm'] = datadf['spm'] + 1.0
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
datadf = datadf.clip(lower=0)
|
datadf = datadf.clip(lower=0)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
@@ -270,6 +276,11 @@ def clean_df_stats(datadf, workstrokesonly=True, ignorehr=True,
|
|||||||
|
|
||||||
datadf.replace(to_replace=0, value=np.nan, inplace=True)
|
datadf.replace(to_replace=0, value=np.nan, inplace=True)
|
||||||
|
|
||||||
|
# bring spm back to real values
|
||||||
|
try:
|
||||||
|
datadf['spm'] = datadf['spm'] - 1
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
|
||||||
# return from positive domain to negative
|
# return from positive domain to negative
|
||||||
try:
|
try:
|
||||||
@@ -295,6 +306,12 @@ def clean_df_stats(datadf, workstrokesonly=True, ignorehr=True,
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
mask = datadf['spm'] < 0
|
||||||
|
datadf.loc[mask,'spm'] = np.nan
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mask = datadf['efficiency'] > 200.
|
mask = datadf['efficiency'] > 200.
|
||||||
datadf.loc[mask, 'efficiency'] = np.nan
|
datadf.loc[mask, 'efficiency'] = np.nan
|
||||||
@@ -1614,6 +1631,7 @@ def getsmallrowdata_db(columns, ids=[], doclean=True, workstrokesonly=True):
|
|||||||
if doclean:
|
if doclean:
|
||||||
data = clean_df_stats(data, ignorehr=True,
|
data = clean_df_stats(data, ignorehr=True,
|
||||||
workstrokesonly=workstrokesonly)
|
workstrokesonly=workstrokesonly)
|
||||||
|
data.dropna(inplace=True,axis=0)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -2639,18 +2639,18 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True,
|
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True,
|
||||||
workstrokesonly=False)
|
workstrokesonly=False)
|
||||||
workstrokesonly=False
|
workstrokesonly=False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tests = rowdata[yparam2]
|
tests = rowdata[yparam2]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
yparam2 = 'None'
|
yparam2 = 'None'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tests = rowdata[yparam1]
|
tests = rowdata[yparam1]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
yparam1 = 'None'
|
yparam1 = 'None'
|
||||||
|
|
||||||
rowdata.dropna(axis=1,how='all',inplace=True)
|
|
||||||
|
|
||||||
# test if we have drive energy
|
# test if we have drive energy
|
||||||
nowork = 1
|
nowork = 1
|
||||||
@@ -2671,7 +2671,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
|
|
||||||
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",'','',workstrokesonly
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
rowdata.sort_values(by='time',ascending=True,inplace=True)
|
rowdata.sort_values(by='time',ascending=True,inplace=True)
|
||||||
@@ -2691,7 +2691,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
try:
|
try:
|
||||||
tseconds = rowdata.ix[:,'time']
|
tseconds = rowdata.ix[:,'time']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return '','No time data - cannot make flex plot','',''
|
return '','No time data - cannot make flex plot','','',workstrokesonly
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -3099,7 +3099,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
distmax = 100+100*int(rowdata['distance'].max()/100.)
|
distmax = 100+100*int(rowdata['distance'].max()/100.)
|
||||||
except KeyError:
|
except (KeyError,ValueError):
|
||||||
distmax = 100
|
distmax = 100
|
||||||
|
|
||||||
slider_dist_min = Slider(start=0,end=distmax,value=0,step=1,
|
slider_dist_min = Slider(start=0,end=distmax,value=0,step=1,
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Rowsandall - About us{% endblock title %}
|
{% block title %}Rowsandall - About us{% endblock title %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% load rowerfilters %}
|
||||||
|
|
||||||
<div class="grid_6 alpha">
|
<div class="grid_4 alpha">
|
||||||
<h2>Welcome to Rowsandall.com</h2>
|
<h2>Welcome to Rowsandall.com</h2>
|
||||||
<p>Rowsandall.com is an online tool for indoor and On The Water (OTW) rowers.
|
<p>Rowsandall.com is an online tool for indoor and On The Water (OTW) rowers.
|
||||||
It accepts workout data from a number of devices and applications. It
|
It accepts workout data from a number of devices and applications. It
|
||||||
@@ -81,110 +82,111 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="grid_6 omega">
|
<div class="grid_4">
|
||||||
<div class="grid_6">
|
<div class="grid_4">
|
||||||
<h2>Credits</h2>
|
<h2>Credits</h2>
|
||||||
<p>The project is based on python plotting code by
|
<p>The project is based on python plotting code by
|
||||||
Greg Smith (<a href="https://quantifiedrowing.wordpress.com/" rel="nofollow">https://quantifiedrowing.wordpress.com/</a>)
|
Greg Smith (<a href="https://quantifiedrowing.wordpress.com/" rel="nofollow">https://quantifiedrowing.wordpress.com/</a>)
|
||||||
and inspired by the RowPro Dan Burpee spreadsheet
|
and inspired by the RowPro Dan Burpee spreadsheet
|
||||||
(<a href="http://www.sub7irc.com/RP_Split_Template.zip" rel="nofollow">http://www.sub7irc.com/RP_Split_Template.zip</a>).</p>
|
(<a href="http://www.sub7irc.com/RP_Split_Template.zip" rel="nofollow">http://www.sub7irc.com/RP_Split_Template.zip</a>).</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_6">
|
<div class="grid_4">
|
||||||
<h2>Advanced Analysis (Premium Features)</h2>
|
<h2>Advanced Analysis, Coaching and Planning (Premium Features)</h2>
|
||||||
|
|
||||||
<p>Beyond the basics, rowsandall.com provides a rich tool set for
|
|
||||||
OTW rowing. You can use it to estimate stroke power and to correct
|
|
||||||
for the effects of wind and current. For indoor rowing, when
|
|
||||||
used with painsled, and OTW rowing, when used
|
|
||||||
with a NK Empower Oarlock,
|
|
||||||
the tools enable graphical analsis of stroke metrics
|
|
||||||
including:
|
|
||||||
<ul>
|
|
||||||
<li> Peak and average force</li>
|
|
||||||
<li> drive length</li>
|
|
||||||
<li> work per stroke</li>
|
|
||||||
<li> drive and recovery time</li>
|
|
||||||
<li> catch and finish angles (OTW)</li>
|
|
||||||
<li> slip and wash (OTW)</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
These can be analyzed versus time, distance, stroke rate or other
|
|
||||||
parameters to get a better understand of the strengths and weaknesses
|
|
||||||
of a rowers technique.</p>
|
|
||||||
|
|
||||||
|
|
||||||
<p>The online logbook provide the ability to record OTW sessions
|
<p>Beyond the free basic plan, rowsandall.com provides a rich tool set
|
||||||
manually, but none of the data from these sessions is captured.</p>
|
for athletes and coaches who want to maximize their training efficiency
|
||||||
|
by analyzing data.</p>
|
||||||
|
|
||||||
<p>The Premium Features are available for only 15 EURO per year.
|
<p>We offer three plans. Click on the name of the plan to find out more:
|
||||||
Your 15 EURO will be used
|
<ul>
|
||||||
to cover the hosting costs of the site.
|
<li><a href="/rowers/promembership">Pro Membership</a>,
|
||||||
|
offering additional rowing metrics and analysis
|
||||||
|
tools for individual rowers.</li>
|
||||||
|
<li><a href="/rowers/planmembership">Self-Coach Membership</a>,
|
||||||
|
offering all of the Pro Membership plan,
|
||||||
|
plus the ability to plan your own sessions and analyze progress
|
||||||
|
of your fitness against your plan.</li>
|
||||||
|
<li><a href="/rowers/planmembership">Coach Membership</a>,
|
||||||
|
offering all functions of Self-Coach and Pro
|
||||||
|
Membership plans, but allows you to build a manage the
|
||||||
|
performance of a group of athletes around you. You can analyze
|
||||||
|
their workouts, plan their training and measure their fitness
|
||||||
|
progress.</li>
|
||||||
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<p>Click on the PayPal button to pay for your Premium membership.
|
|
||||||
Before you pay, please <a href="/rowers/register">register</a> for the free Basic membership and log in.
|
|
||||||
In this way, your user name will be added to the payment details.
|
</div>
|
||||||
Your payment will be valid for one year with automatic renewal which you can stop at any time.
|
</div>
|
||||||
You will be taken to the secure PayPal payment site.
|
|
||||||
|
<div class="grid_4 omega">
|
||||||
|
{% if user.rower.rowerplan == 'basic' and user.rower.protrialexpires|date_dif == 1 %}
|
||||||
|
<h2>Free Trial</h2>
|
||||||
|
<p>
|
||||||
|
You qualify for a 14 day free trial. No credit card needed.
|
||||||
|
Try out Pro membership for two weeks. Click the button below to
|
||||||
|
sign up for the trial. After your trial period expires, you will be
|
||||||
|
automatically reset to the Basic plan, unless you upgrade to Pro.
|
||||||
</p>
|
</p>
|
||||||
|
<div class="grid_6"><p><a class="button green small" href="/rowers/starttrial">Yes, I want to try Pro membership for 14 days for free. No strings attached.</a></p></div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<h2>Recurring Payment</h2>
|
||||||
|
<p>You need a Paypal account for this</p>
|
||||||
|
<p>
|
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||||
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
|
<input type="hidden" name="hosted_button_id" value="964GLEXX3THAW">
|
||||||
|
<table>
|
||||||
|
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
||||||
|
<option value="Pro Membership">Pro Membership : €15.00 EUR - yearly</option>
|
||||||
|
<option value="Self-Coach Membership">Self-Coach Membership : €65.00 EUR - yearly</option>
|
||||||
|
<option value="Coach 4 athletes or less">Coach 4 athletes or less : €90.00 EUR - yearly</option>
|
||||||
|
<option value="Coach 4-10 athletes">Coach 4-10 athletes : €200.00 EUR - yearly</option>
|
||||||
|
<option value="Coach more than 10 athletes">Coach more than 10 athletes : €450.00 EUR - yearly</option>
|
||||||
|
</select> </td></tr>
|
||||||
|
<tr><td><input type="hidden" name="on1" value="Your User Name">Your User Name</td></tr><tr><td><input type="text" name="os1" maxlength="200"></td></tr>
|
||||||
|
</table>
|
||||||
|
<input type="hidden" name="currency_code" value="EUR">
|
||||||
|
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_subscribeCC_LG_global.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">
|
||||||
|
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
||||||
|
</form>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>One Year Subscription</h2>
|
||||||
|
<p>Only a credit card needed. Will not automatically renew</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||||
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
|
<input type="hidden" name="hosted_button_id" value="2YB32HQTF96QW">
|
||||||
|
<table>
|
||||||
|
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
||||||
|
<option value="Pro Membership">Pro Membership €20.00 EUR</option>
|
||||||
|
<option value="Self-Coach Membership">Self-Coach Membership €75.00 EUR</option>
|
||||||
|
<option value="Coach - 4 athletes or less">Coach - 4 athletes or less €120.00 EUR</option>
|
||||||
|
<option value="Coach - 4-10 athletes">Coach - 4-10 athletes €250.00 EUR</option>
|
||||||
|
<option value="Coach - more than 10 athletes">Coach - more than 10 athletes €500.00 EUR</option>
|
||||||
|
</select> </td></tr>
|
||||||
|
<tr><td><input type="hidden" name="on1" value="Your User Name">Your User Name</td></tr><tr><td><input type="text" name="os1" maxlength="200"></td></tr>
|
||||||
|
</table>
|
||||||
|
<input type="hidden" name="currency_code" value="EUR">
|
||||||
|
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
||||||
|
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
||||||
|
</form>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Payment Processing</h2>
|
||||||
<p>After you do the payment, we will manually change your membership to
|
<p>After you do the payment, we will manually change your membership to
|
||||||
"Pro". Depending on our availability, this may take some time
|
"Pro". Depending on our availability, this may take some time
|
||||||
(typically one working day). Don't hesitate to contact us
|
(typically one working day). Don't hesitate to contact us
|
||||||
if you have any questions at this stage.</p>
|
if you have any questions at this stage.</p>
|
||||||
|
|
||||||
<h3>Recurring Payment</h3>
|
<p>If, for any reason, you are not happy with your Pro membership, please let me know through the contact form. I will contact you as soon as possible to discuss how we can make things better.</p>
|
||||||
<p>You need a Paypal account for this</p>
|
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
|
||||||
<input type="hidden" name="hosted_button_id" value="964GLEXX3THAW">
|
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<input type="hidden" name="os0" value="{{ user }}">
|
|
||||||
<input type="hidden" name="on0" value="username">
|
|
||||||
{% endif %}
|
|
||||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_subscribeCC_LG_global.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
|
|
||||||
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<h3>One Year Subscription</h3>
|
|
||||||
<p>Only a credit card needed. Will not automatically renew</p>
|
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
|
||||||
<input type="hidden" name="hosted_button_id" value="2YB32HQTF96QW">
|
|
||||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
|
||||||
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<h2>What's new?</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<ul>
|
|
||||||
<li>2016-12-19 Interactive stroke curve for NK Empower Oarlock</li>
|
|
||||||
<li>2016-12-07 Favorite Flex Charts for Premium users</li>
|
|
||||||
<li>2016-12-01 Support for NK Empower Oarlock parameters (catch and
|
|
||||||
finish angles, slip and wash, and power as measured by the Oarlock</li>
|
|
||||||
<li>2016-11-10 Power based Pie Charts</li>
|
|
||||||
<li>2016-11-01 Sliders to select subsets of data on some plots</li>
|
|
||||||
<li>2016-11-01 Emailing workouts to workouts@rowsandall.com </li>
|
|
||||||
<li>2016-11-01 Interval Editor </li>
|
|
||||||
<li>2016-09-30 Stroke Analysis Plot - with date range filtering</li>
|
|
||||||
<li>2016-09-29 Improved Flex plot, Power Histogram and Ranking Pieces - with date range filtering</li>
|
|
||||||
<li>2016-09-20 Added the Power histogram</li>
|
|
||||||
<li>2016-08-31 Added the Ranking Piece summary and pace predictor</li>
|
|
||||||
<li>2016-08-02 Added support for the SpeedCoach GPS 2 CSV/FIT file export</li>
|
|
||||||
<li>2016-07-19 Added the possibility to download wind data from <a href="http://forecast.io">The Dark Sky / Forecast.io</a></li>
|
|
||||||
<li>2016-07-19 New Flexible interactive charts for OTE and OTW (pick your own axes parameters)</li>
|
|
||||||
<li>2016-07-07 Wind and Stream corrections for OTW (Premium functionality)</li>
|
|
||||||
<li>2016-06-23 Premium users can now compare workouts</li>
|
|
||||||
<li>2016-06-20 Fixed Strava upload and added SportTracks import and export. The export is not working reliably. We are debugging this,</li>
|
|
||||||
<li>2016-06-08 Added possibility to upload CrewNerd summary CSV file for Premium Members</li>
|
|
||||||
<li>2016-06-08 Added workout summaries</li>
|
|
||||||
<li>2016-06-05 Export to Strava is working</li>
|
|
||||||
<li>2016-06-01 We're approved on the Concept2 logbook!!!!</li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -62,13 +62,13 @@
|
|||||||
<h2>Recurring Payment</h2>
|
<h2>Recurring Payment</h2>
|
||||||
<p>You need a Paypal account for this</p>
|
<p>You need a Paypal account for this</p>
|
||||||
<p>
|
<p>
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
<input type="hidden" name="hosted_button_id" value="964GLEXX3THAW">
|
<input type="hidden" name="hosted_button_id" value="964GLEXX3THAW">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
||||||
<option value="Pro Membership">Pro Membership : €15.00 EUR - yearly</option>
|
<option value="Pro Membership">Pro Membership : €15.00 EUR - yearly</option>
|
||||||
<option value="Self-Coach Membership">Self-Coach Membership : €75.00 EUR - yearly</option>
|
<option value="Self-Coach Membership">Self-Coach Membership : €65.00 EUR - yearly</option>
|
||||||
<option value="Coach 4 athletes or less">Coach 4 athletes or less : €90.00 EUR - yearly</option>
|
<option value="Coach 4 athletes or less">Coach 4 athletes or less : €90.00 EUR - yearly</option>
|
||||||
<option value="Coach 4-10 athletes">Coach 4-10 athletes : €200.00 EUR - yearly</option>
|
<option value="Coach 4-10 athletes">Coach 4-10 athletes : €200.00 EUR - yearly</option>
|
||||||
<option value="Coach more than 10 athletes">Coach more than 10 athletes : €450.00 EUR - yearly</option>
|
<option value="Coach more than 10 athletes">Coach more than 10 athletes : €450.00 EUR - yearly</option>
|
||||||
@@ -84,13 +84,14 @@
|
|||||||
<h2>One Year Subscription</h2>
|
<h2>One Year Subscription</h2>
|
||||||
<p>Only a credit card needed. Will not automatically renew</p>
|
<p>Only a credit card needed. Will not automatically renew</p>
|
||||||
|
|
||||||
<p><form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
<p>
|
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
<input type="hidden" name="hosted_button_id" value="2YB32HQTF96QW">
|
<input type="hidden" name="hosted_button_id" value="2YB32HQTF96QW">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
||||||
<option value="Pro Membership">Pro Membership €20.00 EUR</option>
|
<option value="Pro Membership">Pro Membership €20.00 EUR</option>
|
||||||
<option value="Self-Coach Membership">Self-Coach Membership €90.00 EUR</option>
|
<option value="Self-Coach Membership">Self-Coach Membership €75.00 EUR</option>
|
||||||
<option value="Coach - 4 athletes or less">Coach - 4 athletes or less €120.00 EUR</option>
|
<option value="Coach - 4 athletes or less">Coach - 4 athletes or less €120.00 EUR</option>
|
||||||
<option value="Coach - 4-10 athletes">Coach - 4-10 athletes €250.00 EUR</option>
|
<option value="Coach - 4-10 athletes">Coach - 4-10 athletes €250.00 EUR</option>
|
||||||
<option value="Coach - more than 10 athletes">Coach - more than 10 athletes €500.00 EUR</option>
|
<option value="Coach - more than 10 athletes">Coach - more than 10 athletes €500.00 EUR</option>
|
||||||
|
|||||||
@@ -163,7 +163,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div id="form_settings" class="grid_4 alpha">
|
<div id="form_settings" class="grid_4 alpha">
|
||||||
<p>Select two or more planned sessions on the left,
|
<p>Select one or more planned sessions on the left,
|
||||||
select the date when the new cycle starts below
|
select the date when the new cycle starts below
|
||||||
and press submit</p>
|
and press submit</p>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|||||||
@@ -145,13 +145,13 @@ You will be taken to the secure PayPal payment site.
|
|||||||
<h2>Recurring Payment</h2>
|
<h2>Recurring Payment</h2>
|
||||||
<p>You need a Paypal account for this</p>
|
<p>You need a Paypal account for this</p>
|
||||||
<p>
|
<p>
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
<input type="hidden" name="hosted_button_id" value="964GLEXX3THAW">
|
<input type="hidden" name="hosted_button_id" value="964GLEXX3THAW">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
||||||
<option value="Pro Membership">Pro Membership : €15.00 EUR - yearly</option>
|
<option value="Pro Membership">Pro Membership : €15.00 EUR - yearly</option>
|
||||||
<option value="Self-Coach Membership">Self-Coach Membership : €75.00 EUR - yearly</option>
|
<option value="Self-Coach Membership">Self-Coach Membership : €65.00 EUR - yearly</option>
|
||||||
<option value="Coach 4 athletes or less">Coach 4 athletes or less : €90.00 EUR - yearly</option>
|
<option value="Coach 4 athletes or less">Coach 4 athletes or less : €90.00 EUR - yearly</option>
|
||||||
<option value="Coach 4-10 athletes">Coach 4-10 athletes : €200.00 EUR - yearly</option>
|
<option value="Coach 4-10 athletes">Coach 4-10 athletes : €200.00 EUR - yearly</option>
|
||||||
<option value="Coach more than 10 athletes">Coach more than 10 athletes : €450.00 EUR - yearly</option>
|
<option value="Coach more than 10 athletes">Coach more than 10 athletes : €450.00 EUR - yearly</option>
|
||||||
@@ -167,13 +167,14 @@ You will be taken to the secure PayPal payment site.
|
|||||||
<h2>One Year Subscription</h2>
|
<h2>One Year Subscription</h2>
|
||||||
<p>Only a credit card needed. Will not automatically renew</p>
|
<p>Only a credit card needed. Will not automatically renew</p>
|
||||||
|
|
||||||
<p><form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
<p>
|
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
<input type="hidden" name="hosted_button_id" value="2YB32HQTF96QW">
|
<input type="hidden" name="hosted_button_id" value="2YB32HQTF96QW">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
<tr><td><input type="hidden" name="on0" value="Plans">Plans</td></tr><tr><td><select name="os0">
|
||||||
<option value="Pro Membership">Pro Membership €20.00 EUR</option>
|
<option value="Pro Membership">Pro Membership €20.00 EUR</option>
|
||||||
<option value="Self-Coach Membership">Self-Coach Membership €90.00 EUR</option>
|
<option value="Self-Coach Membership">Self-Coach Membership €75.00 EUR</option>
|
||||||
<option value="Coach - 4 athletes or less">Coach - 4 athletes or less €120.00 EUR</option>
|
<option value="Coach - 4 athletes or less">Coach - 4 athletes or less €120.00 EUR</option>
|
||||||
<option value="Coach - 4-10 athletes">Coach - 4-10 athletes €250.00 EUR</option>
|
<option value="Coach - 4-10 athletes">Coach - 4-10 athletes €250.00 EUR</option>
|
||||||
<option value="Coach - more than 10 athletes">Coach - more than 10 athletes €500.00 EUR</option>
|
<option value="Coach - more than 10 athletes">Coach - more than 10 athletes €500.00 EUR</option>
|
||||||
|
|||||||
@@ -326,7 +326,10 @@ def wavg(group, avg_name, weight_name):
|
|||||||
should return otherwise.
|
should return otherwise.
|
||||||
"""
|
"""
|
||||||
d = group[avg_name]
|
d = group[avg_name]
|
||||||
w = group[weight_name]
|
try:
|
||||||
|
w = group[weight_name]
|
||||||
|
except KeyError:
|
||||||
|
return d.mean()
|
||||||
try:
|
try:
|
||||||
return (d * w).sum() / w.sum()
|
return (d * w).sum() / w.sum()
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
|
|||||||
@@ -7453,7 +7453,6 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
|
|||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
|
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
|
||||||
datadf['deltat'] = datadf['time'].diff()
|
|
||||||
|
|
||||||
if datadf.empty:
|
if datadf.empty:
|
||||||
datadf,row = dataprep.getrowdata_db(id=id)
|
datadf,row = dataprep.getrowdata_db(id=id)
|
||||||
@@ -7462,6 +7461,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
|
|||||||
if datadf.empty:
|
if datadf.empty:
|
||||||
return HttpResponse("CSV data file not found")
|
return HttpResponse("CSV data file not found")
|
||||||
|
|
||||||
|
datadf['deltat'] = datadf['time'].diff()
|
||||||
|
|
||||||
|
|
||||||
workoutstateswork = [1,4,5,8,9,6,7]
|
workoutstateswork = [1,4,5,8,9,6,7]
|
||||||
@@ -8076,15 +8076,31 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
|||||||
|
|
||||||
# create interactive plot
|
# create interactive plot
|
||||||
try:
|
try:
|
||||||
script,div,js_resources,css_resources,workstrokesonly = interactive_flex_chart2(id,xparam=xparam,yparam1=yparam1,
|
(
|
||||||
yparam2=yparam2,
|
script,
|
||||||
promember=promember,plottype=plottype,
|
div,
|
||||||
workstrokesonly=workstrokesonly)
|
js_resources,
|
||||||
|
css_resources,
|
||||||
|
workstrokesonly
|
||||||
|
) = interactive_flex_chart2(
|
||||||
|
id,xparam=xparam,yparam1=yparam1,
|
||||||
|
yparam2=yparam2,
|
||||||
|
promember=promember,plottype=plottype,
|
||||||
|
workstrokesonly=workstrokesonly
|
||||||
|
)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
script,div = interactive_flex_chart2(id,xparam=xparam,yparam1=yparam1,
|
(
|
||||||
yparam2=yparam2,
|
script,
|
||||||
promember=promember,plottype=plottype,
|
div,
|
||||||
workstrokesonly=workstrokesonly)
|
js_resources,
|
||||||
|
css_resources,
|
||||||
|
workstrokesonly
|
||||||
|
) = interactive_flex_chart2(
|
||||||
|
id,xparam=xparam,yparam1=yparam1,
|
||||||
|
yparam2=yparam2,
|
||||||
|
promember=promember,plottype=plottype,
|
||||||
|
workstrokesonly=workstrokesonly
|
||||||
|
)
|
||||||
js_resources = ""
|
js_resources = ""
|
||||||
css_resources = ""
|
css_resources = ""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user