team edit
This commit is contained in:
@@ -355,6 +355,28 @@ def handle_sendemail_member_dropped(email,name,teamname,managername):
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_team_removed(email,name,teamname,managername):
|
||||||
|
fullemail = name+' <'+email+'>'
|
||||||
|
subject = 'Team '+teamname+' was deleted'
|
||||||
|
message = 'Dear '+name+',\n\n'
|
||||||
|
message += managername
|
||||||
|
message += ' has decided to delete the team '
|
||||||
|
message += teamname
|
||||||
|
message += '\n\n'
|
||||||
|
message += 'The '+teamname+' tag has been removed from all your '
|
||||||
|
message += 'workouts on rowsandall.com.\n\n'
|
||||||
|
message += "Best Regards, the Rowsandall Team"
|
||||||
|
|
||||||
|
email = EmailMessage(subject, message,
|
||||||
|
'Rowsandall <info@rowsandall.com>',
|
||||||
|
[fullemail])
|
||||||
|
|
||||||
|
|
||||||
|
res = email.send()
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
@app.task
|
@app.task
|
||||||
def handle_sendemail_invite_reject(email,name,teamname,managername):
|
def handle_sendemail_invite_reject(email,name,teamname,managername):
|
||||||
fullemail = managername+' <'+email+'>'
|
fullemail = managername+' <'+email+'>'
|
||||||
|
|||||||
@@ -23,13 +23,24 @@ from rowers.tasks import (
|
|||||||
handle_add_workouts_team,handle_sendemail_request,
|
handle_add_workouts_team,handle_sendemail_request,
|
||||||
handle_sendemail_member_dropped,handle_sendemail_request_accept,
|
handle_sendemail_member_dropped,handle_sendemail_request_accept,
|
||||||
handle_sendemail_request_reject,handle_sendemail_invite_reject,
|
handle_sendemail_request_reject,handle_sendemail_invite_reject,
|
||||||
handle_sendemail_invite_accept,
|
handle_sendemail_invite_accept,handle_sendemail_team_removed,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Low level functions - to be called by higher level methods
|
# Low level functions - to be called by higher level methods
|
||||||
|
|
||||||
inviteduration = 14 # days
|
inviteduration = 14 # days
|
||||||
|
|
||||||
|
def update_team(t,name,manager,private,notes):
|
||||||
|
try:
|
||||||
|
t.name = name
|
||||||
|
t.manager = manager
|
||||||
|
t.private = private
|
||||||
|
t.notes = notes
|
||||||
|
t.save()
|
||||||
|
except IntegrityError:
|
||||||
|
return (0,'Team name duplication')
|
||||||
|
return (1,'Team Updated')
|
||||||
|
|
||||||
def create_team(name,manager,private='open',notes=''):
|
def create_team(name,manager,private='open',notes=''):
|
||||||
# needs some error testing
|
# needs some error testing
|
||||||
try:
|
try:
|
||||||
@@ -44,6 +55,8 @@ def create_team(name,manager,private='open',notes=''):
|
|||||||
|
|
||||||
def remove_team(id):
|
def remove_team(id):
|
||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
|
for r in Rower.objects.filter(team=t):
|
||||||
|
send_team_delete_mail(t,r)
|
||||||
return t.delete()
|
return t.delete()
|
||||||
|
|
||||||
def set_teamplanexpires(rower):
|
def set_teamplanexpires(rower):
|
||||||
@@ -272,6 +285,20 @@ def send_invite_email(id):
|
|||||||
|
|
||||||
return (1,'Invitation email sent')
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
def send_team_delete_mail(t,rower):
|
||||||
|
u = rower.user
|
||||||
|
teamname = t.name
|
||||||
|
email = u.email
|
||||||
|
name = u.first_name+' '+u.last_name
|
||||||
|
manager = t.manager.first_name+' '+t.manager.last_name
|
||||||
|
if settings.DEBUG:
|
||||||
|
res = handle_sendemail_team_removed.delay(email,name,teamname,manager)
|
||||||
|
else:
|
||||||
|
res = queuehigh.enqueue(handle_sendemail_team_removed,
|
||||||
|
email,name,teamname,manager)
|
||||||
|
|
||||||
|
return (1,'Team delete email sent')
|
||||||
|
|
||||||
def send_email_member_dropped(teamid,rower):
|
def send_email_member_dropped(teamid,rower):
|
||||||
t = Team.objects.get(id=teamid)
|
t = Team.objects.get(id=teamid)
|
||||||
u = rower.user
|
u = rower.user
|
||||||
@@ -286,7 +313,7 @@ def send_email_member_dropped(teamid,rower):
|
|||||||
res = queuehigh.enqueue(handle_sendemail_member_dropped,
|
res = queuehigh.enqueue(handle_sendemail_member_dropped,
|
||||||
email,name,teamname,manager)
|
email,name,teamname,manager)
|
||||||
|
|
||||||
return (1,'Invitation email sent')
|
return (1,'Member dropped email sent')
|
||||||
|
|
||||||
|
|
||||||
def send_request_accept_email(rekwest):
|
def send_request_accept_email(rekwest):
|
||||||
|
|||||||
@@ -8,11 +8,20 @@
|
|||||||
<p>{{ team.notes }}</p>
|
<p>{{ team.notes }}</p>
|
||||||
<p><b>Manager:</b> {{ team.manager.first_name }} {{ team.manager.last_name }}</p>
|
<p><b>Manager:</b> {{ team.manager.first_name }} {{ team.manager.last_name }}</p>
|
||||||
{% if ismember %}
|
{% if ismember %}
|
||||||
<div class="grid_2 suffix_10 alpha">
|
<div class="grid_2 alpha">
|
||||||
<a class="button red small" href="/rowers/team/{{ team.id }}/leaveconfirm">Leave this team</a>
|
<a class="button red small" href="/rowers/team/{{ team.id }}/leaveconfirm">Leave this team</a>
|
||||||
</div>
|
</div>
|
||||||
|
{% if team.manager == user %}
|
||||||
|
<div class="grid_2 suffix_8 omega">
|
||||||
|
<a class="button blue small" href="/rowers/team/{{ team.id }}/edit">Edit Team</a>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="grid_2 suffix_8 omega">
|
||||||
|
<p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% elif hasrequested %}
|
{% elif hasrequested %}
|
||||||
<p>You have requested access to this team</p>
|
<p>You have requested access to this team</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="grid_2 suffix_10 alpha tooltip">
|
<div class="grid_2 suffix_10 alpha tooltip">
|
||||||
<a class="button green small" href="/rowers/team/{{ team.id }}/requestmembership/{{ user.id }}">Join</a>
|
<a class="button green small" href="/rowers/team/{{ team.id }}/requestmembership/{{ user.id }}">Join</a>
|
||||||
|
|||||||
28
rowers/templates/teamedit.html
Normal file
28
rowers/templates/teamedit.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
|
||||||
|
{% block title %}New Team{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form enctype="multipart/form-data" action="{{ formloc }}" method="post">
|
||||||
|
<div id="left" class="grid_6 alpha">
|
||||||
|
<h1>Edit Team {{ team.name }}</h1>
|
||||||
|
{% if form.errors %}
|
||||||
|
<p style="color: red;">
|
||||||
|
Please correct the error{{ form.errors|pluralize }} below.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<table>
|
||||||
|
{{ form.as_table }}
|
||||||
|
</table>
|
||||||
|
{% csrf_token %}
|
||||||
|
<div id="formbutton" class="grid_1 prefix_4 suffix_1">
|
||||||
|
<input class="button green" type="submit" value="Submit">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
@@ -207,6 +207,7 @@ urlpatterns = [
|
|||||||
url(r'^team/(?P<id>\d+)/c/(?P<message>\w+.*)$',views.team_view),
|
url(r'^team/(?P<id>\d+)/c/(?P<message>\w+.*)$',views.team_view),
|
||||||
url(r'^team/(?P<id>\d+)/s/(?P<successmessage>\w+.*)$',views.team_view),
|
url(r'^team/(?P<id>\d+)/s/(?P<successmessage>\w+.*)$',views.team_view),
|
||||||
url(r'^team/(\d+)/$',views.team_view),
|
url(r'^team/(\d+)/$',views.team_view),
|
||||||
|
url(r'^team/(\d+)/edit$',views.team_edit_view),
|
||||||
url(r'^team/(\d+)/leaveconfirm/$',views.team_leaveconfirm_view),
|
url(r'^team/(\d+)/leaveconfirm/$',views.team_leaveconfirm_view),
|
||||||
url(r'^team/(\d+)/leave/$',views.team_leave_view),
|
url(r'^team/(\d+)/leave/$',views.team_leave_view),
|
||||||
url(r'^team/(\d+)/deleteconfirm/$',views.team_deleteconfirm_view),
|
url(r'^team/(\d+)/deleteconfirm/$',views.team_deleteconfirm_view),
|
||||||
|
|||||||
@@ -5541,6 +5541,48 @@ def rower_invitations_view(request,code=None,message='',successmessage=''):
|
|||||||
url = reverse(rower_teams_view,kwargs={
|
url = reverse(rower_teams_view,kwargs={
|
||||||
})
|
})
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
|
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
|
||||||
|
def team_edit_view(request,id=0):
|
||||||
|
try:
|
||||||
|
t = Team.objects.get(id=id)
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
return HttpResponse("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']
|
||||||
|
res,message=teams.update_team(t,name,manager,private,notes)
|
||||||
|
if res:
|
||||||
|
url = reverse(team_view,
|
||||||
|
kwargs={
|
||||||
|
'id':id,
|
||||||
|
'successmessage':message
|
||||||
|
}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
url = reverse(team_view,
|
||||||
|
kwargs={
|
||||||
|
'id':id,
|
||||||
|
'message':message
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
response = HttpResponseRedirect(url)
|
||||||
|
return response
|
||||||
|
|
||||||
|
else:
|
||||||
|
teamcreateform = TeamForm(instance=t)
|
||||||
|
|
||||||
|
return render(request,'teamedit.html',
|
||||||
|
{
|
||||||
|
'form':teamcreateform,
|
||||||
|
'team':t,
|
||||||
})
|
})
|
||||||
|
|
||||||
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
|
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
|
||||||
|
|||||||
Reference in New Issue
Block a user