From 33afb8800b0ba323777bc196221360f58ce96115 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 18 Feb 2017 09:50:09 +0100 Subject: [PATCH] Initial version of workout choice field --- rowers/forms.py | 4 + rowers/models.py | 22 ++++-- rowers/templates/team_compare_select.html | 95 +++++++++++++++++++++++ rowers/urls.py | 7 ++ rowers/views.py | 92 +++++++++++++++++++++- 5 files changed, 211 insertions(+), 9 deletions(-) create mode 100644 rowers/templates/team_compare_select.html diff --git a/rowers/forms.py b/rowers/forms.py index 23d67fb4..37e6c7aa 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -252,3 +252,7 @@ class StatsOptionsForm(forms.Form): paddle = forms.BooleanField(initial=False,required=False) snow = 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()) diff --git a/rowers/models.py b/rowers/models.py index c1dd3bbb..d43d28c6 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -398,17 +398,23 @@ class Workout(models.Model): privacy = models.CharField(default='visible',max_length=30, choices=privacychoices) - def __str__(self): + def __unicode__(self): date = self.date name = self.name + distance = str(self.distance) + ownerfirst = self.user.user.first_name + ownerlast = self.user.user.last_name + duration = self.duration - try: - stri = date.strftime('%Y-%m-%d')+'_'+name - except AttributeError: - stri = str(date)+'_'+name - - + stri = u'{d}_{n}_{dist}m_{duration:%H:%M:%S}_{ownerfirst}_{ownerlast}'.format( + d = date.strftime('%Y-%m-%d'), + n = name, + dist = distance, + duration = duration, + ownerfirst = ownerfirst, + ownerlast = ownerlast, + ) return stri @@ -890,7 +896,7 @@ class WorkoutComment(models.Model): def __unicode__(self): return u'Comment to: {w} by {u1} {u2}'.format( - w=self.workout.name, + w=self.workout, u1 = self.user.first_name, u2 = self.user.last_name, ) diff --git a/rowers/templates/team_compare_select.html b/rowers/templates/team_compare_select.html new file mode 100644 index 00000000..67988ec9 --- /dev/null +++ b/rowers/templates/team_compare_select.html @@ -0,0 +1,95 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Workouts{% endblock %} + +{% block content %} + + + + +
+ + Select start and end date for a date range: +
+ + {% if team %} +
+ {% else %} + + {% endif %} + + + {{ dateform.as_table }} +
+ {% csrf_token %} +
+
+ +
+
+ {% if team %} +
+ {% else %} + +{% endif %} +
+ +
+
+ +
+
+
+ +
+ +
+ {% if team %} +

{{ team.name }} Team Workouts

+ {% else %} +

Team Workouts

+ {% endif %} + + {% if workouts %} + + {{ form.as_table }} +
+{% else %} +

No workouts found

+{% endif %} +
+ + + +
+ + {% if workouts.has_previous %} + {% if request.GET.q %} + < + {% else %} + < + {% endif %} + {% endif %} + + + Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}. + + + {% if workouts.has_next %} + {% if request.GET.q %} + > + {% else %} + > + {% endif %} + {% endif %} + + +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index e54bbac2..fb71fa02 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -113,6 +113,13 @@ urlpatterns = [ url(r'^list-workouts/team/(?P\d+)/$',views.workouts_view), url(r'^list-workouts/(?P\w+.*)/(?P\w+.*)$',views.workouts_view), url(r'^list-workouts/$',views.workouts_view), + url(r'^team-compare-select/c/(?P\w+.*)/$',views.team_comparison_select), + url(r'^team-compare-select/s/(?P\w+.*)/$',views.team_comparison_select), + url(r'^team-compare-select/c/(?P\w+.*)/s/(?P\w+.*)$',views.team_comparison_select), + url(r'^team-compare-select/team/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.team_comparison_select), + url(r'^team-compare-select/team/(?P\d+)/$',views.team_comparison_select), + url(r'^team-compare-select/(?P\w+.*)/(?P\w+.*)$',views.team_comparison_select), + url(r'^team-compare-select/$',views.team_comparison_select), url(r'^list-graphs/$',views.graphs_view), url(r'^(?P\d+)/ote-bests/(?P\w+.*)/(?P\w+.*)$',views.rankings_view), url(r'^(?P\d+)/ote-bests/(?P\d+)$',views.rankings_view), diff --git a/rowers/views.py b/rowers/views.py index 2e50b45e..4e717cbd 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -26,7 +26,7 @@ from rowers.forms import ( StatsOptionsForm,PredictedPieceForm,DateRangeForm,DeltaDaysForm, EmailForm, RegistrationForm, RegistrationFormTermsOfService, RegistrationFormUniqueEmail,CNsummaryForm,UpdateWindForm, - UpdateStreamForm + UpdateStreamForm,WorkoutMultipleCompareForm, ) from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart from rowers.models import ( @@ -1955,7 +1955,97 @@ def workout_setprivate_view(request,id, }) 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 @login_required() def workouts_view(request,message='',successmessage='',