From cc40615f46991fb6f7907c9ebe4456dc275ebf8b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 8 Dec 2018 09:15:16 +0100 Subject: [PATCH 1/4] unknown column error fixed in data explore view --- rowers/forms.py | 4 ++++ rowers/templates/workoutstats.html | 2 +- rowers/views.py | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index c73770fc..7de91fdb 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -25,6 +25,10 @@ class LoginForm(forms.Form): username = forms.CharField() password = forms.CharField(widget=forms.PasswordInput()) +# search form +class SearchForm(forms.Form): + q = forms.CharField(max_length=255,required=False,initial='Search') + # simple form for Contact page. Sends email to info@rowsandall.com class EmailForm(forms.Form): firstname = forms.CharField(max_length=255) diff --git a/rowers/templates/workoutstats.html b/rowers/templates/workoutstats.html index d4976046..dbfed1f4 100644 --- a/rowers/templates/workoutstats.html +++ b/rowers/templates/workoutstats.html @@ -93,7 +93,7 @@ {% for key, value in stats.items %} - {% if value.std > 2 %} + {% if value.std > 10 %} {{ value.verbosename }} {{ value.mean|floatformat:0 }} {{ value.wmean|floatformat:0 }} diff --git a/rowers/views.py b/rowers/views.py index b00e6e38..a0a4cfeb 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -50,7 +50,7 @@ from rowers.forms import ( RaceResultFilterForm,PowerIntervalUpdateForm,FlexAxesForm, FlexOptionsForm,DataFrameColumnsForm,OteWorkoutTypeForm, MetricsForm,DisqualificationForm,disqualificationreasons, - disqualifiers + disqualifiers,SearchForm, ) from django.core.urlresolvers import reverse, reverse_lazy @@ -6994,6 +6994,9 @@ def workouts_view(request,message='',successmessage='', reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() paginator = Paginator(workouts,20) # show 25 workouts per page page = request.GET.get('page') @@ -7038,6 +7041,7 @@ def workouts_view(request,message='',successmessage='', {'workouts': workouts, 'active': 'nav-workouts', 'rower':r, + 'searchform':searchform, 'breadcrumbs':breadcrumbs, 'dateform':dateform, 'startdate':startdate, @@ -8496,10 +8500,16 @@ def workout_data_view(request, id=0): datadf.sort_values(['ftime'],inplace=True) - datadf.drop(labels=[ + columns = datadf.columns.values + + to_be_dropped = [ 'id','time','hr_an','hr_at','hr_bottom','hr_max', 'hr_tr','hr_ut1','hr_ut2','x_right', - ],inplace=True,axis=1) + ] + + to_be_dropped = [c for c in to_be_dropped if c in columns] + + datadf.drop(labels=to_be_dropped,inplace=True,axis=1) cols = ['ftime','cumdist','fpace','spm', From 5496a0f5333a24f6025da6e02be440363c538003 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 8 Dec 2018 09:26:43 +0100 Subject: [PATCH 2/4] search form in list view --- rowers/forms.py | 7 ++++++- rowers/templates/list_workouts.html | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index 7de91fdb..05fc77a8 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -27,7 +27,12 @@ class LoginForm(forms.Form): # search form class SearchForm(forms.Form): - q = forms.CharField(max_length=255,required=False,initial='Search') + q = forms.CharField(max_length=255,required=False, + widget=forms.TextInput( + attrs={'placeholder': 'Search'}), + label='Search') + + # simple form for Contact page. Sends email to info@rowsandall.com class EmailForm(forms.Form): diff --git a/rowers/templates/list_workouts.html b/rowers/templates/list_workouts.html index a46e7fdd..2ccb8c53 100644 --- a/rowers/templates/list_workouts.html +++ b/rowers/templates/list_workouts.html @@ -85,9 +85,9 @@ {% else %}
- {% endif %} - - + {% endif %} + {{ searchform }} +

