From d0ecd7ceead8047cff142504ff4d7bd7ce35a67e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 9 Feb 2021 17:32:55 +0100 Subject: [PATCH] first version erase column --- rowers/templates/workout_data.html | 20 +++- rowers/templates/workout_erase_column.html | 44 ++++++++ rowers/templatetags/rowerfilters.py | 11 ++ rowers/urls.py | 2 + rowers/views/workoutviews.py | 120 +++++++++++++++++++++ 5 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 rowers/templates/workout_erase_column.html diff --git a/rowers/templates/workout_data.html b/rowers/templates/workout_data.html index a259bb35..a5ce5581 100644 --- a/rowers/templates/workout_data.html +++ b/rowers/templates/workout_data.html @@ -17,8 +17,24 @@

-
  • - {{ htmltable|safe }} +
  • + + + {% endfor %} + + {% for row in data.values.tolist %} + + + {% for value in row %} + + {% endfor %} + + {% endfor %} +
    + {% for i in cols %} + {{i}} erase
    + {{ forloop.counter0 }} + {{ value }}
  • diff --git a/rowers/templates/workout_erase_column.html b/rowers/templates/workout_erase_column.html new file mode 100644 index 00000000..12d13549 --- /dev/null +++ b/rowers/templates/workout_erase_column.html @@ -0,0 +1,44 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Workout Data{% endblock %} + +{% block main %} +

    Erase {{ column }} for {{ workout.name }}

    + +
      +
    • +

      + This will erase column {{ column }} from the following workout: +

      + + + + + + + + + + + + +
      Name:{{ workout.name }}
      Date:{{ workout.date }}
      Time:{{ workout.starttime }}
      Distance:{{ workout.distance }}m
      Duration:{{ workout.duration |durationprint:"%H:%M:%S.%f" }}
      +

      + The data cannot be recovered. If you are sure, please confirm. +

      +
    • +
    • +
      + {% csrf_token %} + +
      +
    • +
    + +{% endblock %} + +{% block sidebar %} +{% include 'menu_workout.html' %} +{% endblock %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index dd33bcf1..7cc4d99c 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -85,6 +85,10 @@ def icon(s): except KeyError: return 'fa-chart-line' +@register.filter +def datarows(data): + return range(len(data)) + @register.filter def adaptive(s): u = s @@ -519,11 +523,18 @@ def mayeditplan(obj,request): return mayedit +@register.filter +def iterrows(df): + return df.iterrows() @register.filter(name='times') def times(number): return range(number) +@register.simple_tag +def get_df_iloc(data,i,j): + return data.iloc(i,j) + @register.simple_tag def get_field_id(id,s,form): field_name = s+str(id) diff --git a/rowers/urls.py b/rowers/urls.py index de7a0fb2..c3bda9e1 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -463,6 +463,8 @@ urlpatterns = [ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/stats/$',views.workout_stats_view,name='workout_stats_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/data/$',views.workout_data_view, name='workout_data_view'), + re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/(?P\w+)/erase/$',views.workout_erase_column_view, + name='workout_erase_column_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/zeropower-confirm/$',views.remove_power_confirm_view, name='remove_power_confirm_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/zeropower/$',views.remove_power_view, diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 867c5a20..bdc0a05c 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -3166,6 +3166,124 @@ def instroke_chart(request,id=0,metric=''): return HttpResponseRedirect(url) +# erase column +@permission_required('workout.change_workout',fn=get_workout_by_opaqueid,raise_exception=True) +def workout_erase_column_view(request, id=0,column=''): + r = getrower(request.user) + w = get_workoutuser(id,request) + + protected = ['time','pace','velo','cumdist','ftime','fpace',] + if column in protected: + messages.error(request,'You cannot erase this protected column') + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + + try: + data = dataprep.getsmallrowdata_db([column],ids=[w.id]) + except: + messages.error(request,'Invalid column') + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + + try: + cdata = data[column] + except KeyError: + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + + + if not column: + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + + if request.method == 'POST': + + mms = {} + for m in rowingmetrics: + mms[m[0]] = m[1] + + try: + defaultvalue = mms[column]['default'] + except KeyError: + if not mms[column]['null']: + messages.error(request,'You cannot erase this protected column') + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + defaultvalue = 0 + + try: + columnl = dataprep.columndict[column] + except KeyError: + messages.error(request,'You cannot erase this column') + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + + row,workout = dataprep.getrowdata(id=w.id) + row.df[columnl] = defaultvalue + print(row.df[columnl]) + row.write_csv(w.csvfilename,gzip=True) + + datadf = dataprep.dataprep(row.df,id=w.id) + + + messages.info(request,'Data for column '+column+' have been erased') + url = reverse('workout_data_view',kwargs={ + 'id':encoder.encode_hex(w.id) + }) + + return HttpResponseRedirect(url) + + + breadcrumbs = [ + { + 'url':'/rowers/list-workouts/', + 'name':'Workouts' + }, + { + 'url':get_workout_default_page(request,id), + 'name': w.name + }, + { + 'url':reverse('workout_data_view',kwargs={'id':id}), + 'name': 'Data Explorer' + } + + ] + + return render(request, + 'workout_erase_column.html', + { + 'column':column, + 'teams':get_my_teams(request.user), + 'workout': w, + 'breadcrumbs': breadcrumbs, + + } + ) + + + + + + # data explorer @permission_required('workout.change_workout',fn=get_workout_by_opaqueid,raise_exception=True) @@ -3268,6 +3386,8 @@ def workout_data_view(request, id=0): 'workout_data.html', { 'htmltable': htmltable, + 'data':datadf, + 'cols':datadf.columns, 'form':form, 'teams':get_my_teams(request.user), 'workout': w,