From 97b6212161a4489b0da99f62ffd066066d04b797 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 11 Feb 2017 08:18:48 +0100 Subject: [PATCH] team edit --- rowers/tasks.py | 22 +++++++++++++++++ rowers/teams.py | 31 ++++++++++++++++++++++-- rowers/templates/team.html | 13 ++++++++-- rowers/templates/teamedit.html | 28 ++++++++++++++++++++++ rowers/urls.py | 1 + rowers/views.py | 44 +++++++++++++++++++++++++++++++++- 6 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 rowers/templates/teamedit.html diff --git a/rowers/tasks.py b/rowers/tasks.py index b69a44c7..18024c0a 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -355,6 +355,28 @@ def handle_sendemail_member_dropped(email,name,teamname,managername): 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 ', + [fullemail]) + + + res = email.send() + + return 1 + @app.task def handle_sendemail_invite_reject(email,name,teamname,managername): fullemail = managername+' <'+email+'>' diff --git a/rowers/teams.py b/rowers/teams.py index 8531e037..4ebc24e1 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -23,13 +23,24 @@ from rowers.tasks import ( 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, + handle_sendemail_invite_accept,handle_sendemail_team_removed, ) # Low level functions - to be called by higher level methods 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=''): # needs some error testing try: @@ -44,6 +55,8 @@ def create_team(name,manager,private='open',notes=''): def remove_team(id): t = Team.objects.get(id=id) + for r in Rower.objects.filter(team=t): + send_team_delete_mail(t,r) return t.delete() def set_teamplanexpires(rower): @@ -272,6 +285,20 @@ def send_invite_email(id): 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): t = Team.objects.get(id=teamid) u = rower.user @@ -286,7 +313,7 @@ def send_email_member_dropped(teamid,rower): res = queuehigh.enqueue(handle_sendemail_member_dropped, email,name,teamname,manager) - return (1,'Invitation email sent') + return (1,'Member dropped email sent') def send_request_accept_email(rekwest): diff --git a/rowers/templates/team.html b/rowers/templates/team.html index c5676b92..7315fe48 100644 --- a/rowers/templates/team.html +++ b/rowers/templates/team.html @@ -8,11 +8,20 @@

{{ team.notes }}

Manager: {{ team.manager.first_name }} {{ team.manager.last_name }}

{% if ismember %} -
+ + {% if team.manager == user %} +
+ Edit Team +
+ {% else %} +
+

  +

+ {% endif %} {% elif hasrequested %} -

You have requested access to this team

+

You have requested access to this team

{% else %}
Join diff --git a/rowers/templates/teamedit.html b/rowers/templates/teamedit.html new file mode 100644 index 00000000..4d037b22 --- /dev/null +++ b/rowers/templates/teamedit.html @@ -0,0 +1,28 @@ +{% extends "base.html" %} +{% load staticfiles %} + +{% block title %}New Team{% endblock %} + +{% block content %} +
+
+

Edit Team {{ team.name }}

+ {% if form.errors %} +

+ Please correct the error{{ form.errors|pluralize }} below. +

+ {% endif %} + + + {{ form.as_table }} +
+ {% csrf_token %} +
+ +
+
+ + + +
+{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 91fa0155..2ee4b855 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -207,6 +207,7 @@ urlpatterns = [ url(r'^team/(?P\d+)/c/(?P\w+.*)$',views.team_view), url(r'^team/(?P\d+)/s/(?P\w+.*)$',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+)/leave/$',views.team_leave_view), url(r'^team/(\d+)/deleteconfirm/$',views.team_deleteconfirm_view), diff --git a/rowers/views.py b/rowers/views.py index b2a0671e..7cee538d 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5541,7 +5541,49 @@ def rower_invitations_view(request,code=None,message='',successmessage=''): }) 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) def team_create_view(request): if request.method == 'POST':