small impr
This commit is contained in:
@@ -64,7 +64,13 @@ class TrainingZonesForm(forms.Form):
|
|||||||
('hr','Heart Rate Zones')
|
('hr','Heart Rate Zones')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
datechoices = (
|
||||||
|
('month', 'By Month'),
|
||||||
|
('week', 'By Week'),
|
||||||
|
)
|
||||||
|
|
||||||
zones = forms.ChoiceField(initial='hr',label='Training Zones',choices=zoneschoices)
|
zones = forms.ChoiceField(initial='hr',label='Training Zones',choices=zoneschoices)
|
||||||
|
dates = forms.ChoiceField(initial='month',label='Date Aggregation', choices=datechoices)
|
||||||
startdate = forms.DateField(
|
startdate = forms.DateField(
|
||||||
initial=timezone.now()-datetime.timedelta(days=365),
|
initial=timezone.now()-datetime.timedelta(days=365),
|
||||||
widget=AdminDateWidget(), #format='%Y-%m-%d'),
|
widget=AdminDateWidget(), #format='%Y-%m-%d'),
|
||||||
|
|||||||
@@ -6583,7 +6583,7 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0):
|
|||||||
|
|
||||||
return [script,div]
|
return [script,div]
|
||||||
|
|
||||||
def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
def get_zones_report(rower,startdate,enddate,trainingzones='hr',date_agg='week'):
|
||||||
duration = enddate-startdate
|
duration = enddate-startdate
|
||||||
|
|
||||||
totaldays = duration.total_seconds()/(24*3600)
|
totaldays = duration.total_seconds()/(24*3600)
|
||||||
@@ -6623,7 +6623,11 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
dd = w.date.strftime('%m/%d')
|
dd = w.date.strftime('%m/%d')
|
||||||
dd2 = w.date.strftime('%Y/%m/%d')
|
dd2 = w.date.strftime('%Y/%m/%d')
|
||||||
dd3 = w.date.strftime('%Y/%m')
|
dd3 = w.date.strftime('%Y/%m')
|
||||||
dd4 = arrow.get(w.date).isocalendar()[1]
|
dd4 = '{year}/{week:02d}'.format(
|
||||||
|
week=arrow.get(w.date).isocalendar()[1],
|
||||||
|
year= w.date.strftime('%y')
|
||||||
|
)
|
||||||
|
|
||||||
#print(w.date,arrow.get(w.date),arrow.get(w.date).isocalendar())
|
#print(w.date,arrow.get(w.date),arrow.get(w.date).isocalendar())
|
||||||
|
|
||||||
qryw = 'workoutid == {workoutid}'.format(workoutid=w.id)
|
qryw = 'workoutid == {workoutid}'.format(workoutid=w.id)
|
||||||
@@ -6632,10 +6636,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
qry = 'power < {ut2}'.format(ut2=rower.pw_ut2)
|
qry = 'power < {ut2}'.format(ut2=rower.pw_ut2)
|
||||||
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
||||||
if totaldays<=30:
|
if date_agg == 'week':
|
||||||
dates.append(dd)
|
|
||||||
dates_sorting.append(dd2)
|
|
||||||
elif totaldays<=121: # pragma: no cover
|
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
@@ -6653,10 +6654,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
qry = '{ut2} <= power < {ut2}'.format(ut1=rower.pw_ut1,ut2=rower.pw_ut2)
|
qry = '{ut2} <= power < {ut2}'.format(ut1=rower.pw_ut1,ut2=rower.pw_ut2)
|
||||||
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
||||||
if totaldays<=30:
|
if date_agg == 'week':
|
||||||
dates.append(dd)
|
|
||||||
dates_sorting.append(dd2)
|
|
||||||
elif totaldays<=121: # pragma: no cover
|
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
@@ -6674,10 +6672,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
qry = '{ut1} <= power < {at}'.format(ut1=rower.pw_ut1,at=rower.pw_at)
|
qry = '{ut1} <= power < {at}'.format(ut1=rower.pw_ut1,at=rower.pw_at)
|
||||||
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
||||||
if totaldays<=30:
|
if date_agg == 'week':
|
||||||
dates.append(dd)
|
|
||||||
dates_sorting.append(dd2)
|
|
||||||
elif totaldays<=121: # pragma: no cover
|
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
@@ -6695,10 +6690,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
qry = '{at} <= power < {tr}'.format(at=rower.pw_at,tr=rower.pw_tr)
|
qry = '{at} <= power < {tr}'.format(at=rower.pw_at,tr=rower.pw_tr)
|
||||||
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
||||||
if totaldays<=30:
|
if date_agg == 'week':
|
||||||
dates.append(dd)
|
|
||||||
dates_sorting.append(dd2)
|
|
||||||
elif totaldays<=121: # pragma: no cover
|
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
@@ -6716,10 +6708,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
qry = '{tr} <= power < {an}'.format(tr=rower.pw_tr,an=rower.pw_an)
|
qry = '{tr} <= power < {an}'.format(tr=rower.pw_tr,an=rower.pw_an)
|
||||||
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
||||||
if totaldays<=30:
|
if date_agg == 'week':
|
||||||
dates.append(dd)
|
|
||||||
dates_sorting.append(dd2)
|
|
||||||
elif totaldays<=121: # pragma: no cover
|
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
@@ -6737,10 +6726,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
qry = 'power >= {an}'.format(an=rower.pw_an)
|
qry = 'power >= {an}'.format(an=rower.pw_an)
|
||||||
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3)
|
||||||
if totaldays<=30:
|
if date_agg == 'week':
|
||||||
dates.append(dd)
|
|
||||||
dates_sorting.append(dd2)
|
|
||||||
elif totaldays<=121: # pragma: no cover
|
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
@@ -6766,11 +6752,11 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
|
|
||||||
while d<=enddate:
|
while d<=enddate:
|
||||||
dd = d.strftime('%d')
|
dd = d.strftime('%d')
|
||||||
if totaldays <= 30:
|
if date_agg == 'week':
|
||||||
dates.append(d.strftime('%m/%d'))
|
dd4 = '{year}/{week:02d}'.format(
|
||||||
dates_sorting.append(d.strftime('%Y/%m/%d'))
|
week=arrow.get(d).isocalendar()[1],
|
||||||
elif totaldays<=121: # pragma: no cover
|
year= d.strftime('%y')
|
||||||
dd4 = arrow.get(d).isocalendar()[1]
|
)
|
||||||
dates.append(dd4)
|
dates.append(dd4)
|
||||||
dates_sorting.append(dd4)
|
dates_sorting.append(dd4)
|
||||||
else:
|
else:
|
||||||
@@ -6801,7 +6787,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'):
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'):
|
def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr',date_agg='week'):
|
||||||
duration = enddate-startdate
|
duration = enddate-startdate
|
||||||
|
|
||||||
totaldays = duration.total_seconds()/(24*3600)
|
totaldays = duration.total_seconds()/(24*3600)
|
||||||
@@ -6813,7 +6799,7 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'):
|
|||||||
|
|
||||||
|
|
||||||
color_map = {
|
color_map = {
|
||||||
'<{ut2}'.format(ut2=hrzones[1]):'gray',
|
'<{ut2}'.format(ut2=hrzones[1]):'green',
|
||||||
hrzones[1]:'lime',
|
hrzones[1]:'lime',
|
||||||
hrzones[2]:'yellow',
|
hrzones[2]:'yellow',
|
||||||
hrzones[3]:'blue',
|
hrzones[3]:'blue',
|
||||||
@@ -6822,7 +6808,7 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'):
|
|||||||
}
|
}
|
||||||
if trainingzones == 'power':
|
if trainingzones == 'power':
|
||||||
color_map = {
|
color_map = {
|
||||||
'<{ut2}'.format(ut2=powerzones[1]):'gray',
|
'<{ut2}'.format(ut2=powerzones[1]):'green',
|
||||||
powerzones[1]:'lime',
|
powerzones[1]:'lime',
|
||||||
powerzones[2]:'yellow',
|
powerzones[2]:'yellow',
|
||||||
powerzones[3]:'blue',
|
powerzones[3]:'blue',
|
||||||
@@ -6851,10 +6837,10 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'):
|
|||||||
|
|
||||||
|
|
||||||
df = pd.DataFrame(data)
|
df = pd.DataFrame(data)
|
||||||
if totaldays > 30:
|
|
||||||
df.drop('minutes',inplace=True,axis='columns')
|
df.drop('minutes',inplace=True,axis='columns')
|
||||||
else:
|
|
||||||
df.drop('hours',inplace=True,axis='columns')
|
#df.drop('hours',inplace=True,axis='columns')
|
||||||
|
|
||||||
|
|
||||||
source = ColumnDataSource(df)
|
source = ColumnDataSource(df)
|
||||||
@@ -6883,9 +6869,9 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'):
|
|||||||
r = str(rower),
|
r = str(rower),
|
||||||
)
|
)
|
||||||
|
|
||||||
if totaldays >= 30:
|
if date_agg == 'week':
|
||||||
p.xaxis.axis_label = 'Week'
|
p.xaxis.axis_label = 'Week'
|
||||||
if totaldays >= 121:
|
else:
|
||||||
p.xaxis.axis_label = 'Month'
|
p.xaxis.axis_label = 'Month'
|
||||||
|
|
||||||
p.plot_width=550
|
p.plot_width=550
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
<script>
|
<script>
|
||||||
$(function($) {
|
$(function($) {
|
||||||
console.log('loading script for chart');
|
console.log('loading script for chart');
|
||||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/trainingzones/user/{{ rower.user.id }}/data/?startdate={{ startdate|date:"Y-m-d" }}&enddate={{ enddate|date:"Y-m-d" }}&zones={{ zones }}', function(json) {
|
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/trainingzones/user/{{ rower.user.id }}/data/?startdate={{ startdate|date:"Y-m-d" }}&enddate={{ enddate|date:"Y-m-d" }}&zones={{ zones }}&dates={{ dates }}', function(json) {
|
||||||
var script = json.script;
|
var script = json.script;
|
||||||
var div = json.div;
|
var div = json.div;
|
||||||
$("#id_sitready").remove();
|
$("#id_sitready").remove();
|
||||||
|
|||||||
@@ -1073,6 +1073,7 @@ def trainingzones_view(request,userid=0,mode='rower',
|
|||||||
startdate = form.cleaned_data['startdate']
|
startdate = form.cleaned_data['startdate']
|
||||||
enddate = form.cleaned_data['enddate']
|
enddate = form.cleaned_data['enddate']
|
||||||
zones = form.cleaned_data['zones']
|
zones = form.cleaned_data['zones']
|
||||||
|
date_agg = form.cleaned_data['dates']
|
||||||
|
|
||||||
|
|
||||||
script = ''
|
script = ''
|
||||||
@@ -1100,6 +1101,7 @@ def trainingzones_view(request,userid=0,mode='rower',
|
|||||||
'startdate':startdate,
|
'startdate':startdate,
|
||||||
'enddate':enddate,
|
'enddate':enddate,
|
||||||
'zones':zones,
|
'zones':zones,
|
||||||
|
'dates': date_agg,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1110,10 +1112,14 @@ def trainingzones_view_data(request,userid=0):
|
|||||||
startdate = timezone.now()-datetime.timedelta(days=365)
|
startdate = timezone.now()-datetime.timedelta(days=365)
|
||||||
enddate = timezone.now()
|
enddate = timezone.now()
|
||||||
zones = 'hr'
|
zones = 'hr'
|
||||||
|
date_agg = 'week'
|
||||||
|
|
||||||
if request.GET.get('zones'):
|
if request.GET.get('zones'):
|
||||||
zones = request.GET.get('zones')
|
zones = request.GET.get('zones')
|
||||||
|
|
||||||
|
if request.GET.get('dates'):
|
||||||
|
date_agg = request.GET.get('dates')
|
||||||
|
|
||||||
if request.GET.get('startdate'):
|
if request.GET.get('startdate'):
|
||||||
startdate = datetime.datetime.strptime(request.GET.get('startdate'),"%Y-%m-%d")
|
startdate = datetime.datetime.strptime(request.GET.get('startdate'),"%Y-%m-%d")
|
||||||
startdate = arrow.get(startdate).datetime
|
startdate = arrow.get(startdate).datetime
|
||||||
@@ -1122,9 +1128,9 @@ def trainingzones_view_data(request,userid=0):
|
|||||||
enddate = datetime.datetime.strptime(request.GET.get('enddate'),"%Y-%m-%d")
|
enddate = datetime.datetime.strptime(request.GET.get('enddate'),"%Y-%m-%d")
|
||||||
enddate = arrow.get(enddate).datetime
|
enddate = arrow.get(enddate).datetime
|
||||||
|
|
||||||
data = get_zones_report(r,startdate,enddate,trainingzones=zones)
|
data = get_zones_report(r,startdate,enddate,trainingzones=zones,date_agg=date_agg)
|
||||||
|
|
||||||
script, div = interactive_zoneschart(r,data,startdate,enddate,trainingzones=zones)
|
script, div = interactive_zoneschart(r,data,startdate,enddate,trainingzones=zones,date_agg=date_agg)
|
||||||
|
|
||||||
return JSONResponse({
|
return JSONResponse({
|
||||||
'script': script,
|
'script': script,
|
||||||
|
|||||||
Reference in New Issue
Block a user