list workouts for team members
This commit is contained in:
@@ -279,7 +279,7 @@ def handle_sendemail_request(email,name,code,teamname,requestor,id):
|
|||||||
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 += 'Click the following link to reject the request: \n'
|
||||||
message += 'https://rowsandall.com/rowers/me/request/'+id+' \n\n'
|
message += 'https://rowsandall.com/rowers/me/request/'+str(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"
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
<div class="grid_12">
|
<div class="grid_12">
|
||||||
<h1>Forbidden</h1>
|
<h1>Forbidden</h1>
|
||||||
<p>
|
<p>
|
||||||
Access forbidden
|
Access forbidden. You probably tried to access functionality on a workout
|
||||||
|
or chart that is not owned by you.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,11 @@
|
|||||||
receive stroke
|
receive stroke
|
||||||
data from the site directly.</p>
|
data from the site directly.</p>
|
||||||
|
|
||||||
<p>The REST API is a work in progress. </p>
|
<p>The REST API is a work in progress. We are open to improvement
|
||||||
|
suggestions (provided they don't break existing apps). Please send
|
||||||
|
email to <a href="mailto:info@rowsandall.com">info@rowsandall.com</a>
|
||||||
|
with questions and/or suggestions. We
|
||||||
|
will get back to you as soon as possible.</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Advantages
|
<li>Advantages
|
||||||
|
|||||||
@@ -10,7 +10,11 @@
|
|||||||
Select start and end date for a date range:
|
Select start and end date for a date range:
|
||||||
<div class="grid_4 alpha">
|
<div class="grid_4 alpha">
|
||||||
|
|
||||||
|
{% if team %}
|
||||||
|
<form enctype="multipart/form-data" action="/rowers/list-workouts/team/{{ team.id }}/" method="post">
|
||||||
|
{% else %}
|
||||||
<form enctype="multipart/form-data" action="/rowers/list-workouts/" method="post">
|
<form enctype="multipart/form-data" action="/rowers/list-workouts/" method="post">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
{{ dateform.as_table }}
|
{{ dateform.as_table }}
|
||||||
@@ -24,7 +28,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid_8 alpha">
|
<div class="grid_8 alpha">
|
||||||
|
{% if team %}
|
||||||
|
<h3>{{ team.name }} Team Workouts</h3>
|
||||||
|
{% else %}
|
||||||
<h3>My Workouts</h3>
|
<h3>My Workouts</h3>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if workouts %}
|
{% if workouts %}
|
||||||
<table width="100%" class="listtable">
|
<table width="100%" class="listtable">
|
||||||
@@ -38,8 +46,14 @@
|
|||||||
<th> Duration </th>
|
<th> Duration </th>
|
||||||
<th> Avg HR </th>
|
<th> Avg HR </th>
|
||||||
<th> Max HR </th>
|
<th> Max HR </th>
|
||||||
|
{% if not team %}
|
||||||
<th> Delete</th>
|
<th> Delete</th>
|
||||||
<th> Export</th>
|
<th> Export</th>
|
||||||
|
{% else %}
|
||||||
|
<th colspan="2">
|
||||||
|
Owner
|
||||||
|
</th>
|
||||||
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -48,18 +62,36 @@
|
|||||||
<td> {{ workout.date |truncatechars:15}} </td>
|
<td> {{ workout.date |truncatechars:15}} </td>
|
||||||
<td> {{ workout.starttime }} </td>
|
<td> {{ workout.starttime }} </td>
|
||||||
<td>
|
<td>
|
||||||
|
{% if workout.user.user == user %}
|
||||||
{% if workout.name != '' %}
|
{% if workout.name != '' %}
|
||||||
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td>
|
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="/rowers/workout/{{ workout.id }}/edit">No Name</a> </td>
|
<a href="/rowers/workout/{{ workout.id }}/edit">No Name</a> </td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if workout.name != '' %}
|
||||||
|
<a href="/rowers/workout/{{ workout.id }}/">{{ workout.name }}</a> </td>
|
||||||
|
{% else %}
|
||||||
|
<a href="/rowers/workout/{{ workout.id }}/">No Name</a> </td>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
<td> {{ workout.workouttype }} </td>
|
<td> {{ workout.workouttype }} </td>
|
||||||
<td> {{ workout.distance }}m</td>
|
<td> {{ workout.distance }}m</td>
|
||||||
<td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
<td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||||
<td> {{ workout.averagehr }} </td>
|
<td> {{ workout.averagehr }} </td>
|
||||||
<td> {{ workout.maxhr }} </td>
|
<td> {{ workout.maxhr }} </td>
|
||||||
<td> <a class="button red small" href="/rowers/workout/{{ workout.id }}/deleteconfirm">Delete</td>
|
{% if not team %}
|
||||||
<td> <a class="button blue small" href="/rowers/workout/{{ workout.id }}/export">Export</a> </td>
|
<td>
|
||||||
|
<a class="button red small" href="/rowers/workout/{{ workout.id }}/deleteconfirm">Delete
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
|
||||||
|
</td>
|
||||||
|
{% else %}
|
||||||
|
<td colspan="2">
|
||||||
|
{{ workout.user.user.first_name }} {{ workout.user.user.last_name }}
|
||||||
|
</td>
|
||||||
|
{% endif %}
|
||||||
<td> <a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">Flex</a> </td>
|
<td> <a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">Flex</a> </td>
|
||||||
|
|
||||||
|
|
||||||
@@ -106,8 +138,13 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="grid_5 alpha">
|
<div class="grid_5 alpha">
|
||||||
|
{% if team %}
|
||||||
|
<form id="searchform" action="/rowers/list-workouts/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||||
|
method="get" accept-charset="utf-8">
|
||||||
|
{% else %}
|
||||||
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||||
method="get" accept-charset="utf-8">
|
method="get" accept-charset="utf-8">
|
||||||
|
{% endif %}
|
||||||
<div class="grid_3 prefix_1 alpha">
|
<div class="grid_3 prefix_1 alpha">
|
||||||
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ urlpatterns = [
|
|||||||
url(r'^list-workouts/c/(?P<message>\w+.*)/$',views.workouts_view),
|
url(r'^list-workouts/c/(?P<message>\w+.*)/$',views.workouts_view),
|
||||||
url(r'^list-workouts/s/(?P<successmessage>\w+.*)/$',views.workouts_view),
|
url(r'^list-workouts/s/(?P<successmessage>\w+.*)/$',views.workouts_view),
|
||||||
url(r'^list-workouts/c/(?P<message>\w+.*)/s/(?P<successmessage>\w+.*)$',views.workouts_view),
|
url(r'^list-workouts/c/(?P<message>\w+.*)/s/(?P<successmessage>\w+.*)$',views.workouts_view),
|
||||||
|
url(r'^list-workouts/team/(?P<teamid>\d+)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.workouts_view),
|
||||||
|
url(r'^list-workouts/team/(?P<teamid>\d+)/$',views.workouts_view),
|
||||||
url(r'^list-workouts/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.workouts_view),
|
url(r'^list-workouts/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.workouts_view),
|
||||||
url(r'^list-workouts/$',views.workouts_view),
|
url(r'^list-workouts/$',views.workouts_view),
|
||||||
url(r'^list-graphs/$',views.graphs_view),
|
url(r'^list-graphs/$',views.graphs_view),
|
||||||
|
|||||||
226
rowers/views.py
226
rowers/views.py
@@ -14,6 +14,7 @@ from django.http import (
|
|||||||
from django.contrib.auth import authenticate, login, logout
|
from django.contrib.auth import authenticate, login, logout
|
||||||
from rowers.forms import LoginForm,DocumentsForm,UploadOptionsForm
|
from rowers.forms import LoginForm,DocumentsForm,UploadOptionsForm
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -1889,79 +1890,94 @@ def workout_recalcsummary_view(request,id=0):
|
|||||||
def workouts_view(request,message='',successmessage='',
|
def workouts_view(request,message='',successmessage='',
|
||||||
startdatestring="",enddatestring="",
|
startdatestring="",enddatestring="",
|
||||||
startdate=timezone.now()-datetime.timedelta(days=365),
|
startdate=timezone.now()-datetime.timedelta(days=365),
|
||||||
enddate=timezone.now()+datetime.timedelta(days=1)):
|
enddate=timezone.now()+datetime.timedelta(days=1),
|
||||||
|
teamid=0):
|
||||||
try:
|
try:
|
||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
|
except Rower.DoesNotExist:
|
||||||
|
raise Http404("Rower doesn't exist")
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
dateform = DateRangeForm(request.POST)
|
dateform = DateRangeForm(request.POST)
|
||||||
if dateform.is_valid():
|
if dateform.is_valid():
|
||||||
startdate = dateform.cleaned_data['startdate']
|
startdate = dateform.cleaned_data['startdate']
|
||||||
enddate = dateform.cleaned_data['enddate']
|
enddate = dateform.cleaned_data['enddate']
|
||||||
else:
|
else:
|
||||||
dateform = DateRangeForm(initial={
|
dateform = DateRangeForm(initial={
|
||||||
'startdate':startdate,
|
'startdate':startdate,
|
||||||
'enddate':enddate,
|
'enddate':enddate,
|
||||||
})
|
})
|
||||||
|
|
||||||
startdate = datetime.datetime.combine(startdate,datetime.time())
|
startdate = datetime.datetime.combine(startdate,datetime.time())
|
||||||
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
|
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
|
||||||
enddate = enddate+datetime.timedelta(days=1)
|
enddate = enddate+datetime.timedelta(days=1)
|
||||||
|
|
||||||
if startdatestring:
|
if startdatestring:
|
||||||
startdate = iso8601.parse_date(startdatestring)
|
startdate = iso8601.parse_date(startdatestring)
|
||||||
if enddatestring:
|
if enddatestring:
|
||||||
enddate = iso8601.parse_date(enddatestring)
|
enddate = iso8601.parse_date(enddatestring)
|
||||||
|
|
||||||
if enddate < startdate:
|
if enddate < startdate:
|
||||||
s = enddate
|
s = enddate
|
||||||
enddate = startdate
|
enddate = startdate
|
||||||
startdate = s
|
startdate = s
|
||||||
|
|
||||||
|
if teamid:
|
||||||
|
try:
|
||||||
|
theteam = Team.objects.get(id=teamid)
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
raise Http404("Team doesn't exist")
|
||||||
|
|
||||||
workouts = Workout.objects.filter(user=r,
|
workouts = Workout.objects.filter(team=theteam,
|
||||||
startdatetime__gte=startdate,
|
startdatetime__gte=startdate,
|
||||||
startdatetime__lte=enddate).order_by("-date", "-starttime")
|
startdatetime__lte=enddate).order_by("-date", "-starttime")
|
||||||
|
|
||||||
query = request.GET.get('q')
|
|
||||||
if query:
|
|
||||||
query_list = query.split()
|
|
||||||
workouts = workouts.filter(
|
|
||||||
reduce(operator.and_,
|
|
||||||
(Q(name__icontains=q) for q in query_list)) |
|
|
||||||
reduce(operator.and_,
|
|
||||||
(Q(notes__icontains=q) for q in query_list))
|
|
||||||
)
|
|
||||||
|
|
||||||
paginator = Paginator(workouts,20) # show 25 workouts per page
|
else:
|
||||||
page = request.GET.get('page')
|
theteam = None
|
||||||
|
workouts = Workout.objects.filter(user=r,
|
||||||
|
startdatetime__gte=startdate,
|
||||||
|
startdatetime__lte=enddate).order_by("-date", "-starttime")
|
||||||
|
|
||||||
try:
|
query = request.GET.get('q')
|
||||||
workouts = paginator.page(page)
|
if query:
|
||||||
except PageNotAnInteger:
|
query_list = query.split()
|
||||||
workouts = paginator.page(1)
|
workouts = workouts.filter(
|
||||||
except EmptyPage:
|
reduce(operator.and_,
|
||||||
workouts = paginator.page(paginator.num_pages)
|
(Q(name__icontains=q) for q in query_list)) |
|
||||||
|
reduce(operator.and_,
|
||||||
|
(Q(notes__icontains=q) for q in query_list))
|
||||||
|
)
|
||||||
|
|
||||||
today = timezone.now()
|
paginator = Paginator(workouts,20) # show 25 workouts per page
|
||||||
announcements = SiteAnnouncement.objects.filter(
|
page = request.GET.get('page')
|
||||||
expires__gte=today
|
|
||||||
).order_by(
|
try:
|
||||||
"-created",
|
workouts = paginator.page(page)
|
||||||
"-id"
|
except PageNotAnInteger:
|
||||||
)
|
workouts = paginator.page(1)
|
||||||
|
except EmptyPage:
|
||||||
|
workouts = paginator.page(paginator.num_pages)
|
||||||
|
|
||||||
|
today = timezone.now()
|
||||||
|
announcements = SiteAnnouncement.objects.filter(
|
||||||
|
expires__gte=today
|
||||||
|
).order_by(
|
||||||
|
"-created",
|
||||||
|
"-id"
|
||||||
|
)
|
||||||
|
|
||||||
|
return render(request, 'list_workouts.html',
|
||||||
|
{'workouts': workouts,
|
||||||
|
'message': message,
|
||||||
|
'successmessage':successmessage,
|
||||||
|
'dateform':dateform,
|
||||||
|
'startdate':startdate,
|
||||||
|
'enddate':enddate,
|
||||||
|
'announcements':announcements[0:4],
|
||||||
|
'team':theteam,
|
||||||
|
})
|
||||||
|
|
||||||
return render(request, 'list_workouts.html',
|
|
||||||
{'workouts': workouts,
|
|
||||||
'message': message,
|
|
||||||
'successmessage':successmessage,
|
|
||||||
'dateform':dateform,
|
|
||||||
'startdate':startdate,
|
|
||||||
'enddate':enddate,
|
|
||||||
'announcements':announcements[0:4],
|
|
||||||
})
|
|
||||||
except Rower.DoesNotExist:
|
|
||||||
return HttpResponse("User has no rower instance")
|
|
||||||
|
|
||||||
# List of workouts to compare a selected workout to
|
# List of workouts to compare a selected workout to
|
||||||
@user_passes_test(ispromember,login_url="/",redirect_field_name=None)
|
@user_passes_test(ispromember,login_url="/",redirect_field_name=None)
|
||||||
@@ -2040,7 +2056,7 @@ def workout_comparison_list(request,id=0,message='',successmessage='',
|
|||||||
'enddate':enddate,
|
'enddate':enddate,
|
||||||
})
|
})
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
return HttpResponse("User has no rower instance")
|
raise Http404("User has no rower instance")
|
||||||
|
|
||||||
# Basic 'EDIT' view of workout
|
# Basic 'EDIT' view of workout
|
||||||
def workout_view(request,id=0):
|
def workout_view(request,id=0):
|
||||||
@@ -3384,7 +3400,7 @@ def workout_add_otw_powerplot_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -3441,7 +3457,7 @@ def workout_add_piechart_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -3499,7 +3515,7 @@ def workout_add_power_piechart_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -3555,7 +3571,7 @@ def workout_add_timeplot_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -3612,7 +3628,7 @@ def workout_add_distanceplot_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -3667,7 +3683,7 @@ def workout_add_distanceplot2_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -3724,7 +3740,7 @@ def workout_add_timeplot2_view(request,id):
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,w)==False):
|
if (checkworkoutuser(request.user,w)==False):
|
||||||
raise PermissionDenied("You are not allowed add plots to this workout")
|
raise PermissionDenied("You are not allowed add plots to this workout")
|
||||||
else:
|
else:
|
||||||
f1 = w.csvfilename[6:-4]
|
f1 = w.csvfilename[6:-4]
|
||||||
@@ -4261,7 +4277,7 @@ def workout_delete_confirm_view(request, id=0):
|
|||||||
def workout_delete_confirm_view(request, id=0):
|
def workout_delete_confirm_view(request, id=0):
|
||||||
try:
|
try:
|
||||||
row = Workout.objects.get(id=id)
|
row = Workout.objects.get(id=id)
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
if (checkworkoutuser(request.user,row)==False):
|
||||||
raise PermissionDenied("You are not allowed to delete this workout")
|
raise PermissionDenied("You are not allowed to delete this workout")
|
||||||
else:
|
else:
|
||||||
return render(request,'workout_delete_confirm.html',
|
return render(request,'workout_delete_confirm.html',
|
||||||
@@ -4276,7 +4292,7 @@ def workout_delete_view(request,id=0):
|
|||||||
def workout_delete_view(request,id=0):
|
def workout_delete_view(request,id=0):
|
||||||
try:
|
try:
|
||||||
row = Workout.objects.get(id=id)
|
row = Workout.objects.get(id=id)
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
if (checkworkoutuser(request.user,row)==False):
|
||||||
raise PermissionDenied("You are not allowed to delete this workout")
|
raise PermissionDenied("You are not allowed to delete this workout")
|
||||||
else:
|
else:
|
||||||
# files are removed by pre-delete in models.py
|
# files are removed by pre-delete in models.py
|
||||||
@@ -4297,7 +4313,7 @@ def graph_delete_confirm_view(request, id=0):
|
|||||||
try:
|
try:
|
||||||
img = GraphImage.objects.get(id=id)
|
img = GraphImage.objects.get(id=id)
|
||||||
row = Workout.objects.get(id=img.workout.id)
|
row = Workout.objects.get(id=img.workout.id)
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
if (checkworkoutuser(request.user,row)==False):
|
||||||
raise PermissionDenied("You are not allowed to delete this workout")
|
raise PermissionDenied("You are not allowed to delete this workout")
|
||||||
else:
|
else:
|
||||||
return render(request,'graphimage_delete_confirm.html',
|
return render(request,'graphimage_delete_confirm.html',
|
||||||
@@ -4315,7 +4331,7 @@ def graph_delete_view(request,id=0):
|
|||||||
try:
|
try:
|
||||||
img = GraphImage.objects.get(id=id)
|
img = GraphImage.objects.get(id=id)
|
||||||
row = Workout.objects.get(id=img.workout.id)
|
row = Workout.objects.get(id=img.workout.id)
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
if (checkworkoutuser(request.user,row)==False):
|
||||||
raise PermissionDenied("You are not allowed to delete this graph")
|
raise PermissionDenied("You are not allowed to delete this graph")
|
||||||
else:
|
else:
|
||||||
img.delete()
|
img.delete()
|
||||||
@@ -4328,7 +4344,8 @@ def graph_delete_view(request,id=0):
|
|||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
except GraphImage.DoesNotExist:
|
except GraphImage.DoesNotExist:
|
||||||
raise Http404("Graph Image doesn't exist")
|
raise Http404("Graph Image doesn't exist")
|
||||||
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
|
|
||||||
# A page with all the recent graphs (searchable on workout name)
|
# A page with all the recent graphs (searchable on workout name)
|
||||||
@@ -4355,7 +4372,7 @@ def graphs_view(request):
|
|||||||
return render(request, 'list_graphs.html',
|
return render(request, 'list_graphs.html',
|
||||||
{'graphs1': g[0:5],
|
{'graphs1': g[0:5],
|
||||||
'graphs2': g[5:10]})
|
'graphs2': g[5:10]})
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
raise Http404("User has no rower instance")
|
raise Http404("User has no rower instance")
|
||||||
|
|
||||||
# Show the chart (png image)
|
# Show the chart (png image)
|
||||||
@@ -4380,7 +4397,7 @@ def workout_summary_restore_view(request,id,message="",successmessage=""):
|
|||||||
def workout_summary_restore_view(request,id,message="",successmessage=""):
|
def workout_summary_restore_view(request,id,message="",successmessage=""):
|
||||||
try:
|
try:
|
||||||
row = Workout.objects.get(id=id)
|
row = Workout.objects.get(id=id)
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
if (checkworkoutuser(request.user,row)==False):
|
||||||
raise PermissionDenied("You are not allowed to edit this workout")
|
raise PermissionDenied("You are not allowed to edit this workout")
|
||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
@@ -4400,7 +4417,7 @@ def workout_summary_restore_view(request,id,message="",successmessage=""):
|
|||||||
hrtr=r.tr,hran=r.an,ftp=r.ftp,
|
hrtr=r.tr,hran=r.an,ftp=r.ftp,
|
||||||
powerperc=powerperc,powerzones=r.powerzones)
|
powerperc=powerperc,powerzones=r.powerzones)
|
||||||
rowdata = rdata(f1,rower=rr)
|
rowdata = rdata(f1,rower=rr)
|
||||||
if rowdata == 0:
|
if rowdata == 0:
|
||||||
raise Http404("Error: CSV Data File Not Found")
|
raise Http404("Error: CSV Data File Not Found")
|
||||||
rowdata.restoreintervaldata()
|
rowdata.restoreintervaldata()
|
||||||
rowdata.write_csv(f1,gzip=True)
|
rowdata.write_csv(f1,gzip=True)
|
||||||
@@ -4435,7 +4452,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
row = Workout.objects.get(id=id)
|
row = Workout.objects.get(id=id)
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
if (checkworkoutuser(request.user,row)==False):
|
||||||
raise PermissionDenied("You are not allowed to edit this workout")
|
raise PermissionDenied("You are not allowed to edit this workout")
|
||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
raise Http404("Workout doesn't exist")
|
raise Http404("Workout doesn't exist")
|
||||||
@@ -4926,30 +4943,33 @@ def rower_edit_view(request,message=""):
|
|||||||
'grants':grants,
|
'grants':grants,
|
||||||
'rower':r,
|
'rower':r,
|
||||||
})
|
})
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
raise Http404("This user doesn't exist")
|
raise Http404("This user doesn't exist")
|
||||||
|
|
||||||
# Revoke an app that you granted access through the API.
|
# Revoke an app that you granted access through the API.
|
||||||
# this views is called when you press a button on the User edit page
|
# this views is called when you press a button on the User edit page
|
||||||
# the button is only there when you have granted access to an app
|
# the button is only there when you have granted access to an app
|
||||||
@login_required()
|
@login_required()
|
||||||
def rower_revokeapp_view(request,id=0):
|
def rower_revokeapp_view(request,id=0):
|
||||||
tokens = AccessToken.objects.filter(user=request.user,application=id)
|
try:
|
||||||
refreshtokens = AccessToken.objects.filter(user=request.user,application=id)
|
tokens = AccessToken.objects.filter(user=request.user,application=id)
|
||||||
for token in tokens:
|
refreshtokens = AccessToken.objects.filter(user=request.user,application=id)
|
||||||
token.revoke()
|
for token in tokens:
|
||||||
for token in refreshtokens:
|
token.revoke()
|
||||||
|
for token in refreshtokens:
|
||||||
token.revoke()
|
token.revoke()
|
||||||
|
|
||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
form = RowerForm(instance=r)
|
form = RowerForm(instance=r)
|
||||||
powerform = RowerPowerForm(instance=r)
|
powerform = RowerPowerForm(instance=r)
|
||||||
grants = AccessToken.objects.filter(user=request.user)
|
grants = AccessToken.objects.filter(user=request.user)
|
||||||
return render(request, 'rower_form.html',
|
return render(request, 'rower_form.html',
|
||||||
{
|
{
|
||||||
'form':form,
|
'form':form,
|
||||||
'powerform':powerform,
|
'powerform':powerform,
|
||||||
'grants':grants,
|
'grants':grants,
|
||||||
|
})
|
||||||
|
except AccessToken.DoesNotExist:
|
||||||
raise Http404("Access token doesn't exist")
|
raise Http404("Access token doesn't exist")
|
||||||
|
|
||||||
|
|
||||||
@@ -5131,12 +5151,10 @@ def team_view(request,id=0,message='',successmessage=''):
|
|||||||
hasrequested = 0
|
hasrequested = 0
|
||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
myteams = Team.objects.filter(manager=request.user)
|
myteams = Team.objects.filter(manager=request.user)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
except Team.DoesNotExist:
|
except Team.DoesNotExist:
|
||||||
raise Http404("Team doesn't exist")
|
raise Http404("Team doesn't exist")
|
||||||
|
|
||||||
|
|
||||||
@@ -5187,7 +5205,7 @@ def team_leaveconfirm_view(request,id=0):
|
|||||||
def team_leaveconfirm_view(request,id=0):
|
def team_leaveconfirm_view(request,id=0):
|
||||||
try:
|
try:
|
||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
except Team.DoesNotExist:
|
except Team.DoesNotExist:
|
||||||
raise Http404("Team doesn't exist")
|
raise Http404("Team doesn't exist")
|
||||||
|
|
||||||
return render(request,'teamleaveconfirm.html',
|
return render(request,'teamleaveconfirm.html',
|
||||||
@@ -5297,7 +5315,11 @@ def manager_requests_view(request,code=None,message='',successmessage=''):
|
|||||||
|
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def team_requestmembership_view(request,teamid,userid):
|
def team_requestmembership_view(request,teamid,userid):
|
||||||
|
try:
|
||||||
|
t = Team.objects.get(id=teamid)
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
raise Http404("Team doesn't exist")
|
||||||
|
|
||||||
res,text = teams.create_request(t,userid)
|
res,text = teams.create_request(t,userid)
|
||||||
if res:
|
if res:
|
||||||
@@ -5397,7 +5419,7 @@ def team_edit_view(request,id=0):
|
|||||||
def team_edit_view(request,id=0):
|
def team_edit_view(request,id=0):
|
||||||
try:
|
try:
|
||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
except Team.DoesNotExist:
|
except Team.DoesNotExist:
|
||||||
raise Http404("Team does not exist")
|
raise Http404("Team does not exist")
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@@ -5464,9 +5486,9 @@ def team_deleteconfirm_view(request,id):
|
|||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
try:
|
try:
|
||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
except Team.DoesNotExist:
|
except Team.DoesNotExist:
|
||||||
raise Http404("This team doesn't exist")
|
raise Http404("This team doesn't exist")
|
||||||
if t.manager != request.user:
|
if t.manager != request.user:
|
||||||
raise PermissionDenied("You are not allowed to delete this team")
|
raise PermissionDenied("You are not allowed to delete this team")
|
||||||
|
|
||||||
return render(request,'teamdeleteconfirm.html',
|
return render(request,'teamdeleteconfirm.html',
|
||||||
@@ -5479,9 +5501,9 @@ def team_delete_view(request,id):
|
|||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
try:
|
try:
|
||||||
t = Team.objects.get(id=id)
|
t = Team.objects.get(id=id)
|
||||||
except Team.DoesNotExist:
|
except Team.DoesNotExist:
|
||||||
raise Http404("This team doesn't exist")
|
raise Http404("This team doesn't exist")
|
||||||
if t.manager != request.user:
|
if t.manager != request.user:
|
||||||
raise PermissionDenied("You are not allowed to delete this team")
|
raise PermissionDenied("You are not allowed to delete this team")
|
||||||
|
|
||||||
teams.remove_team(t.id)
|
teams.remove_team(t.id)
|
||||||
|
|||||||
Reference in New Issue
Block a user