diff --git a/rowers/tasks.py b/rowers/tasks.py index ce12988d..eb68297f 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -270,7 +270,7 @@ def handle_sendemail_invite(email,name,code,teamname,manager): return 1 @app.task -def handle_sendemail_request(email,name,code,teamname,requestor): +def handle_sendemail_request(email,name,code,teamname,requestor,id): fullemail = name+' <'+email+'>' subject = 'Request to join team '+teamname 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 += 'Click the direct link to accept: \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 += 'https://rowsandall.com/rowers/me/teams\n\n' message += "Best Regards, the Rowsandall Team" @@ -291,6 +293,107 @@ def handle_sendemail_request(email,name,code,teamname,requestor): 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 ', + [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 ', + [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 ', + [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 ', + [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 ', + [fullemail]) + + + res = email.send() + + return 1 + + @app.task def handle_remove_workouts_team(ws,t): for w in ws: diff --git a/rowers/teams.py b/rowers/teams.py index 9a1eabd0..e5fea1ec 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -20,7 +20,10 @@ from rowers.models import ( from rowers.tasks import ( 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 @@ -91,6 +94,7 @@ def mgr_remove_member(id,manager,rower): t = Team.objects.get(id=id) if t.manager == manager: remove_member(id,rower) + send_email_member_dropped(id,rower) return (id,'Member removed') else: 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.save() + send_request_email(rekwest) + return (rekwest.id,'The request was created') else: 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') if rekwest.team.manager==manager: + send_request_reject_email(rekwest) rekwest.delete() return (1,'Request rejected') else: @@ -227,6 +234,7 @@ def reject_invitation(user,id): return (0,'The invitation is invalid') if invite.user==user: + send_invite_reject_email(invite) invite.delete() return (1,'Invitation rejected') else: @@ -254,11 +262,99 @@ def send_invite_email(id): 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): - rekwest = TeamInvite.objects.get(id=id) + if settings.DEBUG: + 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 + id = rekwest.id name = rekwest.team.manager.first_name + " " + rekwest.team.manager.last_name code = rekwest.code teamname = rekwest.team.name @@ -266,10 +362,10 @@ def send_request_email(id): if settings.DEBUG: res = handle_sendemail_request.delay(email,name,code,teamname, - requestor) + requestor,id) else: res = queuehigh.enqueue(handle_sendemail_request, - email,name,code,teamname,requestor) + email,name,code,teamname,requestor,id) 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') result = add_member(t.id,r) + send_request_accept_email(rekwest) rekwest.delete() return result @@ -306,6 +403,7 @@ def process_invite_code(user,code): t = invitation.team result = add_member(t.id,r) + send_invite_accept_email(invitation.id) invitation.delete() return result diff --git a/rowers/templates/team.html b/rowers/templates/team.html index d5aaa22f..c5676b92 100644 --- a/rowers/templates/team.html +++ b/rowers/templates/team.html @@ -23,16 +23,22 @@

Members

- +
+ {% for member in members %} + {% if team.manager == user %} + + {% else %} + + {% endif %} {% endfor %} diff --git a/rowers/urls.py b/rowers/urls.py index 0b4c64f1..4ef85712 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -213,6 +213,7 @@ urlpatterns = [ 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/team/(\d+)/drop/(\d+)$',views.manager_member_drop_view), url(r'^me/invitation/(\d+)/reject$',views.invitation_reject_view), url(r'^me/invitation/c/(?P\w+.*)/$',views.rower_invitations_view), url(r'^me/invitation/$',views.rower_invitations_view), diff --git a/rowers/views.py b/rowers/views.py index 6f3af867..3cf0192f 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5391,6 +5391,24 @@ def rower_teams_view(request,message='',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) def manager_requests_view(request,code=None,message='',successmessage=''): if code:
Name 
{{ member.user.first_name }} {{ member.user.last_name }}Drop