Initial version of workout choice field
This commit is contained in:
@@ -252,3 +252,7 @@ class StatsOptionsForm(forms.Form):
|
|||||||
paddle = forms.BooleanField(initial=False,required=False)
|
paddle = forms.BooleanField(initial=False,required=False)
|
||||||
snow = forms.BooleanField(initial=False,required=False)
|
snow = forms.BooleanField(initial=False,required=False)
|
||||||
other = forms.BooleanField(initial=False,required=False)
|
other = forms.BooleanField(initial=False,required=False)
|
||||||
|
|
||||||
|
class WorkoutMultipleCompareForm(forms.Form):
|
||||||
|
workouts = forms.ModelMultipleChoiceField(queryset=Workout.objects.all(),
|
||||||
|
widget=forms.CheckboxSelectMultiple())
|
||||||
|
|||||||
@@ -398,17 +398,23 @@ class Workout(models.Model):
|
|||||||
privacy = models.CharField(default='visible',max_length=30,
|
privacy = models.CharField(default='visible',max_length=30,
|
||||||
choices=privacychoices)
|
choices=privacychoices)
|
||||||
|
|
||||||
def __str__(self):
|
def __unicode__(self):
|
||||||
|
|
||||||
date = self.date
|
date = self.date
|
||||||
name = self.name
|
name = self.name
|
||||||
|
distance = str(self.distance)
|
||||||
|
ownerfirst = self.user.user.first_name
|
||||||
|
ownerlast = self.user.user.last_name
|
||||||
|
duration = self.duration
|
||||||
|
|
||||||
try:
|
stri = u'{d}_{n}_{dist}m_{duration:%H:%M:%S}_{ownerfirst}_{ownerlast}'.format(
|
||||||
stri = date.strftime('%Y-%m-%d')+'_'+name
|
d = date.strftime('%Y-%m-%d'),
|
||||||
except AttributeError:
|
n = name,
|
||||||
stri = str(date)+'_'+name
|
dist = distance,
|
||||||
|
duration = duration,
|
||||||
|
ownerfirst = ownerfirst,
|
||||||
|
ownerlast = ownerlast,
|
||||||
|
)
|
||||||
|
|
||||||
return stri
|
return stri
|
||||||
|
|
||||||
@@ -890,7 +896,7 @@ class WorkoutComment(models.Model):
|
|||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'Comment to: {w} by {u1} {u2}'.format(
|
return u'Comment to: {w} by {u1} {u2}'.format(
|
||||||
w=self.workout.name,
|
w=self.workout,
|
||||||
u1 = self.user.first_name,
|
u1 = self.user.first_name,
|
||||||
u2 = self.user.last_name,
|
u2 = self.user.last_name,
|
||||||
)
|
)
|
||||||
|
|||||||
95
rowers/templates/team_compare_select.html
Normal file
95
rowers/templates/team_compare_select.html
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% load rowerfilters %}
|
||||||
|
|
||||||
|
{% block title %}Workouts{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
setTimeout("location.reload(true);",60000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid_12">
|
||||||
|
|
||||||
|
Select start and end date for a date range:
|
||||||
|
<div class="grid_4 alpha">
|
||||||
|
|
||||||
|
{% if team %}
|
||||||
|
<form enctype="multipart/form-data" action="/rowers/team-compare-select/team/{{ team.id }}/" method="post">
|
||||||
|
{% else %}
|
||||||
|
<form enctype="multipart/form-data" action="/rowers/team-compare-select/" method="post">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<table>
|
||||||
|
{{ dateform.as_table }}
|
||||||
|
</table>
|
||||||
|
{% csrf_token %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2">
|
||||||
|
<input name='daterange' class="button green" type="submit" value="Submit"> </form>
|
||||||
|
</div>
|
||||||
|
<div class="grid_5 prefix_1 omega">
|
||||||
|
{% if team %}
|
||||||
|
<form id="searchform" action="/rowers/team-compare-select/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/team-compare-select/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||||
|
method="get" accept-charset="utf-8">
|
||||||
|
{% endif %}
|
||||||
|
<div class="grid_3 prefix_1 alpha">
|
||||||
|
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 omega">
|
||||||
|
<button class="button blue small" type="submit">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="workouts_table" class="grid_8 alpha">
|
||||||
|
{% if team %}
|
||||||
|
<h3>{{ team.name }} Team Workouts</h3>
|
||||||
|
{% else %}
|
||||||
|
<h3>Team Workouts</h3>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if workouts %}
|
||||||
|
<table width="100%" class="listtable">
|
||||||
|
{{ form.as_table }}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<p> No workouts found </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid_2 prefix_1 omega">
|
||||||
|
<span class="button gray small">
|
||||||
|
{% if workouts.has_previous %}
|
||||||
|
{% if request.GET.q %}
|
||||||
|
<a class="wh" href="?page={{ workouts.previous_page_number }}&q={{ request.GET.q }}"><</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="wh" href="?page={{ workouts.previous_page_number }}"><</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<span>
|
||||||
|
Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{% if workouts.has_next %}
|
||||||
|
{% if request.GET.q %}
|
||||||
|
<a class="wh" href="?page={{ workouts.next_page_number }}&q={{ request.GET.q }}">></a>
|
||||||
|
{% else %}
|
||||||
|
<a class="wh" href="?page={{ workouts.next_page_number }}">></a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -113,6 +113,13 @@ urlpatterns = [
|
|||||||
url(r'^list-workouts/team/(?P<teamid>\d+)/$',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'^team-compare-select/c/(?P<message>\w+.*)/$',views.team_comparison_select),
|
||||||
|
url(r'^team-compare-select/s/(?P<successmessage>\w+.*)/$',views.team_comparison_select),
|
||||||
|
url(r'^team-compare-select/c/(?P<message>\w+.*)/s/(?P<successmessage>\w+.*)$',views.team_comparison_select),
|
||||||
|
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.team_comparison_select),
|
||||||
|
url(r'^team-compare-select/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
||||||
|
url(r'^team-compare-select/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.team_comparison_select),
|
||||||
|
url(r'^team-compare-select/$',views.team_comparison_select),
|
||||||
url(r'^list-graphs/$',views.graphs_view),
|
url(r'^list-graphs/$',views.graphs_view),
|
||||||
url(r'^(?P<theuser>\d+)/ote-bests/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.rankings_view),
|
url(r'^(?P<theuser>\d+)/ote-bests/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.rankings_view),
|
||||||
url(r'^(?P<theuser>\d+)/ote-bests/(?P<deltadays>\d+)$',views.rankings_view),
|
url(r'^(?P<theuser>\d+)/ote-bests/(?P<deltadays>\d+)$',views.rankings_view),
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from rowers.forms import (
|
|||||||
StatsOptionsForm,PredictedPieceForm,DateRangeForm,DeltaDaysForm,
|
StatsOptionsForm,PredictedPieceForm,DateRangeForm,DeltaDaysForm,
|
||||||
EmailForm, RegistrationForm, RegistrationFormTermsOfService,
|
EmailForm, RegistrationForm, RegistrationFormTermsOfService,
|
||||||
RegistrationFormUniqueEmail,CNsummaryForm,UpdateWindForm,
|
RegistrationFormUniqueEmail,CNsummaryForm,UpdateWindForm,
|
||||||
UpdateStreamForm
|
UpdateStreamForm,WorkoutMultipleCompareForm,
|
||||||
)
|
)
|
||||||
from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
|
from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
@@ -1955,6 +1955,96 @@ def workout_setprivate_view(request,id,
|
|||||||
})
|
})
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
|
# Team comparison
|
||||||
|
@login_required()
|
||||||
|
def team_comparison_select(request,
|
||||||
|
startdatestring="",
|
||||||
|
enddatestring="",
|
||||||
|
message='',
|
||||||
|
successmessage='',
|
||||||
|
startdate=timezone.now()-datetime.timedelta(days=30),
|
||||||
|
enddate=timezone.now()+datetime.timedelta(days=1),
|
||||||
|
teamid=0):
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = Rower.objects.get(user=request.user)
|
||||||
|
except Rower.DoesNotExist:
|
||||||
|
raise Http404("Rower doesn't exist")
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
dateform = DateRangeForm(request.POST)
|
||||||
|
if dateform.is_valid():
|
||||||
|
startdate = dateform.cleaned_data['startdate']
|
||||||
|
enddate = dateform.cleaned_data['enddate']
|
||||||
|
else:
|
||||||
|
dateform = DateRangeForm(initial={
|
||||||
|
'startdate':startdate,
|
||||||
|
'enddate':enddate,
|
||||||
|
})
|
||||||
|
|
||||||
|
startdate = datetime.datetime.combine(startdate,datetime.time())
|
||||||
|
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
|
||||||
|
enddate = enddate+datetime.timedelta(days=1)
|
||||||
|
|
||||||
|
if startdatestring:
|
||||||
|
startdate = iso8601.parse_date(startdatestring)
|
||||||
|
if enddatestring:
|
||||||
|
enddate = iso8601.parse_date(enddatestring)
|
||||||
|
|
||||||
|
if enddate < startdate:
|
||||||
|
s = enddate
|
||||||
|
enddate = startdate
|
||||||
|
startdate = s
|
||||||
|
|
||||||
|
try:
|
||||||
|
theteam = Team.objects.get(id=teamid)
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
raise Http404("Team doesn't exist")
|
||||||
|
|
||||||
|
if theteam.viewing == 'allmembers' or theteam.manager == request.user:
|
||||||
|
workouts = Workout.objects.filter(team=theteam,
|
||||||
|
startdatetime__gte=startdate,
|
||||||
|
startdatetime__lte=enddate).order_by("-date", "-starttime")
|
||||||
|
elif theteam.viewing == 'coachonly':
|
||||||
|
workouts = Workout.objects.filter(team=theteam,user=r,
|
||||||
|
startdatetime__gte=startdate,
|
||||||
|
startdatetime__lte=enddate).order_by("-date","-starttime")
|
||||||
|
|
||||||
|
|
||||||
|
else:
|
||||||
|
theteam = None
|
||||||
|
workouts = Workout.objects.filter(user=r,
|
||||||
|
startdatetime__gte=startdate,
|
||||||
|
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))
|
||||||
|
)
|
||||||
|
|
||||||
|
workouts1 = workouts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
form = WorkoutMultipleCompareForm()
|
||||||
|
form.fields["workouts"].queryset = workouts1
|
||||||
|
|
||||||
|
return render(request, 'team_compare_select.html',
|
||||||
|
{'workouts': workouts,
|
||||||
|
'message': message,
|
||||||
|
'successmessage':successmessage,
|
||||||
|
'dateform':dateform,
|
||||||
|
'startdate':startdate,
|
||||||
|
'enddate':enddate,
|
||||||
|
'team':theteam,
|
||||||
|
'form':form,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
# List Workouts
|
# List Workouts
|
||||||
@login_required()
|
@login_required()
|
||||||
|
|||||||
Reference in New Issue
Block a user