first version erase column
This commit is contained in:
@@ -17,8 +17,24 @@
|
|||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li class="grid_4">
|
<li class="maxheight grid_4">
|
||||||
{{ htmltable|safe }}
|
<table width=100% class="listtable shortpadded">
|
||||||
|
<th>
|
||||||
|
{% for i in cols %}
|
||||||
|
<td><strong>{{i}}</strong> <a href="/rowers/workout/{{ workout.id|encode }}/{{i}}/erase/">erase</a></td>
|
||||||
|
{% endfor %}
|
||||||
|
</th>
|
||||||
|
{% for row in data.values.tolist %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ forloop.counter0 }}
|
||||||
|
</td>
|
||||||
|
{% for value in row %}
|
||||||
|
<td>{{ value }}</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|||||||
44
rowers/templates/workout_erase_column.html
Normal file
44
rowers/templates/workout_erase_column.html
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{% extends "newbase.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% load rowerfilters %}
|
||||||
|
|
||||||
|
{% block title %}Workout Data{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<h1>Erase {{ column }} for {{ workout.name }}</h1>
|
||||||
|
|
||||||
|
<ul class="main-content">
|
||||||
|
<li class="grid_4">
|
||||||
|
<p>
|
||||||
|
This will erase column {{ column }} from the following workout:
|
||||||
|
</p>
|
||||||
|
<table width=100%>
|
||||||
|
<tr>
|
||||||
|
<th>Name:</th><td>{{ workout.name }}</td>
|
||||||
|
</tr><tr>
|
||||||
|
<th>Date:</th><td>{{ workout.date }}</td>
|
||||||
|
</tr><tr>
|
||||||
|
<th>Time:</th><td>{{ workout.starttime }}</td>
|
||||||
|
</tr><tr>
|
||||||
|
<th>Distance:</th><td>{{ workout.distance }}m</td>
|
||||||
|
</tr><tr>
|
||||||
|
<th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
The data cannot be recovered. If you are sure, please confirm.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li class="grid_2">
|
||||||
|
<form action="" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="submit" value="Confirm">
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
{% include 'menu_workout.html' %}
|
||||||
|
{% endblock %}
|
||||||
@@ -85,6 +85,10 @@ def icon(s):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return 'fa-chart-line'
|
return 'fa-chart-line'
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def datarows(data):
|
||||||
|
return range(len(data))
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def adaptive(s):
|
def adaptive(s):
|
||||||
u = s
|
u = s
|
||||||
@@ -519,11 +523,18 @@ def mayeditplan(obj,request):
|
|||||||
|
|
||||||
return mayedit
|
return mayedit
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def iterrows(df):
|
||||||
|
return df.iterrows()
|
||||||
|
|
||||||
@register.filter(name='times')
|
@register.filter(name='times')
|
||||||
def times(number):
|
def times(number):
|
||||||
return range(number)
|
return range(number)
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def get_df_iloc(data,i,j):
|
||||||
|
return data.iloc(i,j)
|
||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
def get_field_id(id,s,form):
|
def get_field_id(id,s,form):
|
||||||
field_name = s+str(id)
|
field_name = s+str(id)
|
||||||
|
|||||||
@@ -463,6 +463,8 @@ urlpatterns = [
|
|||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stats/$',views.workout_stats_view,name='workout_stats_view'),
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stats/$',views.workout_stats_view,name='workout_stats_view'),
|
||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/data/$',views.workout_data_view,
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/data/$',views.workout_data_view,
|
||||||
name='workout_data_view'),
|
name='workout_data_view'),
|
||||||
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<column>\w+)/erase/$',views.workout_erase_column_view,
|
||||||
|
name='workout_erase_column_view'),
|
||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/zeropower-confirm/$',views.remove_power_confirm_view,
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/zeropower-confirm/$',views.remove_power_confirm_view,
|
||||||
name='remove_power_confirm_view'),
|
name='remove_power_confirm_view'),
|
||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/zeropower/$',views.remove_power_view,
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/zeropower/$',views.remove_power_view,
|
||||||
|
|||||||
@@ -3166,6 +3166,124 @@ def instroke_chart(request,id=0,metric=''):
|
|||||||
|
|
||||||
return HttpResponseRedirect(url)
|
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
|
# data explorer
|
||||||
@permission_required('workout.change_workout',fn=get_workout_by_opaqueid,raise_exception=True)
|
@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',
|
'workout_data.html',
|
||||||
{
|
{
|
||||||
'htmltable': htmltable,
|
'htmltable': htmltable,
|
||||||
|
'data':datadf,
|
||||||
|
'cols':datadf.columns,
|
||||||
'form':form,
|
'form':form,
|
||||||
'teams':get_my_teams(request.user),
|
'teams':get_my_teams(request.user),
|
||||||
'workout': w,
|
'workout': w,
|
||||||
|
|||||||
Reference in New Issue
Block a user