medium level and account page
This commit is contained in:
@@ -8,12 +8,16 @@ import time
|
||||
from django.db import IntegrityError
|
||||
import uuid
|
||||
|
||||
from rowers.tasks import handle_sendemail_invite
|
||||
|
||||
from rowers.models import (
|
||||
Rower, Workout, Team, TeamInvite,User
|
||||
)
|
||||
|
||||
# Low level functions - to be called by higher level methods
|
||||
|
||||
inviteduration = 14 # days
|
||||
|
||||
def create_team(name,manager,notes=''):
|
||||
# needs some error testing
|
||||
try:
|
||||
@@ -32,23 +36,41 @@ def remove_team(id):
|
||||
def add_member(id,rower):
|
||||
t= Team.objects.get(id=id)
|
||||
rower.team.add(t)
|
||||
# code to add all workouts
|
||||
ws = Workout.objects.filter(user=rower)
|
||||
for w in ws:
|
||||
w.team.add(t)
|
||||
|
||||
return (1,'Member added')
|
||||
|
||||
def remove_member(id,rower):
|
||||
t = Team.objects.get(id=id)
|
||||
rower.team.remove(t)
|
||||
# remove the team from rower's workouts:
|
||||
ws = Workout.objects.filter(user=rower)
|
||||
for w in ws:
|
||||
w.team.remove(t)
|
||||
|
||||
return (1,'Member removed')
|
||||
|
||||
def mgr_remove_member(id,manager,rower):
|
||||
t = Team.objects.get(id=id)
|
||||
if t.manager == manager:
|
||||
rower.team.remove(t)
|
||||
return (1,'Member added')
|
||||
remove_member(id,rower)
|
||||
return (1,'Member removed')
|
||||
else:
|
||||
return (0,'You are not the team manager')
|
||||
|
||||
return 0
|
||||
|
||||
def count_invites(manager):
|
||||
ts = Team.objects.filter(manager=manager)
|
||||
count = 0
|
||||
for t in ts:
|
||||
count += TeamInvite.objects.filter(team=t).count()
|
||||
|
||||
return count
|
||||
|
||||
def count_members(id):
|
||||
t = Team.objects.get(id=id)
|
||||
return Rower.objects.filter(team=t).count()
|
||||
@@ -65,9 +87,14 @@ def get_team_members(id):
|
||||
t = Team.objects.get(id=id)
|
||||
return Rower.objects.filter(team=t)
|
||||
|
||||
def get_team_workouts(id):
|
||||
t = Team.objects.get(id=id)
|
||||
return Workout.objects.filter(team=t).order_by("-date", "-starttime")
|
||||
|
||||
# Medium level functionality
|
||||
|
||||
def create_invite(team,manager,user=None):
|
||||
r = Rower.objects.get(user=manager)
|
||||
if team.manager != manager:
|
||||
return (0,'Not the team manager')
|
||||
if user:
|
||||
@@ -77,7 +104,7 @@ def create_invite(team,manager,user=None):
|
||||
return (0,'Rower does not exist')
|
||||
if r2 in Rower.objects.filter(team=team):
|
||||
return (0,'Already member of that team')
|
||||
if count_club_members(team.manager) < r.clubsize:
|
||||
if count_club_members(team.manager)+count_invites(team.manager) < r.clubsize:
|
||||
codes = [i.code for i in TeamInvite.objects.all()]
|
||||
code = uuid.uuid4().hex[:10].upper()
|
||||
# prevent duplicates
|
||||
@@ -86,10 +113,63 @@ def create_invite(team,manager,user=None):
|
||||
|
||||
invite = TeamInvite(team=team,code=code,user=user)
|
||||
invite.save()
|
||||
return code
|
||||
return (invite.id,'Invitation created')
|
||||
|
||||
|
||||
else:
|
||||
return (0,'You are at your club size limit')
|
||||
|
||||
return (0,'Nothing done')
|
||||
|
||||
def revoke_invite(id):
|
||||
invitation = TeamInvite.objects.get(id=id)
|
||||
invitation.delete()
|
||||
|
||||
return (1,'Invitation revoked')
|
||||
|
||||
def send_invite_email(id):
|
||||
invitation = TeamInvite.objects.get(id=id)
|
||||
if invitation.user:
|
||||
email = invitation.user.email
|
||||
name = invitation.user.first_name + " " + invitation.user.last_name
|
||||
else:
|
||||
email = invitation.email
|
||||
|
||||
code = invitation.code
|
||||
teamname = invitation.team.name
|
||||
manager = invitation.team.manager.first_name+' '+invitation.team.manager.last_name
|
||||
|
||||
if settings.DEBUG:
|
||||
res = handle_sendemail_invite(email,name,code,teamname,manager)
|
||||
else:
|
||||
res = queue.enqueue(handle_sendemail_invite(email,name,code,
|
||||
teamname,
|
||||
manager))
|
||||
|
||||
return (1,'Invitation email sent')
|
||||
|
||||
def process_invite_code(user,code):
|
||||
try:
|
||||
invitation = TeamInvite.objects.get(code=code)
|
||||
except TeamInvite.DoesNotExist:
|
||||
return (0,'The invitation has expired or the code is invalid')
|
||||
|
||||
r = Rower.objects.get(user=user)
|
||||
nu = datetime.date(timezone.now())
|
||||
if nu > invitation.issuedate+timedelta(days=inviteduration):
|
||||
revoke_invite(invitation.id)
|
||||
return (0,'The invitation has expired')
|
||||
|
||||
t = invitation.team
|
||||
result = add_member(t.id,r)
|
||||
invitation.delete()
|
||||
return result
|
||||
|
||||
def remove_expired_invites():
|
||||
issuedate = timezone.now()-timedelta(days=inviteduration)
|
||||
issuedate = datetime.date(issuedate)
|
||||
invitations = TeamInvite.objects.filter(issuedate__lt=issuedate)
|
||||
for i in invitations:
|
||||
revoke_invite(i.id)
|
||||
|
||||
return (1,'Expired invitations deleted')
|
||||
|
||||
Reference in New Issue
Block a user