confirmation emails
This commit is contained in:
105
rowers/tasks.py
105
rowers/tasks.py
@@ -270,7 +270,7 @@ def handle_sendemail_invite(email,name,code,teamname,manager):
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
@app.task
|
@app.task
|
||||||
def handle_sendemail_request(email,name,code,teamname,requestor):
|
def handle_sendemail_request(email,name,code,teamname,requestor,id):
|
||||||
fullemail = name+' <'+email+'>'
|
fullemail = name+' <'+email+'>'
|
||||||
subject = 'Request to join team '+teamname
|
subject = 'Request to join team '+teamname
|
||||||
message = 'Dear '+name+',\n\n'
|
message = 'Dear '+name+',\n\n'
|
||||||
@@ -278,6 +278,8 @@ def handle_sendemail_request(email,name,code,teamname,requestor):
|
|||||||
message += ' on rowsandall.com\n\n'
|
message += ' on rowsandall.com\n\n'
|
||||||
message += 'Click the direct link to accept: \n'
|
message += 'Click the direct link to accept: \n'
|
||||||
message += 'https://rowsandall.com/rowers/me/request/'+code+' \n\n'
|
message += 'https://rowsandall.com/rowers/me/request/'+code+' \n\n'
|
||||||
|
message += 'Click the following link to reject the request: \n'
|
||||||
|
message += 'https://rowsandall.com/rowers/me/request/'+id+' \n\n'
|
||||||
message += 'You can find all pending requests on your team management page:\n'
|
message += 'You can find all pending requests on your team management page:\n'
|
||||||
message += 'https://rowsandall.com/rowers/me/teams\n\n'
|
message += 'https://rowsandall.com/rowers/me/teams\n\n'
|
||||||
message += "Best Regards, the Rowsandall Team"
|
message += "Best Regards, the Rowsandall Team"
|
||||||
@@ -291,6 +293,107 @@ def handle_sendemail_request(email,name,code,teamname,requestor):
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_request_accept(email,name,teamname,managername):
|
||||||
|
fullemail = name+' <'+email+'>'
|
||||||
|
subject = 'Welcome to '+teamname
|
||||||
|
message = 'Dear '+name+',\n\n'
|
||||||
|
message += managername
|
||||||
|
message += ' has accepted your request to be part of the team '
|
||||||
|
message += teamname
|
||||||
|
message += '\n\n'
|
||||||
|
message += "Best Regards, the Rowsandall Team"
|
||||||
|
|
||||||
|
email = EmailMessage(subject, message,
|
||||||
|
'Rowsandall <info@rowsandall.com>',
|
||||||
|
[fullemail])
|
||||||
|
|
||||||
|
|
||||||
|
res = email.send()
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_request_reject(email,name,teamname,managername):
|
||||||
|
fullemail = name+' <'+email+'>'
|
||||||
|
subject = 'Your application to '+teamname+' was rejected'
|
||||||
|
message = 'Dear '+name+',\n\n'
|
||||||
|
message += 'Unfortunately, '
|
||||||
|
message += managername
|
||||||
|
message += ' has rejected your request to be part of the team '
|
||||||
|
message += teamname
|
||||||
|
message += '\n\n'
|
||||||
|
message += "Best Regards, the Rowsandall Team"
|
||||||
|
|
||||||
|
email = EmailMessage(subject, message,
|
||||||
|
'Rowsandall <info@rowsandall.com>',
|
||||||
|
[fullemail])
|
||||||
|
|
||||||
|
|
||||||
|
res = email.send()
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_member_dropped(email,name,teamname,managername):
|
||||||
|
fullemail = name+' <'+email+'>'
|
||||||
|
subject = 'You were removed from '+teamname
|
||||||
|
message = 'Dear '+name+',\n\n'
|
||||||
|
message += 'Unfortunately, '
|
||||||
|
message += managername
|
||||||
|
message += ' has removed you from the team '
|
||||||
|
message += teamname
|
||||||
|
message += '\n\n'
|
||||||
|
message += "Best Regards, the Rowsandall Team"
|
||||||
|
|
||||||
|
email = EmailMessage(subject, message,
|
||||||
|
'Rowsandall <info@rowsandall.com>',
|
||||||
|
[fullemail])
|
||||||
|
|
||||||
|
|
||||||
|
res = email.send()
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_invite_reject(email,name,teamname,managername):
|
||||||
|
fullemail = managername+' <'+email+'>'
|
||||||
|
subject = 'Your invitation to '+name+' was rejected'
|
||||||
|
message = 'Dear '+managername+',\n\n'
|
||||||
|
message += 'Unfortunately, '
|
||||||
|
message += name
|
||||||
|
message += ' has rejected your invitation to be part of the team '
|
||||||
|
message += teamname
|
||||||
|
message += '\n\n'
|
||||||
|
message += "Best Regards, the Rowsandall Team"
|
||||||
|
|
||||||
|
email = EmailMessage(subject, message,
|
||||||
|
'Rowsandall <info@rowsandall.com>',
|
||||||
|
[fullemail])
|
||||||
|
|
||||||
|
|
||||||
|
res = email.send()
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_invite_accept(email,name,teamname,managername):
|
||||||
|
fullemail = managername+' <'+email+'>'
|
||||||
|
subject = 'Your invitation to '+name+' was accepted'
|
||||||
|
message = 'Dear '+managername+',\n\n'
|
||||||
|
message += name+' has accepted your invitation to be part of the team '+teamname+'\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_remove_workouts_team(ws,t):
|
def handle_remove_workouts_team(ws,t):
|
||||||
for w in ws:
|
for w in ws:
|
||||||
|
|||||||
108
rowers/teams.py
108
rowers/teams.py
@@ -20,7 +20,10 @@ from rowers.models import (
|
|||||||
|
|
||||||
from rowers.tasks import (
|
from rowers.tasks import (
|
||||||
handle_remove_workouts_team,handle_sendemail_invite,
|
handle_remove_workouts_team,handle_sendemail_invite,
|
||||||
handle_add_workouts_team,handle_sendemail_request
|
handle_add_workouts_team,handle_sendemail_request,
|
||||||
|
handle_sendemail_member_dropped,handle_sendemail_request_accept,
|
||||||
|
handle_sendemail_request_reject,handle_sendemail_invite_reject,
|
||||||
|
handle_sendemail_invite_accept,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Low level functions - to be called by higher level methods
|
# Low level functions - to be called by higher level methods
|
||||||
@@ -91,6 +94,7 @@ def mgr_remove_member(id,manager,rower):
|
|||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
if t.manager == manager:
|
if t.manager == manager:
|
||||||
remove_member(id,rower)
|
remove_member(id,rower)
|
||||||
|
send_email_member_dropped(id,rower)
|
||||||
return (id,'Member removed')
|
return (id,'Member removed')
|
||||||
else:
|
else:
|
||||||
return (0,'You are not the team manager')
|
return (0,'You are not the team manager')
|
||||||
@@ -144,6 +148,8 @@ def create_request(team,user):
|
|||||||
rekwest = TeamRequest(team=team,user=u,code=code)
|
rekwest = TeamRequest(team=team,user=u,code=code)
|
||||||
rekwest.save()
|
rekwest.save()
|
||||||
|
|
||||||
|
send_request_email(rekwest)
|
||||||
|
|
||||||
return (rekwest.id,'The request was created')
|
return (rekwest.id,'The request was created')
|
||||||
else:
|
else:
|
||||||
return (0,'That team has reached its maximum number of members')
|
return (0,'That team has reached its maximum number of members')
|
||||||
@@ -214,6 +220,7 @@ def reject_request(manager,id):
|
|||||||
return (0,'The request is invalid')
|
return (0,'The request is invalid')
|
||||||
|
|
||||||
if rekwest.team.manager==manager:
|
if rekwest.team.manager==manager:
|
||||||
|
send_request_reject_email(rekwest)
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
return (1,'Request rejected')
|
return (1,'Request rejected')
|
||||||
else:
|
else:
|
||||||
@@ -227,6 +234,7 @@ def reject_invitation(user,id):
|
|||||||
return (0,'The invitation is invalid')
|
return (0,'The invitation is invalid')
|
||||||
|
|
||||||
if invite.user==user:
|
if invite.user==user:
|
||||||
|
send_invite_reject_email(invite)
|
||||||
invite.delete()
|
invite.delete()
|
||||||
return (1,'Invitation rejected')
|
return (1,'Invitation rejected')
|
||||||
else:
|
else:
|
||||||
@@ -254,11 +262,99 @@ def send_invite_email(id):
|
|||||||
|
|
||||||
return (1,'Invitation email sent')
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
def send_email_member_dropped(teamid,rower):
|
||||||
|
t = Team.objects.get(id=teamid)
|
||||||
|
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
|
||||||
|
|
||||||
def send_request_email(id):
|
if settings.DEBUG:
|
||||||
rekwest = TeamInvite.objects.get(id=id)
|
res = handle_sendemail_member_dropped.delay(email,name,teamname,manager)
|
||||||
|
else:
|
||||||
|
res = queuehigh.enqueue(handle_sendemail_member_dropped,
|
||||||
|
email,name,teamname,manager)
|
||||||
|
|
||||||
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
|
||||||
|
def send_request_accept_email(rekwest):
|
||||||
|
id = rekwest.id
|
||||||
|
email = rekwest.user.email
|
||||||
|
teamname = rekwest.team.name
|
||||||
|
name = rekwest.user.first_name+' '+rekwest.user.last_name
|
||||||
|
manager = rekwest.team.manager.first_name+' '+rekwest.team.manager.last_name
|
||||||
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
res = handle_sendemail_request_accept.delay(email,name,teamname,manager)
|
||||||
|
else:
|
||||||
|
res = queuehigh.enqueue(handle_sendemail_request_accept,
|
||||||
|
email,name,teamname,manager)
|
||||||
|
|
||||||
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
|
||||||
|
def send_request_reject_email(rekwest):
|
||||||
|
id = rekwest.id
|
||||||
|
teamname = rekwest.team.name
|
||||||
|
email = rekwest.user.email
|
||||||
|
name = rekwest.user.first_name+' '+rekwest.user.last_name
|
||||||
|
manager = rekwest.team.manager.first_name+' '+rekwest.team.manager.last_name
|
||||||
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
res = handle_sendemail_request_reject.delay(email,name,teamname,manager)
|
||||||
|
else:
|
||||||
|
res = queuehigh.enqueue(handle_sendemail_request_reject,
|
||||||
|
email,name,teamname,manager)
|
||||||
|
|
||||||
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
|
||||||
|
def send_invite_reject_email(invitation):
|
||||||
|
id = invitation.id
|
||||||
|
email = invitation.team.manager.email
|
||||||
|
if invitation.user:
|
||||||
|
name = invitation.user.first_name+' '+invitation.user.last_name
|
||||||
|
else:
|
||||||
|
name = invitation.email
|
||||||
|
|
||||||
|
teamname = invitation.team.name
|
||||||
|
manager = invitation.team.manager.first_name+' '+invitation.team.manager.last_name
|
||||||
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
res = handle_sendemail_invite_reject.delay(email,name,teamname,manager)
|
||||||
|
else:
|
||||||
|
res = queuehigh.enqueue(handle_sendemail_invite_reject,
|
||||||
|
email,name,teamname,manager)
|
||||||
|
|
||||||
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
|
||||||
|
def send_invite_accept_email(invitation):
|
||||||
|
id = invitation.id
|
||||||
|
email = invitation.team.manager.email
|
||||||
|
if invitation.user:
|
||||||
|
name = invitation.user.first_name+' '+invitation.user.last_name
|
||||||
|
else:
|
||||||
|
name = invitation.email
|
||||||
|
|
||||||
|
teamname = invitation.team.name
|
||||||
|
manager = invitation.team.manager.first_name+' '+invitation.team.manager.last_name
|
||||||
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
res = handle_sendemail_invite_accept.delay(email,name,teamname,manager)
|
||||||
|
else:
|
||||||
|
res = queuehigh.enqueue(handle_sendemail_invite_accept,
|
||||||
|
email,name,teamname,manager)
|
||||||
|
|
||||||
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def send_request_email(rekwest):
|
||||||
email = rekwest.team.manager.email
|
email = rekwest.team.manager.email
|
||||||
|
id = rekwest.id
|
||||||
name = rekwest.team.manager.first_name + " " + rekwest.team.manager.last_name
|
name = rekwest.team.manager.first_name + " " + rekwest.team.manager.last_name
|
||||||
code = rekwest.code
|
code = rekwest.code
|
||||||
teamname = rekwest.team.name
|
teamname = rekwest.team.name
|
||||||
@@ -266,10 +362,10 @@ def send_request_email(id):
|
|||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
res = handle_sendemail_request.delay(email,name,code,teamname,
|
res = handle_sendemail_request.delay(email,name,code,teamname,
|
||||||
requestor)
|
requestor,id)
|
||||||
else:
|
else:
|
||||||
res = queuehigh.enqueue(handle_sendemail_request,
|
res = queuehigh.enqueue(handle_sendemail_request,
|
||||||
email,name,code,teamname,requestor)
|
email,name,code,teamname,requestor,id)
|
||||||
|
|
||||||
return (1,'Invitation email sent')
|
return (1,'Invitation email sent')
|
||||||
|
|
||||||
@@ -288,6 +384,7 @@ def process_request_code(manager,code):
|
|||||||
return (0,'You are not the manager of this team')
|
return (0,'You are not the manager of this team')
|
||||||
|
|
||||||
result = add_member(t.id,r)
|
result = add_member(t.id,r)
|
||||||
|
send_request_accept_email(rekwest)
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@@ -306,6 +403,7 @@ def process_invite_code(user,code):
|
|||||||
|
|
||||||
t = invitation.team
|
t = invitation.team
|
||||||
result = add_member(t.id,r)
|
result = add_member(t.id,r)
|
||||||
|
send_invite_accept_email(invitation.id)
|
||||||
invitation.delete()
|
invitation.delete()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
@@ -23,16 +23,22 @@
|
|||||||
<div class="grid_6 alpha">
|
<div class="grid_6 alpha">
|
||||||
<p>
|
<p>
|
||||||
<h2>Members</h2>
|
<h2>Members</h2>
|
||||||
<table width="100%" class="listtable">
|
<table width="70%" class="listtable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
<th> </th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for member in members %}
|
{% for member in members %}
|
||||||
<tr>
|
<tr>
|
||||||
<td> {{ member.user.first_name }} {{ member.user.last_name }}</td>
|
<td> {{ member.user.first_name }} {{ member.user.last_name }}</td>
|
||||||
|
{% if team.manager == user %}
|
||||||
|
<td><a class="button red small" href="/rowers/me/team/{{ team.id }}/drop/{{ member.user.id }}">Drop</a></td>
|
||||||
|
{% else %}
|
||||||
|
<td> </td>
|
||||||
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -213,6 +213,7 @@ urlpatterns = [
|
|||||||
url(r'^team/(\d+)/requestmembership/(\d+)$',views.team_requestmembership_view),
|
url(r'^team/(\d+)/requestmembership/(\d+)$',views.team_requestmembership_view),
|
||||||
url(r'^team/(\d+)/delete/$',views.team_delete_view),
|
url(r'^team/(\d+)/delete/$',views.team_delete_view),
|
||||||
url(r'^team/create/$',views.team_create_view),
|
url(r'^team/create/$',views.team_create_view),
|
||||||
|
url(r'^me/team/(\d+)/drop/(\d+)$',views.manager_member_drop_view),
|
||||||
url(r'^me/invitation/(\d+)/reject$',views.invitation_reject_view),
|
url(r'^me/invitation/(\d+)/reject$',views.invitation_reject_view),
|
||||||
url(r'^me/invitation/c/(?P<message>\w+.*)/$',views.rower_invitations_view),
|
url(r'^me/invitation/c/(?P<message>\w+.*)/$',views.rower_invitations_view),
|
||||||
url(r'^me/invitation/$',views.rower_invitations_view),
|
url(r'^me/invitation/$',views.rower_invitations_view),
|
||||||
|
|||||||
@@ -5391,6 +5391,24 @@ def rower_teams_view(request,message='',successmessage=''):
|
|||||||
'message':message,
|
'message':message,
|
||||||
'successmessage':successmessage,
|
'successmessage':successmessage,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@user_passes_test(iscoachmember,login_url="/",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:
|
||||||
|
successmessage = text
|
||||||
|
url = reverse(rower_teams_view,kwargs={
|
||||||
|
'successmessage':successmessage
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
message = text
|
||||||
|
url = reverse(rower_teams_view,kwargs={
|
||||||
|
'message':message
|
||||||
|
})
|
||||||
|
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
|
@user_passes_test(iscoachmember,login_url="/",redirect_field_name=None)
|
||||||
def manager_requests_view(request,code=None,message='',successmessage=''):
|
def manager_requests_view(request,code=None,message='',successmessage=''):
|
||||||
|
|||||||
Reference in New Issue
Block a user