537 lines
16 KiB
Python
537 lines
16 KiB
Python
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
|