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 %}
Leave this team
+ {% else %} +
+ Join + A request will be sent to the team manager + +
+ {% 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

+ + + + + + + + + + {% for i in invites %} + + + + + + {% endfor %} + +
NameManager 
{{ i.team.name }}{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}Accept

+ {% else %} +

 

+ {% endif %}
@@ -53,7 +75,7 @@ Name -   + Manager @@ -72,10 +94,38 @@ {% endif %} -
+
New Team
+
+ {% if otherteams %} +

Other Teams

+ + + + + + + + + {% for team in otherteams %} + + + + + {% endfor %} + +
Name 
+ {{ team.name }} + + {{ team.manager.first_name }} {{ team.manager.last_name }} +
+ + {% 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):