diff --git a/rowers/models.py b/rowers/models.py
index 1da7fc3f..a5ea5506 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -905,6 +905,7 @@ class Rower(models.Model):
clubsize = models.IntegerField(default=0)
protrialexpires = models.DateField(default=datetime.date(1970, 1, 1))
plantrialexpires = models.DateField(default=datetime.date(1970, 1, 1))
+ coachtrialexpires = models.DateField(default=datetime.date(1970, 1, 1))
offercoaching = models.BooleanField(
default=False, verbose_name='Offer Remote Coaching')
diff --git a/rowers/rower_rules.py b/rowers/rower_rules.py
index 33724ef2..c323369f 100644
--- a/rowers/rower_rules.py
+++ b/rowers/rower_rules.py
@@ -84,6 +84,13 @@ def user_is_not_basic(user):
if user.rower.protrialexpires >= timezone.now().date():
return True # pragma: no cover
+ if user.rower.plantrialexpires >= timezone.now().date():
+ return True # pragma: no cover
+
+ if user.rower.coachtrialexpires >= timezone.now().date():
+ return True # pragma: no cover
+
+
return False
@rules.predicate
@@ -116,6 +123,13 @@ def can_start_plantrial(user):
return user.rower.plantrialexpires == datetime.date(1970, 1, 1)
+@rules.predicate
+def can_start_coachtrial(user):
+ if user.is_anonymous: # pragma: no cover
+ return False
+
+ return user.rower.coachtrialexpires == datetime.date(1970, 1, 1)
+
@rules.predicate
def is_staff(user): # pragma: no cover
@@ -171,11 +185,23 @@ def is_protrial(user):
return False # pragma: no cover
+@rules.predicate
+def is_coachtrial(user):
+ try:
+ r = user.rower
+ except AttributeError:
+ return False
+
+ if r.rowerplan == 'basic':
+ return r.coachtrialexpires >= timezone.now().date()
+
+ return False # pragma: no cover
+
ispromember = is_promember | is_protrial
-can_have_teams = ispromember | is_coach
+can_have_teams = ispromember | is_coach | is_coachtrial
@rules.predicate
@@ -188,6 +214,9 @@ def can_add_team(user):
if otherteams.count() == 0:
return True
+ if is_coachtrial(user):
+ return True
+
return False
@@ -222,10 +251,12 @@ def is_plantrial(user):
isplanmember = is_planmember | is_plantrial
+iscoachmember = is_coach | is_coachtrial
+
@rules.predicate
def can_add_session(user):
- return isplanmember(user) or is_coach(user)
+ return isplanmember(user) or is_coach(user) or is_coachtrial(user)
# User / Coach relationships (Rower object)
@@ -237,7 +268,7 @@ def can_plan(user):
if user.rower.rowerplan in ['plan', 'coach']:
return True
if user.rower.rowerplan in ['basic', 'pro']:
- return user.rower.plantrialexpires >= timezone.now().date()
+ return user.rower.plantrialexpires >= timezone.now().date() or user.rower.coachtrialexpires >= timezone.now().date()
if user.rower.rowerplan == 'freecoach': # pragma: no cover
if user.rower.mycoachgroup is not None:
return len(user.rower.mycoachgroup) >= 4
@@ -620,7 +651,7 @@ def can_view_session(user, session):
return True
# coach users can view sessions created by their team members
# below untested
- if is_coach(user): # pragma: no cover
+ if is_coach(user) or is_coachtrial(user): # pragma: no cover
teams = user.rower.get_managed_teams()
for t in teams:
teamusers = [member.u for member in t.rower.all()]
@@ -711,7 +742,7 @@ def is_team_member(user, team): # pragma: no cover
def can_view_team(user, team):
# user based - below untested
if user.rower.rowerplan == 'basic' and team.manager.rower.rowerplan != 'coach': # pragma: no cover
- return is_plantrial(user) or is_protrial(user)
+ return is_plantrial(user) or is_protrial(user) or is_coachtrial(user)
# team is public
if team.private == 'open':
return True
diff --git a/rowers/templates/coachtrialwelcome.html b/rowers/templates/coachtrialwelcome.html
new file mode 100644
index 00000000..b1844848
--- /dev/null
+++ b/rowers/templates/coachtrialwelcome.html
@@ -0,0 +1,34 @@
+{% extends "emailbase.html" %}
+
+{% block body %}
+
Dear {{ first_name }},
+
+
+ Welcome on the trial for the Coach plan. You are now able to test coaching
+ functionality for two weeks, with two coachees.
+
+
+As the developer of the Rowsandall.com site I am very interested to know
+what you think of Rowsandall.com.
+Especially, I'd like to understand how you started using the site,
+what you are looking for, and what you think could be improved.
+
+
+
+I'd also love to hear a bit about your rowing background.
+
+
+
+ So don't hesitate to respond to this email and let me know. I will read and respond to each
+ email.
+
+
+
+Thank you very much for your help and for supporting rowsandall.com.
+