From 93bd2d26bf0f189069305e8578c73394baf7f4ec Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 22 Nov 2016 15:02:53 +0100 Subject: [PATCH] Date Ranges for workouts and comparisons --- rowers/templates/comparison_list.html | 42 ++++++++++---- rowers/templates/histo.html | 2 +- rowers/templates/list_workouts.html | 27 +++++++-- rowers/urls.py | 2 + rowers/views.py | 81 ++++++++++++++++++++++++--- 5 files changed, 130 insertions(+), 24 deletions(-) diff --git a/rowers/templates/comparison_list.html b/rowers/templates/comparison_list.html index 9db40a2a..08910d38 100644 --- a/rowers/templates/comparison_list.html +++ b/rowers/templates/comparison_list.html @@ -6,8 +6,7 @@ {% block content %}
- - +

Workout {{ id }}

@@ -30,13 +29,34 @@
Weight Category:{{ workout.weightcategory }}
-
- - -
+
+
+

+

+ + +
+

+
+ + Select start and end date for a date range: +
+

+

+ + + {{ dateform.as_table }} +
+ {% csrf_token %} +
+
+ +

+
+
@@ -85,7 +105,7 @@
{% if workouts.has_previous %} - < + < {% endif %} @@ -93,7 +113,7 @@ {% if workouts.has_next %} - > + > {% endif %}
diff --git a/rowers/templates/histo.html b/rowers/templates/histo.html index e0236ded..8fa50f6f 100644 --- a/rowers/templates/histo.html +++ b/rowers/templates/histo.html @@ -82,4 +82,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/templates/list_workouts.html b/rowers/templates/list_workouts.html index 31c1ce88..d3cf848e 100644 --- a/rowers/templates/list_workouts.html +++ b/rowers/templates/list_workouts.html @@ -6,6 +6,23 @@ {% block content %}
+ + Select start and end date for a date range: +
+ +
+ + + {{ dateform.as_table }} +
+ {% csrf_token %} +
+
+ +
+ +
+

My Workouts

{% if workouts %} @@ -53,19 +70,19 @@ {% endif %}
-
-
+
-
+
-
+
{% if workouts.has_previous %} < @@ -79,7 +96,7 @@ > {% endif %} -
+ {% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index abfe93ba..b310bfaf 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -26,6 +26,7 @@ urlpatterns = [ url(r'^list-workouts/c/(?P\w+.*)/$',views.workouts_view), url(r'^list-workouts/s/(?P\w+.*)/$',views.workouts_view), url(r'^list-workouts/c/(?P\w+.*)/s/(?P\w+.*)$',views.workouts_view), + url(r'^list-workouts/(?P\w+.*)/(?P\w+.*)$',views.workouts_view), url(r'^list-workouts/$',views.workouts_view), url(r'^list-graphs/$',views.graphs_view), url(r'^dashboard/c/(?P\w+.*)/$',views.dashboard_view), @@ -61,6 +62,7 @@ urlpatterns = [ url(r'^workout/(?P\d+)/export$',views.workout_export_view), url(r'^workout/(\d+)/emailtcx$',views.workout_tcxemail_view), url(r'^workout/(\d+)/emailcsv$',views.workout_csvemail_view), + url(r'^workout/compare/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.workout_comparison_list), url(r'^workout/compare/(\d+)/$',views.workout_comparison_list), url(r'^workout/compare2/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/$',views.workout_comparison_view), url(r'^workout/(?P\d+)/export/c/(?P\w+.*)/s/(?P\w+.*)$',views.workout_edit_view), diff --git a/rowers/views.py b/rowers/views.py index 1fe4f108..3fa3ca8d 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1572,8 +1572,8 @@ def rankings_view(request,theuser=0, for rankingduration in rankingdurations: workouts = Workout.objects.filter(user=r,duration=rankingduration, - workouttype='rower', - startdatetime__gte=startdate, + workouttype='rower', + startdatetime__gte=startdate, startdatetime__lte=enddate).order_by('-distance') if workouts: thedistances.append(workouts[0].distance) @@ -1767,14 +1767,45 @@ def workout_recalcsummary_view(request,id=0): @login_required() -def workouts_view(request,message='',successmessage=''): +def workouts_view(request,message='',successmessage='', + startdatestring="",enddatestring="", + startdate=timezone.now()-datetime.timedelta(days=365), + enddate=timezone.now()): try: r = Rower.objects.get(user=request.user) # res = mailprocessing.safeprocessattachments() #if len(res)>0 and np.cumsum(np.array(res)).max()>0: # successmessage = 'New Workouts have been created from email' - workouts = Workout.objects.filter(user=r).order_by("-date", "-starttime") + 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)) + + if startdatestring: + startdate = iso8601.parse_date(startdatestring) + if enddatestring: + enddate = iso8601.parse_date(enddatestring) + + if enddate < startdate: + s = enddate + enddate = startdate + startdate = s + + + 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() @@ -1785,7 +1816,7 @@ def workouts_view(request,message='',successmessage=''): (Q(notes__icontains=q) for q in query_list)) ) - paginator = Paginator(workouts,25) # show 25 workouts per page + paginator = Paginator(workouts,20) # show 25 workouts per page page = request.GET.get('page') try: @@ -1799,16 +1830,49 @@ def workouts_view(request,message='',successmessage=''): {'workouts': workouts, 'message': message, 'successmessage':successmessage, + 'dateform':dateform, + 'startdate':startdate, + 'enddate':enddate, }) except Rower.DoesNotExist: return HttpResponse("Admin has no rower instance") @user_passes_test(promember,login_url="/login") -def workout_comparison_list(request,id=0,message='',successmessage=''): +def workout_comparison_list(request,id=0,message='',successmessage='', + startdatestring="",enddatestring="", + startdate=timezone.now()-datetime.timedelta(days=365), + enddate=timezone.now()): + try: r = Rower.objects.get(user=request.user) u = User.objects.get(id=r.user.id) - workouts = Workout.objects.filter(user=r).order_by("-date", "-starttime").exclude(id=id) + 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, + }) + + if startdatestring: + startdate = iso8601.parse_date(startdatestring) + if enddatestring: + enddate = iso8601.parse_date(enddatestring) + + startdate = datetime.datetime.combine(startdate,datetime.time()) + enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59)) + + if enddate < startdate: + s = enddate + enddate = startdate + startdate = s + + workouts = Workout.objects.filter(user=r, + startdatetime__gte=startdate, + startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id) query = request.GET.get('q') if query: @@ -1840,6 +1904,9 @@ def workout_comparison_list(request,id=0,message='',successmessage=''): 'first_name':u.first_name, 'message': message, 'successmessage':successmessage, + 'dateform':dateform, + 'startdate':startdate, + 'enddate':enddate, }) except Rower.DoesNotExist: return HttpResponse("Admin has no rower instance")