from statements import * @login_required() def team_view(request,id=0,userid=0): ismember = 0 hasrequested = 0 r = getrequestrower(request,userid=userid) myteams, memberteams, otherteams = get_teams(request) teams.remove_expired_invites() try: t = Team.objects.get(id=id) except Team.DoesNotExist: raise Http404("Team doesn't exist") if request.method == 'POST' and request.user == t.manager: inviteform = TeamInviteForm(request.POST) inviteform.fields['user'].queryset = User.objects.filter(rower__isnull=False,rower__team__in=myteams).distinct().exclude(rower__team__name=t.name) if inviteform.is_valid(): cd = inviteform.cleaned_data newmember = cd['user'] email = cd['email'] inviteid,text = teams.create_invite(t,t.manager, user=newmember, email=email) if inviteid: teams.send_invite_email(inviteid) successmessage = text messages.info(request,successmessage) else: message = text messages.error(request,message) elif request.user == t.manager: inviteform = TeamInviteForm() inviteform.fields['user'].queryset = User.objects.filter(rower__isnull=False,rower__team__in=myteams).distinct().exclude(rower__team__name=t.name) else: inviteform = '' members = Rower.objects.filter(team=t).order_by('user__last_name','user__first_name') thisteammyrequests = TeamRequest.objects.filter(team=t,user=request.user) if len(thisteammyrequests): hasrequested = 1 if r in members: ismember = 1 breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' }, { 'url':reverse(team_view,kwargs={'id':id}), 'name': t.name } ] return render(request, 'team.html', { 'team':t, 'teams':get_my_teams(request.user), 'myteams':myteams, 'memberteams':memberteams, 'members':members, 'breadcrumbs':breadcrumbs, 'active':'nav-teams', 'inviteform':inviteform, 'ismember':ismember, 'hasrequested':hasrequested, }) @login_required() def team_leaveconfirm_view(request,id=0): try: t = Team.objects.get(id=id) except Team.DoesNotExist: raise Http404("Team doesn't exist") myteams, memberteams, otherteams = get_teams(request) breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' }, { 'url':reverse(team_view,kwargs={'id':id}), 'name': t.name }, { 'url':reverse(team_leaveconfirm_view,kwargs={'id':id}), 'name': 'Leave' } ] return render(request,'teamleaveconfirm.html', { 'team':t, 'teams':get_my_teams(request.user), 'myteams':myteams, 'memberteams':memberteams, 'otherteams':otherteams, 'active':'nav-teams', 'breadcrumbs':breadcrumbs, }) @login_required() def rower_calcdps_view(request): r = getrower(request.user) ws = [(w.id,w.csvfilename) for w in Workout.objects.filter(user=r)] res = myqueue(queue,handle_updatedps,r.user.email,ws,debug=False, emailbounced=r.emailbounced) messages.info(request,"Your workouts are being updated in the background. You will receive email when this is done.") url = reverse('workouts_view') return HttpResponseRedirect(url) @login_required() def team_leave_view(request,id=0): r = getrower(request.user) teams.remove_member(id,r) url = reverse(rower_teams_view) response = HttpResponseRedirect(url) return response from rowers.forms import TeamInviteCodeForm def get_teams(request): r = Rower.objects.get(user=request.user) myteams = Team.objects.filter( manager=request.user).order_by('name') memberteams = Team.objects.filter( rower=r).exclude(manager=request.user).order_by('name') otherteams = Team.objects.filter( private='open').exclude( rower=r).exclude(manager=request.user).order_by('name') return myteams, memberteams, otherteams @login_required() def rower_teams_view(request,message='',successmessage=''): if request.method == 'POST': form = TeamInviteCodeForm(request.POST) if form.is_valid(): code = form.cleaned_data['code'] res,text = teams.process_invite_code(request.user,code) if res: successmessage = text else: message = text else: form = TeamInviteCodeForm() r = getrower(request.user) ts = Team.objects.filter(rower=r) myteams, memberteams, otherteams = get_teams(request) teams.remove_expired_invites() invites = TeamInvite.objects.filter(user=request.user) requests = TeamRequest.objects.filter(user=request.user) myrequests = TeamRequest.objects.filter(team__in=myteams) myinvites = TeamInvite.objects.filter(team__in=myteams) clubsize = teams.count_invites(request.user)+teams.count_club_members(request.user) max_clubsize = r.clubsize messages.info(request,successmessage) messages.error(request,message) breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' } ] return render(request, 'teams.html', { 'teams':ts, 'active':'nav-teams', 'breadcrumbs':breadcrumbs, 'clubsize':clubsize, 'max_clubsize':max_clubsize, 'myteams':myteams, 'memberteams':memberteams, 'invites':invites, 'otherteams':otherteams, 'requests':requests, 'myrequests':myrequests, 'form':form, 'myinvites':myinvites, }) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def invitation_revoke_view(request,id): res,text = teams.revoke_invite(request.user,id) if res: messages.info(request,text) successmessage = text else: message = text messages.error(request,text) url = reverse(rower_teams_view) return HttpResponseRedirect(url) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def manager_member_drop_view(request,teamid,userid, message='',successmessage=''): rower = Rower.objects.get(user__id=userid) res, text = teams.mgr_remove_member(teamid,request.user,rower) if res: messages.info(request,text) else: messages.error(request,text) url = reverse(rower_teams_view) return HttpResponseRedirect(url) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def manager_requests_view(request,code=None,message='',successmessage=''): if code: res,text = teams.process_request_code(request.user,code) if res: successmessage = text message = '' else: message = text successmessage = '' messages.info(request,successmessage) messages.error(request,message) url = reverse(rower_teams_view,kwargs={ }) return HttpResponseRedirect(url) @login_required() def team_requestmembership_view(request,teamid,userid): try: t = Team.objects.get(id=teamid) except Team.DoesNotExist: raise Http404("Team doesn't exist") res,text = teams.create_request(t,userid) if res: messages.info(request,text) else: messages.error(request,text) url = reverse(team_view,kwargs={ 'id':int(teamid), }) return HttpResponseRedirect(url) @login_required() def request_revoke_view(request,id=0): res,text = teams.revoke_request(request.user,id) if res: messages.info(request,text) else: messages.error(request,text) url = reverse(rower_teams_view) return HttpResponseRedirect(url) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def request_reject_view(request,id=0): res,text = teams.reject_request(request.user,id) if res: messages.info(request,text) else: messages.error(request,text) url = reverse(rower_teams_view) return HttpResponseRedirect(url) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def invitation_reject_view(request,id=0): res,text = teams.reject_invitation(request.user,id) if res: messages.info(request,text) else: messages.error(request,text) url = reverse(rower_teams_view) return HttpResponseRedirect(url) @login_required() 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: messages.info(request,text) teamid=res url = reverse(team_view,kwargs={ 'id':teamid, }) else: messages.error(request,text) url = reverse(rower_teams_view) return HttpResponseRedirect(url) url = reverse(rower_teams_view,kwargs={ }) return HttpResponseRedirect(url) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def team_edit_view(request,id=0): try: t = Team.objects.get(id=id) except Team.DoesNotExist: raise Http404("Team does not exist") if request.method == 'POST': teamcreateform = TeamForm(request.POST,instance=t) if teamcreateform.is_valid(): cd = teamcreateform.cleaned_data name = cd['name'] notes = cd['notes'] manager = request.user private = cd['private'] viewing = cd['viewing'] res,message=teams.update_team(t,name,manager,private,notes, viewing) if res: messages.info(request,message) else: messages.error(request,message) url = reverse(team_view, kwargs={ 'id':int(id), } ) response = HttpResponseRedirect(url) return response else: teamcreateform = TeamForm(instance=t) myteams, memberteams, otherteams = get_teams(request) breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' }, { 'url':reverse(team_view,kwargs={'id':id}), 'name': t.name }, { 'url':reverse(team_edit_view,kwargs={'id':id}), 'name': 'Edit' } ] return render(request,'teamedit.html', { 'form':teamcreateform, 'teams':get_my_teams(request.user), 'myteams':myteams, 'memberteams':memberteams, 'otherteams':otherteams, 'active':'nav-teams', 'breadcrumbs':breadcrumbs, 'team':t, }) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def team_create_view(request): if request.method == 'POST': teamcreateform = TeamForm(request.POST) if teamcreateform.is_valid(): cd = teamcreateform.cleaned_data name = cd['name'] notes = cd['notes'] manager = request.user private = cd['private'] viewing = cd['viewing'] res,message=teams.create_team(name,manager,private,notes, viewing) url = reverse(rower_teams_view) response = HttpResponseRedirect(url) return response else: teamcreateform = TeamForm() myteams, memberteams, otherteams = get_teams(request) breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' }, { 'url':reverse(team_create_view), 'name': "New Team" }, ] return render(request,'teamcreate.html', { 'teams':get_my_teams(request.user), 'form':teamcreateform, 'myteams':myteams, 'memberteams':memberteams, 'otherteams':otherteams, 'active':'nav-teams', 'breadcrumbs':breadcrumbs, }) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def team_deleteconfirm_view(request,id): r = getrower(request.user) try: t = Team.objects.get(id=id) except Team.DoesNotExist: raise Http404("This team doesn't exist") if t.manager != request.user: raise PermissionDenied("You are not allowed to delete this team") myteams, memberteams, otherteams = get_teams(request) breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' }, { 'url':reverse(team_view,kwargs={'id':id}), 'name': t.name }, { 'url':reverse(team_deleteconfirm_view,kwargs={'id':id}), 'name': 'Leave' } ] return render(request,'teamdeleteconfirm.html', { 'teams':get_my_teams(request.user), 'team':t, 'myteams':myteams, 'memberteams':memberteams, 'otherteams':otherteams, 'active':'nav-teams', }) @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def team_delete_view(request,id): r = getrower(request.user) try: t = Team.objects.get(id=id) except Team.DoesNotExist: raise Http404("This team doesn't exist") if t.manager != request.user: raise PermissionDenied("You are not allowed to delete this team") teams.remove_team(t.id) url = reverse(rower_teams_view) response = HttpResponseRedirect(url) return response @user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None) def team_members_stats_view(request,id): r = getrower(request.user) try: t = Team.objects.get(id=id) except Team.DoesNotExist: raise Http404("This team doesn't exist") if t.manager != request.user: raise PermissionDenied("You are not allowed to see this page") members = Rower.objects.filter(team=t).order_by("user__last_name","user__first_name") theusers = [member.user for member in members] myteams, memberteams, otherteams = get_teams(request) breadcrumbs = [ { 'url':reverse(rower_teams_view), 'name': 'Teams' }, { 'url':reverse(team_view,kwargs={'id':id}), 'name': t.name }, { 'url':reverse(team_members_stats_view,kwargs={'id':id}), 'name': 'Members Stats' } ] response = render(request,'teamstats.html', { 'teams':get_my_teams(request.user), 'myteams':myteams, 'memberteams':memberteams, 'otherteams':otherteams, 'active':'nav-teams', 'breadcrumbs':breadcrumbs, 'team':t, 'theusers':theusers, }) return response