diff --git a/rowers/models.py b/rowers/models.py index a5ea5506..7446bb36 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -531,6 +531,13 @@ class TeamInviteForm(ModelForm): user = UserFullnameChoiceField(queryset=User.objects.all(), required=False) email = forms.EmailField(required=False) + def __init__(self, *args, **kwargs): + userid = kwargs.pop('userid',0) + super(TeamInviteForm, self).__init__(*args, **kwargs) + if userid: + self.fields['user'].initial = userid + + class Meta: model = TeamInvite fields = ['user', 'email'] diff --git a/rowers/rower_rules.py b/rowers/rower_rules.py index c323369f..9a9327a7 100644 --- a/rowers/rower_rules.py +++ b/rowers/rower_rules.py @@ -138,6 +138,12 @@ def is_staff(user): # pragma: no cover @rules.predicate def is_coach(user): + if user is None: + return False + if user.is_anonymous: + return False + if user.rower.coachtrialexpires >= timezone.now().date(): + return True return user.rower.rowerplan in ['coach', 'freecoach'] @@ -157,6 +163,9 @@ def is_planmember(user): except AttributeError: # pragma: no cover return False + if user.rower.coachtrialexpires >= timezone.now().date(): + return True + return r.rowerplan in ['coach', 'plan'] # freecoach? @@ -198,7 +207,7 @@ def is_coachtrial(user): return False # pragma: no cover -ispromember = is_promember | is_protrial +ispromember = is_promember | is_protrial | is_coach | is_coachtrial can_have_teams = ispromember | is_coach | is_coachtrial @@ -251,7 +260,7 @@ def is_plantrial(user): isplanmember = is_planmember | is_plantrial -iscoachmember = is_coach | is_coachtrial +iscoachmember = is_coachtrial | is_coach @rules.predicate diff --git a/rowers/tasks.py b/rowers/tasks.py index 1b44555d..4c6ed903 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -314,6 +314,21 @@ def summaryfromsplitdata(splitdata, data, filename, sep='|', workouttype='rower' return sums, sa, results +@app.task +def handle_remove_workouts_team(ws, t, debug=False, **kwargs): + for w in ws: + w.team.remove(t) + + return 1 + +@app.task +def handle_add_workouts_team(ws, t, debug=False, **kwargs): + + for w in ws: + w.team.add(t) + + return 1 + @app.task def check_tp_workout_id(workout, location, attempts=5, debug=False, **kwargs): authorizationstring = str('Bearer ' + workout.user.tptoken) diff --git a/rowers/teams.py b/rowers/teams.py index 83f214cf..0218ce8f 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -42,20 +42,7 @@ queuehigh = django_rq.get_queue('low') inviteduration = 14 # days - -def handle_remove_workouts_team(ws, t): - for w in ws: - w.team.remove(t) - - return 1 - - -def handle_add_workouts_team(ws, t): - - for w in ws: - w.team.add(t) - - return 1 +from rowers.tasks import handle_remove_workouts_team, handle_add_workouts_team def update_team(t, name, manager, private, notes, viewing): @@ -128,10 +115,17 @@ def add_member(id, rower): except ValidationError as e: # pragma: no cover return(0, "Couldn't add member: "+str(e.message)) + # if team manager is coach + if is_coach(t.manager): + result = add_coach(t.manager.rower, rower) + # code to add all workouts ws = Workout.objects.filter(user=rower) - _ = handle_add_workouts_team(ws, t) + _ = myqueue( + queuehigh, + handle_add_workouts_team, + ws, t) # code to add plannedsessions plannedsessions = PlannedSession.objects.filter( @@ -154,7 +148,8 @@ def remove_member(id, rower): # remove the team from rower's workouts: ws = Workout.objects.filter(user=rower, team=t) - _ = handle_remove_workouts_team(ws, t) + + _ = myqueue(queuehigh,handle_remove_workouts_team,ws, t) # set_teamplanexpires(rower) return (id, 'Member removed') diff --git a/rowers/templates/document_form.html b/rowers/templates/document_form.html index 2a6befb5..85d7be01 100644 --- a/rowers/templates/document_form.html +++ b/rowers/templates/document_form.html @@ -25,7 +25,7 @@