diff --git a/rowers/models.py b/rowers/models.py index 74373e98..bed877e9 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -502,6 +502,8 @@ class Rower(models.Model): planexpires = models.DateField(default=timezone.now) teamplanexpires = models.DateField(default=timezone.now) clubsize = models.IntegerField(default=0) + protrialexpires = models.DateField(blank=True,null=True) + plantrialexpires = models.DateField(blank=True,null=True) # Friends/Team diff --git a/rowers/templates/advancededit.html b/rowers/templates/advancededit.html index be762e3d..e8a7e2e0 100644 --- a/rowers/templates/advancededit.html +++ b/rowers/templates/advancededit.html @@ -60,7 +60,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Edit Intervals {% else %} Edit Intervals @@ -97,7 +97,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Dist Metrics Plot {% else %} Dist Metrics Plot @@ -109,7 +109,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Time Metrics Plot {% else %} Time Metrics Plot @@ -121,7 +121,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Power Histogram {% else %} Power Histogram @@ -135,7 +135,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Glue {% else %} Glue @@ -148,7 +148,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Sensor Fusion {% else %} Sensor Fusion @@ -160,7 +160,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Split Workout {% else %} Split Workout diff --git a/rowers/templates/advancedotw.html b/rowers/templates/advancedotw.html index e6ace0a9..f22a9a44 100644 --- a/rowers/templates/advancedotw.html +++ b/rowers/templates/advancedotw.html @@ -56,7 +56,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Compare Workouts {% else %} Compare Workouts @@ -78,7 +78,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Edit Intervals {% else %} Edit Intervals @@ -95,7 +95,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} CrewNerd Summary {% else %} CrewNerd Summary @@ -109,7 +109,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Stroke Profile (Empower) {% else %} Stroke Profile (Empower) @@ -122,7 +122,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} OTW Power Plot {% else %} OTW Power Plot @@ -142,7 +142,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Geeky Stuff {% else %} Geeky Stuff @@ -157,7 +157,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Smooth out Pace Data {% else %} Smooth out Pace Data @@ -174,7 +174,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Raw Data {% else %} Reset Smoothing @@ -189,7 +189,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Glue {% else %} Glue @@ -201,7 +201,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Sensor Fusion {% else %} Sensor Fusion @@ -213,7 +213,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Split Workout {% else %} Split Workout diff --git a/rowers/templates/analysis.html b/rowers/templates/analysis.html index 6f7a3531..da1726ee 100644 --- a/rowers/templates/analysis.html +++ b/rowers/templates/analysis.html @@ -41,7 +41,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Power Histogram {% else %} Power Histogram @@ -53,7 +53,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Statistics {% else %} Statistics @@ -65,7 +65,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Box Chart {% else %} Box Chart @@ -90,7 +90,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} OTW Critical Power {% else %} OTW Critical Power @@ -102,7 +102,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Multi Compare {% else %} Multi Compare @@ -114,7 +114,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Trend Flex {% else %} Trend Flex @@ -128,7 +128,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} OTE Critical Power {% else %} OTE Critical Power diff --git a/rowers/templates/bases.html b/rowers/templates/bases.html index 8daf8b52..6b242cf2 100644 --- a/rowers/templates/bases.html +++ b/rowers/templates/bases.html @@ -1,3 +1,4 @@ +{% load rowerfilters %}
@@ -19,7 +20,7 @@Free Data and Analysis. For Rowers. By Rowers.
diff --git a/rowers/templates/histo.html b/rowers/templates/histo.html index 95980f07..5de2516b 100644 --- a/rowers/templates/histo.html +++ b/rowers/templates/histo.html @@ -56,24 +56,24 @@ {{ interactiveplot |safe }} - + // Set things up to resize the plot on a window resize. You can play with + // the arguments of resize_width_height() to change the plot's behavior. + var plot_resize_setup = function () { + var plotid = Object.keys(Bokeh.index)[0]; // assume we have just one plot + var plot = Bokeh.index[plotid]; + var plotresizer = function() { + // arguments: use width, use height, maintain aspect ratio + plot.resize_width_height(true, false, false); + }; + window.addEventListener('resize', plotresizer); + plotresizer(); + }; + window.addEventListener('load', plot_resize_setup); + +
Summary for {{ theuser.first_name }} {{ theuser.last_name }} @@ -153,9 +153,9 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Edit Wind Data {% else %} Edit Wind Data @@ -70,7 +70,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Edit Stream Data {% else %} Edit Stream Data @@ -83,7 +83,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} OTW Power {% else %} OTW Power @@ -100,7 +100,7 @@
- {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + {% if user|is_promember %} Corrected Pace Plot {% else %} Corrected Pace Plot diff --git a/rowers/templates/planmembership.html b/rowers/templates/planmembership.html index 55d599e8..6a3dc73c 100644 --- a/rowers/templates/planmembership.html +++ b/rowers/templates/planmembership.html @@ -1,6 +1,6 @@ {% extends "base.html" %} - {% block title %}About us{% endblock title %} + {% block title %}Rowsandall Plan Membership{% endblock title %} {% block content %}
+ 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. +
+ +{% endif %}You need a Paypal account for this
- +Only a credit card needed. Will not automatically renew
- +After you do the payment, we will manually change your membership to
diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py
index 8661e00f..bfdf2751 100644
--- a/rowers/templatetags/rowerfilters.py
+++ b/rowers/templatetags/rowerfilters.py
@@ -3,7 +3,7 @@ from django.utils.safestring import mark_safe
from time import strftime
import dateutil.parser
import json
-
+import datetime
register = template.Library()
def strfdelta(tdelta):
@@ -41,6 +41,10 @@ def secondstotimestring(tdelta):
return res
+@register.filter
+def ddays(ddelta):
+ return ddelta.days+1
+
@register.filter
def spacetohtml(t):
return t.replace(" ","%20")
@@ -107,6 +111,11 @@ def get_field_id(id,s,form):
from rowers.models import Rower,Team
+from rowers.views import ispromember
+@register.filter
+def is_promember(user):
+ return ispromember(user)
+
@register.filter
def is_manager(user):
r = Rower.objects.get(user=user)
@@ -183,3 +192,25 @@ def verbosetimeperiod(timeperiod):
return verbose
+from datetime import date
+
+@ register.filter
+def future_date_only(the_date):
+ if the_date > date.today():
+ return the_date
+ else:
+ return None
+
+
+@register.filter
+def is_future_date(the_date):
+ return the_date >= date.today()
+
+@register.filter
+def date_dif(the_date):
+ if the_date:
+ return the_date - date.today()
+ else:
+ return 1
+
+
diff --git a/rowers/urls.py b/rowers/urls.py
index 2d42ea30..aa23fbc8 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -382,6 +382,7 @@ urlpatterns = [
url(r'^videos', TemplateView.as_view(template_name='videos.html'),name='videos'),
url(r'^analysis', TemplateView.as_view(template_name='analysis.html'),name='analysis'),
url(r'^promembership', TemplateView.as_view(template_name='promembership.html'),name='promembership'),
+ url(r'^starttrial$',views.start_trial_view),
url(r'^planmembership', TemplateView.as_view(template_name='planmembership.html'),name='planmembership'),
url(r'^paypaltest', TemplateView.as_view(template_name='paypaltest.html'),name='paypaltest'),
url(r'^legal', TemplateView.as_view(template_name='legal.html'),name='legal'),
diff --git a/rowers/views.py b/rowers/views.py
index f16dcdae..a056ad00 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -800,6 +800,8 @@ def ispromember(user):
r.save()
result = user.is_authenticated() and (r.rowerplan=='pro' or r.rowerplan=='coach' or r.rowerplan=='plan')
+ if not result and r.protrialexpires:
+ result = user.is_authenticated() and r.rowerplan=='basic' and r.protrialexpires >= datetime.date.today()
else:
result = False
return result
@@ -930,6 +932,33 @@ def sendmail(request):
else:
return HttpResponseRedirect('/rowers/email/')
+@login_required()
+def start_trial_view(request):
+ r = getrower(request.user)
+
+ if r.protrialexpires is not None:
+ messages.error(request,'You do not qualify for a trial')
+ url = '/rowers/promembership'
+ return HttpResponseRedirect(url)
+
+ r.protrialexpires = datetime.date.today()+datetime.timedelta(13)
+ r.save()
+
+ url = reverse(workouts_view)
+
+ messages.info(request,'We have started your 14 day trial period')
+
+ subject2 = "User started Pro Trial"
+ message2 = "User Started Pro Trial.\n"
+ message2 += request.user.email + "\n"
+ message2 += "User name: "+request.user.username
+
+ send_mail(subject2, message2,
+ 'Rowsandall Server Pro Member
{% else %}
-
+
{% endif %}
+ {% if user.rower.rowerplan == 'basic' and user.rower.protrialexpires|date_dif == 1 %}
+
+ {% endif %}