diff --git a/rowers/teams.py b/rowers/teams.py
index 04609ebb..19c0d06d 100644
--- a/rowers/teams.py
+++ b/rowers/teams.py
@@ -66,7 +66,7 @@ def add_member(id,rower):
set_teamplanexpires(rower)
- return (1,'Member added')
+ return (id,'Member added')
def remove_member(id,rower):
t = Team.objects.get(id=id)
@@ -80,17 +80,17 @@ def remove_member(id,rower):
res = queuehigh.enqueue(handle_remove_workouts_team,ws,t)
set_teamplanexpires(rower)
- return (1,'Member removed')
+ return (id,'Member removed')
def mgr_remove_member(id,manager,rower):
t = Team.objects.get(id=id)
if t.manager == manager:
remove_member(id,rower)
- return (1,'Member removed')
+ return (id,'Member removed')
else:
return (0,'You are not the team manager')
- return 0
+ return (0,'')
def count_invites(manager):
ts = Team.objects.filter(manager=manager)
diff --git a/rowers/templates/base.html b/rowers/templates/base.html
index 57ee2294..48b6fde5 100644
--- a/rowers/templates/base.html
+++ b/rowers/templates/base.html
@@ -120,7 +120,7 @@
{{ user.first_name }}
- Edit user data, e.g. heart rate zones
+ Edit user account, e.g. heart rate zones, power zones, email, teams
{% else %}
login
diff --git a/rowers/templates/team.html b/rowers/templates/team.html
index 1a1bb618..b5b8bcaf 100644
--- a/rowers/templates/team.html
+++ b/rowers/templates/team.html
@@ -6,9 +6,18 @@
{{ team.name }}
{{ team.notes }}
+
Manager: {{ team.manager.first_name }} {{ team.manager.last_name }}
+ {% if ismember %}
+ {% else %}
+
+ {% endif %}
Members
diff --git a/rowers/templates/teams.html b/rowers/templates/teams.html
index a26f6866..bb6e2213 100644
--- a/rowers/templates/teams.html
+++ b/rowers/templates/teams.html
@@ -38,9 +38,31 @@
+ {% if invites %}
Invitations
+
+
+
+ | Name |
+ Manager |
+ |
+
+
+
+ {% for i in invites %}
+
+ | {{ i.team.name }} |
+ {{ i.team.manager.first_name }} {{ i.team.manager.last_name }} |
+ Accept |
+
+ {% endfor %}
+
+
+ {% else %}
+
+ {% endif %}
@@ -53,7 +75,7 @@
| Name |
- |
+ Manager |
@@ -72,10 +94,38 @@
{% endif %}
-
+
+ {% if otherteams %}
+
Other Teams
+
+
+
+ | Name |
+ |
+
+
+
+ {% for team in otherteams %}
+
+ |
+ {{ team.name }}
+ |
+
+ {{ team.manager.first_name }} {{ team.manager.last_name }}
+ |
+
+ {% endfor %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
{% endif %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 6832940e..7c2c7bdc 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -200,13 +200,18 @@ urlpatterns = [
url(r'^workout/(\d+)/recalcsummary/$',views.workout_recalcsummary_view),
url(r'^workout/(\d+)/sporttracksuploadw/$',views.workout_sporttracks_upload_view),
url(r'^me/teams/$',views.rower_teams_view),
+ url(r'^team/(?P\d+)/s/(?P\w+.*)/c/(?P\w+.*)$',views.team_view),
+ url(r'^team/(?P\d+)/c/(?P\w+.*)$',views.team_view),
+ url(r'^team/(?P\d+)/s/(?P\w+.*)$',views.team_view),
url(r'^team/(\d+)/$',views.team_view),
url(r'^team/(\d+)/leaveconfirm/$',views.team_leaveconfirm_view),
url(r'^team/(\d+)/leave/$',views.team_leave_view),
url(r'^team/(\d+)/deleteconfirm/$',views.team_deleteconfirm_view),
+ url(r'^team/(\d+)/requestmembership/(\d+)$',views.team_requestmembership_view),
url(r'^team/(\d+)/delete/$',views.team_delete_view),
url(r'^team/create/$',views.team_create_view),
url(r'^me/invitation/$',views.rower_invitations_view),
+ url(r'^me/invitation/c/(?P\w+.*)/$',views.rower_invitations_view),
url(r'^me/invitation/(\w+.*)/$',views.rower_invitations_view),
url(r'^me/edit/c/(?P\w+.*)$',views.rower_edit_view),
url(r'^me/edit/s/(?P\w+.*)$',views.rower_edit_view),
diff --git a/rowers/views.py b/rowers/views.py
index 1dcf51a1..7e107de6 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -31,7 +31,7 @@ from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
RowerPowerZonesForm,AccountRowerForm,UserForm,StrokeData,
- Team,TeamForm,TeamInviteForm
+ Team,TeamForm,TeamInviteForm,TeamInvite
)
from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
from django.forms.formsets import formset_factory
@@ -5289,25 +5289,34 @@ def strokedatajson(request,id):
import teams
@login_required()
-def team_view(request,id=0):
+def team_view(request,id=0,message='',successmessage=''):
+ ismember = 0
+
+ r = Rower.objects.get(user=request.user)
+
+
try:
t = Team.objects.get(id=id)
except Team.DoesNotExist:
return HttpResponse("Team doesn't exist")
+
if request.method == 'POST' and request.user == t.manager:
inviteform = TeamInviteForm(request.POST)
if inviteform.is_valid():
cd = inviteform.cleaned_data
newmember = cd['user']
email = cd['email']
- inviteid,message = teams.create_invite(t,t.manager,
+ inviteid,text = teams.create_invite(t,t.manager,
user=newmember,
email=email)
if inviteid:
teams.send_invite_email(inviteid)
-
+ successmessage = text
+ else:
+ message = text
+
elif request.user == t.manager:
inviteform = TeamInviteForm()
inviteform.fields['user'].queryset = User.objects.filter(rower__isnull=False)
@@ -5316,13 +5325,17 @@ def team_view(request,id=0):
members = Rower.objects.filter(team=t).order_by('user__last_name','user__first_name')
-
+ if r in members:
+ ismember = 1
return render(request, 'team.html',
{
'team':t,
'members':members,
'inviteform':inviteform,
+ 'message':message,
+ 'successmessage':successmessage,
+ 'ismember':ismember,
})
@login_required()
@@ -5349,21 +5362,60 @@ def team_leave_view(request,id=0):
@login_required()
def rower_teams_view(request):
r = Rower.objects.get(user=request.user)
- teams = Team.objects.filter(rower=r)
+ ts = Team.objects.filter(rower=r)
myteams = Team.objects.filter(manager=request.user)
+ otherteams = Team.objects.filter(private='open').exclude(rower=r).order_by('name')
+ teams.remove_expired_invites()
+
+ invites = TeamInvite.objects.filter(user=request.user)
return render(request, 'teams.html',
{
- 'teams':teams,
+ 'teams':ts,
'myteams':myteams,
+ 'invites':invites,
+ 'otherteams':otherteams,
})
@login_required()
-def rower_invitations_view(request,code=None):
- return render(request, 'invitations.html',
- {
- })
+def rower_invitations_view(request,code=None,message='',successmessage=''):
+ if code:
+ teams.remove_expired_invites()
+ res,text = teams.process_invite_code(request.user,code)
+ if res:
+ successmessage = text
+ teamid=res
+ url = reverse(team_view,kwargs={
+ 'id':teamid,
+ 'successmessage': successmessage,
+ })
+ else:
+ message = text
+ url = reverse(rower_invitations_view,kwargs={
+ 'message':message
+ })
+
+ return HttpResponseRedirect(url)
+
+
+ r = Rower.objects.get(user=request.user)
+ ts = Team.objects.filter(rower=r)
+ myteams = Team.objects.filter(manager=request.user)
+ invites = TeamInvite.objects.filter(user=request.user)
+ otherteams = Team.objects.filter(private='open').drop(rower=r)
+
+ return render(request, 'teams.html',
+ {
+ 'teams':ts,
+ 'myteams':myteams,
+ 'invites':invites,
+ 'otherteams':otherteams,
+ })
+
+@login_required()
+def team_requestmembership_view(request,teamid,userid):
+ return HttpResponse("Not yet implemented")
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
def team_create_view(request):