From 892b6c0e606a9c86547332ab6a8d2ab45949504c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 11 Jan 2020 17:56:38 +0100 Subject: [PATCH] small changes --- rowers/rower_rules.py | 26 +++++++++++++++++++++----- rowers/teams.py | 17 ++--------------- rowers/views/teamviews.py | 12 ++++-------- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/rowers/rower_rules.py b/rowers/rower_rules.py index 0b89468a..386cb5eb 100644 --- a/rowers/rower_rules.py +++ b/rowers/rower_rules.py @@ -1,7 +1,26 @@ import rules +import datetime # PERMISSIONS +# USER permissions + +@rules.predicate +def user_is_not_basic(user): + if user.rower.rowerplan != 'basic': + return True + + if user.rower.protrialexpires >= datetime.date.today() and user.rower.plantrialexpires >= datetime.date.today(): + return True + + return False + +@rules.predicate +def is_coach(user): + return user.rower.rowerplan in ['coach','freecoach'] + +# TEAM permissions + @rules.predicate def is_team_manager(user,team): return team.manager == user @@ -11,10 +30,6 @@ def is_team_member(user,team): members = team.rower.all() return user in [member.user for member in members] -@rules.predicate -def is_coach(user): - return user.rower.rowerplan in ['coach','freecoach'] - @rules.predicate def can_view_team(user,team): # user based @@ -26,8 +41,9 @@ def can_view_team(user,team): # team is private return is_team_member(user,team) | is_team_manager(user,team) + # For Team functionality rules.add_perm('teams.view_team',can_view_team) -rules.add_perm('teams.add_team',is_coach) +rules.add_perm('teams.add_team',user_is_not_basic) rules.add_perm('teams.change_team',is_team_manager) rules.add_perm('teams.delete_team',is_team_manager) diff --git a/rowers/teams.py b/rowers/teams.py index e487c5ea..5e3fe126 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -81,7 +81,7 @@ def create_team(name,manager,private='open',notes='',viewing='allmembers'): if manager.rower.rowerplan == 'basic': if manager.rower.protrialexpires < timezone.now().date() and manager.rower.plantrialexpires < timezone.now().date(): return (0,'You need to upgrade to a paid plan to establish a team') - if manager.rower.rowerplan not in ('coach','freecoach'): + if not is_coach(manager): ts = Team.objects.filter(manager=manager) if len(ts)>=1: return (0,'You need to upgrade to the Coach plan to have more than one team') @@ -102,19 +102,6 @@ def remove_team(id): send_team_delete_mail(t,r) return t.delete() -#def set_teamplanexpires(rower): -# ts = Team.objects.filter(rower=rower) - -# texp = datetime.date(timezone.now()) - -# for t in ts: -# print t.name -# mr = Rower.objects.get(user=t.manager) -# if mr.teamplanexpires > texp: -# rower.teamplanexpires = mr.teamplanexpires - -# t.save() - return (1,'Updated rower team expiry') def add_coach(coach,rower): @@ -194,7 +181,7 @@ def rower_get_coaches(rower): def coach_getcoachees(coach): - if coach.mycoachgroup and coach.rowerplan in ('coach','freecoach'): + if coach.mycoachgroup and is_coach(coach.user): return Rower.objects.filter( coachinggroups__in=[coach.mycoachgroup] ).distinct().order_by("user__last_name","user__first_name") diff --git a/rowers/views/teamviews.py b/rowers/views/teamviews.py index 67315e2c..3e9d942e 100644 --- a/rowers/views/teamviews.py +++ b/rowers/views/teamviews.py @@ -647,17 +647,13 @@ def team_edit_view(request, team_id=0): }) #@user_passes_test(cancreateteam,login_url="/rowers/paidplans",redirect_field_name=None) -@login_required() def team_create_view(request): r = getrequestrower(request) - if r.rowerplan == 'basic': - if r.protrialexpires < timezone.now().date() and r.plantrialexpires < timezone.now().date(): - messages.error(request,"You must upgrade to Pro or higher to create teams/training groups") - url = reverse('paidplans') - return HttpResponseRedirect(url) - - + if not user_is_not_basic(request.user): + messages.error(request,"You must upgrade to Pro or higher to create teams/training groups") + url = reverse('paidplans') + return HttpResponseRedirect(url) if request.method == 'POST': teamcreateform = TeamForm(request.POST)