added requests, revoke and reject buttons
This commit is contained in:
121
rowers/teams.py
121
rowers/teams.py
@@ -15,12 +15,12 @@ queuelow = django_rq.get_queue('low')
|
||||
queuehigh = django_rq.get_queue('low')
|
||||
|
||||
from rowers.models import (
|
||||
Rower, Workout, Team, TeamInvite,User
|
||||
Rower, Workout, Team, TeamInvite,User,TeamRequest
|
||||
)
|
||||
|
||||
from rowers.tasks import (
|
||||
handle_remove_workouts_team,handle_sendemail_invite,
|
||||
handle_add_workouts_team
|
||||
handle_add_workouts_team,handle_sendemail_request
|
||||
)
|
||||
|
||||
# Low level functions - to be called by higher level methods
|
||||
@@ -127,6 +127,29 @@ def get_team_workouts(id):
|
||||
|
||||
# Medium level functionality
|
||||
|
||||
def create_request(team,user):
|
||||
r2 = Rower.objects.get(user=user)
|
||||
r = Rower.objects.get(user=team.manager)
|
||||
if r2 in Rower.objects.filter(team=team):
|
||||
return (0,'Already a member of that team')
|
||||
|
||||
if count_club_members(team.manager)+count_invites(team.manager) < r.clubsize:
|
||||
codes = [i.code for i in TeamRequest.objects.all()]
|
||||
code = uuid.uuid4().hex[:10].upper()
|
||||
# prevent duplicates
|
||||
while code in codes:
|
||||
code = uuid.uuid4().hex[:10].upper()
|
||||
|
||||
u = User.objects.get(id=user)
|
||||
rekwest = TeamRequest(team=team,user=u,code=code)
|
||||
rekwest.save()
|
||||
|
||||
return (rekwest.id,'The request was created')
|
||||
else:
|
||||
return (0,'That team has reached its maximum number of members')
|
||||
|
||||
return (0,'Something went wrong in create_request')
|
||||
|
||||
def create_invite(team,manager,user=None,email=''):
|
||||
r = Rower.objects.get(user=manager)
|
||||
if team.manager != manager:
|
||||
@@ -158,11 +181,56 @@ def create_invite(team,manager,user=None,email=''):
|
||||
|
||||
return (0,'Nothing done')
|
||||
|
||||
def revoke_invite(id):
|
||||
invitation = TeamInvite.objects.get(id=id)
|
||||
invitation.delete()
|
||||
def revoke_request(user,id):
|
||||
try:
|
||||
rekwest = TeamRequest.objects.get(id=id)
|
||||
except TeamRequest.DoesNotExist:
|
||||
return (0,'The request is invalid')
|
||||
|
||||
return (1,'Invitation revoked')
|
||||
t = rekwest.team
|
||||
|
||||
if rekwest.user==user:
|
||||
rekwest.delete()
|
||||
return (1,'Request revoked')
|
||||
else:
|
||||
return (0,'You are not the requestor')
|
||||
|
||||
def revoke_invite(manager,id):
|
||||
try:
|
||||
invite = TeamInvite.objects.get(id=id)
|
||||
except TeamInvite.DoesNotExist:
|
||||
return (0,'The invitation is invalid')
|
||||
|
||||
if invite.team.manager==manager:
|
||||
invite.delete()
|
||||
return (1,'Invitation revoked')
|
||||
else:
|
||||
return (0,'You are not the team manager')
|
||||
|
||||
def reject_request(manager,id):
|
||||
try:
|
||||
rekwest = TeamRequest.objects.get(id=id)
|
||||
except TeamRequest.DoesNotExist:
|
||||
return (0,'The request is invalid')
|
||||
|
||||
if rekwest.team.manager==manager:
|
||||
rekwest.delete()
|
||||
return (1,'Request rejected')
|
||||
else:
|
||||
return (0,'You are not the manager for this request')
|
||||
|
||||
|
||||
def reject_invitation(user,id):
|
||||
try:
|
||||
invite = TeamInvite.objects.get(id=id)
|
||||
except TeamInvite.DoesNotExist:
|
||||
return (0,'The invitation is invalid')
|
||||
|
||||
if invite.user==user:
|
||||
invite.delete()
|
||||
return (1,'Invitation rejected')
|
||||
else:
|
||||
return (0,'This request was not for you')
|
||||
|
||||
|
||||
def send_invite_email(id):
|
||||
@@ -186,6 +254,43 @@ def send_invite_email(id):
|
||||
|
||||
return (1,'Invitation email sent')
|
||||
|
||||
|
||||
def send_request_email(id):
|
||||
rekwest = TeamInvite.objects.get(id=id)
|
||||
|
||||
email = rekwest.team.manager.email
|
||||
name = rekwest.team.manager.first_name + " " + rekwest.team.manager.last_name
|
||||
code = rekwest.code
|
||||
teamname = rekwest.team.name
|
||||
requestor = rekwest.user.first_name+' '+rekwest.user.last_name
|
||||
|
||||
if settings.DEBUG:
|
||||
res = handle_sendemail_request.delay(email,name,code,teamname,
|
||||
requestor)
|
||||
else:
|
||||
res = queuehigh.enqueue(handle_sendemail_request,
|
||||
email,name,code,teamname,requestor)
|
||||
|
||||
return (1,'Invitation email sent')
|
||||
|
||||
def process_request_code(manager,code):
|
||||
code = code.upper()
|
||||
|
||||
try:
|
||||
rekwest = TeamRequest.objects.get(code=code)
|
||||
except TeamRequest.DoesNotExist:
|
||||
return (0,'The request has been revoked or the code is invalid')
|
||||
|
||||
r = Rower.objects.get(user=rekwest.user)
|
||||
t = rekwest.team
|
||||
|
||||
if rekwest.team.manager != manager:
|
||||
return (0,'You are not the manager of this team')
|
||||
|
||||
result = add_member(t.id,r)
|
||||
rekwest.delete()
|
||||
return result
|
||||
|
||||
def process_invite_code(user,code):
|
||||
code = code.upper()
|
||||
try:
|
||||
@@ -196,7 +301,7 @@ def process_invite_code(user,code):
|
||||
r = Rower.objects.get(user=user)
|
||||
nu = datetime.date(timezone.now())
|
||||
if nu > invitation.issuedate+timedelta(days=inviteduration):
|
||||
revoke_invite(invitation.id)
|
||||
revoke_invite(invitation.team.manager,invitation.id)
|
||||
return (0,'The invitation has expired')
|
||||
|
||||
t = invitation.team
|
||||
@@ -209,6 +314,6 @@ def remove_expired_invites():
|
||||
issuedate = datetime.date(issuedate)
|
||||
invitations = TeamInvite.objects.filter(issuedate__lt=issuedate)
|
||||
for i in invitations:
|
||||
revoke_invite(i.id)
|
||||
revoke_invite(i.team.manager,i.id)
|
||||
|
||||
return (1,'Expired invitations deleted')
|
||||
|
||||
Reference in New Issue
Block a user