From b9062bd7685dbb07d8592a109aa5e01a75a1807a Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 8 Dec 2018 09:56:46 +0100 Subject: [PATCH 3/4] improved search forms --- rowers/templates/comparison_list.html | 6 ++-- rowers/templates/fusion_list.html | 8 ++--- rowers/templates/list_courses.html | 8 ++--- rowers/templates/list_graphs.html | 6 ++-- rowers/templates/team_compare_select.html | 8 ++--- rowers/templates/user_boxplot_select.html | 10 +++--- rowers/templates/user_multiflex_select.html | 10 +++--- rowers/templates/workout_join_select.html | 12 +++---- rowers/views.py | 36 +++++++++++++++++++-- 9 files changed, 60 insertions(+), 44 deletions(-) diff --git a/rowers/templates/comparison_list.html b/rowers/templates/comparison_list.html index ab60d9ce..2ad2d425 100644 --- a/rowers/templates/comparison_list.html +++ b/rowers/templates/comparison_list.html @@ -34,10 +34,8 @@

- - + {{ searchform }} +

diff --git a/rowers/templates/fusion_list.html b/rowers/templates/fusion_list.html index 9dd58932..97f84a06 100644 --- a/rowers/templates/fusion_list.html +++ b/rowers/templates/fusion_list.html @@ -32,10 +32,8 @@

- - + {{ searchform }} +

@@ -49,7 +47,7 @@ {% csrf_token %}

- +
  • Fuse this workout with data from:

    diff --git a/rowers/templates/list_courses.html b/rowers/templates/list_courses.html index 5648405d..53648139 100644 --- a/rowers/templates/list_courses.html +++ b/rowers/templates/list_courses.html @@ -60,14 +60,12 @@

    - - + {{ searchform }} +

    - Add Courses + Add Courses

    {% if announcements %}

    What's New?

    diff --git a/rowers/templates/list_graphs.html b/rowers/templates/list_graphs.html index ff6e1022..0b9a82df 100644 --- a/rowers/templates/list_graphs.html +++ b/rowers/templates/list_graphs.html @@ -16,10 +16,8 @@
  • - - + {{ searchform }} +
  • diff --git a/rowers/templates/team_compare_select.html b/rowers/templates/team_compare_select.html index 63c3ae41..0480f481 100644 --- a/rowers/templates/team_compare_select.html +++ b/rowers/templates/team_compare_select.html @@ -103,10 +103,8 @@
    - - + {{ searchform }} +
  • @@ -133,7 +131,7 @@

    - +

  • diff --git a/rowers/templates/user_boxplot_select.html b/rowers/templates/user_boxplot_select.html index 46008816..ba2ff67b 100644 --- a/rowers/templates/user_boxplot_select.html +++ b/rowers/templates/user_boxplot_select.html @@ -101,7 +101,7 @@ {{ chartform.as_table }}

    - +

    @@ -118,16 +118,14 @@ {{ optionsform.as_table }} {% csrf_token %} - +
  • - - + {{ searchform }} +
  • diff --git a/rowers/templates/user_multiflex_select.html b/rowers/templates/user_multiflex_select.html index 9d553b5d..0566ad12 100644 --- a/rowers/templates/user_multiflex_select.html +++ b/rowers/templates/user_multiflex_select.html @@ -92,16 +92,14 @@ {{ modalityform.as_table }} {% csrf_token %} - +
  • - - + {{ searchform }} +
  • @@ -122,7 +120,7 @@ {{ chartform.as_table }}

    - +

  • diff --git a/rowers/templates/workout_join_select.html b/rowers/templates/workout_join_select.html index 50a0d5bb..a6f2649e 100644 --- a/rowers/templates/workout_join_select.html +++ b/rowers/templates/workout_join_select.html @@ -91,7 +91,7 @@

    {% csrf_token %} - +

    @@ -106,7 +106,7 @@

    {% csrf_token %} - +

    @@ -121,7 +121,7 @@

    {% csrf_token %} - +

    @@ -133,10 +133,8 @@
    {% endif %} - - + {{ searchform }} +
    diff --git a/rowers/views.py b/rowers/views.py index a0a4cfeb..ce2a80c0 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5336,6 +5336,9 @@ def workouts_join_select(request, reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() form = WorkoutMultipleCompareForm() form.fields["workouts"].queryset = workouts @@ -5358,6 +5361,7 @@ def workouts_join_select(request, return render(request, 'workout_join_select.html', {'workouts': workouts, 'dateform':dateform, + 'searchform':searchform, 'startdate':startdate, 'enddate':enddate, 'active':'nav-workouts', @@ -5510,6 +5514,9 @@ def team_comparison_select(request, reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() if id: firstworkout = get_workout(id) @@ -5573,6 +5580,7 @@ def team_comparison_select(request, 'startdate':startdate, 'enddate':enddate, 'team':theteam, + 'searchform':searchform, 'form':form, 'rower':r, 'breadcrumbs':breadcrumbs, @@ -5921,6 +5929,9 @@ def user_multiflex_select(request, reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() form = WorkoutMultipleCompareForm() form.fields["workouts"].queryset = workouts @@ -5975,6 +5986,7 @@ def user_multiflex_select(request, 'rower':r, 'form':form, 'chartform':chartform, + 'searchform':searchform, 'modalityform':modalityform, 'teams':get_my_teams(request.user), }) @@ -6551,6 +6563,9 @@ def user_boxplot_select(request, reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() form = WorkoutMultipleCompareForm() form.fields["workouts"].queryset = workouts @@ -6592,6 +6607,7 @@ def user_boxplot_select(request, 'form':form, 'active':'nav-analysis', 'chartform':chartform, + 'searchform':searchform, 'optionsform':optionsform, 'teams':get_my_teams(request.user), }) @@ -6834,10 +6850,14 @@ def courses_view(request): reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) - + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() + return render(request,'list_courses.html', {'courses':courses, 'active':'nav-racing', + 'searchform':searchform, 'rower':r, }) @@ -7108,6 +7128,9 @@ def workout_comparison_list(request,id=0,message='',successmessage='', reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() paginator = Paginator(workouts,15) # show 25 workouts per page page = request.GET.get('page') @@ -7130,6 +7153,7 @@ def workout_comparison_list(request,id=0,message='',successmessage='', 'workouts': workouts, 'last_name':u.last_name, 'first_name':u.first_name, + 'searchform':searchform, 'dateform':dateform, 'startdate':startdate, 'enddate':enddate, @@ -7189,7 +7213,10 @@ def workout_fusion_list(request,id=0,message='',successmessage='', (Q(name__icontains=q) for q in query_list)) | reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) - ) + ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() paginator = Paginator(workouts,15) # show 25 workouts per page page = request.GET.get('page') @@ -7225,6 +7252,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='', {'id':int(id), 'workout':row, 'rower':r, + 'searchform':searchform, 'active':'nav-workouts', 'breadcrumbs':breadcrumbs, 'workouts': workouts, @@ -12067,6 +12095,9 @@ def graphs_view(request): reduce(operator.and_, (Q(notes__icontains=q) for q in query_list)) ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() g = GraphImage.objects.filter(workout__in=workouts).order_by("-creationdatetime") @@ -12083,6 +12114,7 @@ def graphs_view(request): return render(request, 'list_graphs.html', {'graphs': g, + 'searchform':searchform, 'active':'nav-workouts', 'teams':get_my_teams(request.user), }) From e4bc752b3b9ad8d2f01608b16eaf9cd0bc0908ed Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 8 Dec 2018 11:10:01 +0100 Subject: [PATCH 4/4] fixing strava import failure --- rowers/stravastuff.py | 7 ++++++- rowers/utils.py | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rowers/stravastuff.py b/rowers/stravastuff.py index aecf3c70..ac19fb00 100644 --- a/rowers/stravastuff.py +++ b/rowers/stravastuff.py @@ -150,7 +150,12 @@ def get_strava_workouts(rower): start_date = item['start_date'] stravaid = item['id'] if arrow.get(start_date) == arrow.get(w.startdatetime): - if datetime.time(seconds=int(elapsed_time)) == w.duration: + dd = datetime.min + timedelta( + seconds=int(elapsed_time) + ) + + + if datetime.time(dd) == w.duration: w.uploadedtostrava = int(stravaid) w.save() diff --git a/rowers/utils.py b/rowers/utils.py index 5a0abf2c..cb9fbaae 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -377,7 +377,12 @@ def totaltime_sec_to_string(totaltime): if not message: message = 'Warning: there is something wrong with the workout duration' - duration = "%s:%s:%s.%s" % (hours, minutes, seconds, tenths) + duration = "{hours:02d}:{minutes:02d}:{seconds:02d}.{tenths}".format( + hours=hours, + minutes=minutes, + seconds=seconds, + tenths=tenths + ) return duration