Private
Public Access
1
0

Merge branch 'develop' into feature/restapi

This commit is contained in:
Sander Roosendaal
2016-12-08 11:59:43 +01:00
12 changed files with 758 additions and 166 deletions

View File

@@ -2,6 +2,7 @@ import time
import operator
from django.views.generic.base import TemplateView
from django.db.models import Q
from django.db import IntegrityError, transaction
from django.shortcuts import render
from django.http import (
HttpResponse, HttpResponseRedirect,
@@ -20,8 +21,10 @@ from django.core.mail import send_mail, BadHeaderError
from rowers.forms import EmailForm, RegistrationForm, RegistrationFormTermsOfService,RegistrationFormUniqueEmail,CNsummaryForm,UpdateWindForm,UpdateStreamForm
from rowers.forms import PredictedPieceForm,DateRangeForm,DeltaDaysForm
from rowers.forms import SummaryStringForm,IntervalUpdateForm,StrokeDataForm
from rowers.models import Workout, User, Rower, WorkoutForm
from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
from rowers.models import RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm
from rowers.models import FavoriteForm,BaseFavoriteFormSet
from django.forms.formsets import formset_factory
import StringIO
from django.contrib.auth.decorators import login_required,user_passes_test
from time import strftime,strptime,mktime,time,daylight
@@ -424,7 +427,7 @@ def add_workout_from_strokedata(user,importid,data,strokedata,source='c2'):
df['originalvelo'] = velo
if windowsize > 3:
if windowsize > 3 and windowsize < len(velo):
velo2 = savgol_filter(velo,windowsize,3)
else:
velo2=velo
@@ -656,7 +659,7 @@ def add_workout_from_stdata(user,importid,data):
df['originalvelo'] = velo
if windowsize > 3:
if windowsize > 3 and windowsize<len(velo):
velo2 = savgol_filter(velo,windowsize,3)
else:
velo2 = velo
@@ -1450,7 +1453,7 @@ def histo(request,theuser=0,
promember=1
if not promember:
return HttpResponseRedirect("/rowers/about/")
return HttpResponseRedirect("/rowers/promembership/")
# get all indoor rows of in date range
@@ -1913,7 +1916,7 @@ def workouts_view(request,message='',successmessage='',
except Rower.DoesNotExist:
return HttpResponse("User has no rower instance")
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_comparison_list(request,id=0,message='',successmessage='',
startdatestring="",enddatestring="",
startdate=timezone.now()-datetime.timedelta(days=365),
@@ -2027,7 +2030,7 @@ def workout_view(request,id=0):
return HttpResponseNotFound("Workout doesn't exist")
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_undo_smoothenpace_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,row)==False):
@@ -2054,7 +2057,7 @@ def workout_undo_smoothenpace_view(request,id=0,message="",successmessage=""):
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_smoothenpace_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,row)==False):
@@ -2089,7 +2092,7 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""):
return HttpResponseRedirect(url)
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
if request.method == 'POST':
@@ -2133,7 +2136,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
{'form':form,
'id':row.id})
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_downloadwind_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
f1 = row.csvfilename
@@ -2190,7 +2193,7 @@ def workout_downloadwind_view(request,id=0,message="",successmessage=""):
return response
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_wind_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,row)==False):
@@ -2286,7 +2289,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
'gmapdiv':gmdiv})
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_stream_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,row)==False):
@@ -2348,7 +2351,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
'the_div':div})
@user_passes_test(promember, login_url="/login")
@user_passes_test(promember, login_url="/",redirect_field_name=None)
def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,row)==False):
@@ -2478,7 +2481,7 @@ def workout_geeky_view(request,id=0,message="",successmessage=""):
'interactiveplot':script,
'the_div':div})
#@user_passes_test(promember,login_url="/login")
#@user_passes_test(promember,login_url="/",redirect_field_name=None)
@login_required()
def workout_advanced_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
@@ -2577,18 +2580,24 @@ def workout_comparison_view2(request,id1=0,id2=0,xparam='distance',
def workout_flexchart3_view(request,id=0,xparam='distance',yparam1='pace',
yparam2='hr',plottype='line',
promember=0):
def workout_flexchart3_view(request,*args,**kwargs):
if request.method == 'POST':
workstrokesonly = request.POST['workstrokesonly']
if workstrokesonly == 'True':
workstrokesonly = True
else:
workstrokesonly = False
try:
id = kwargs['id']
except KeyError:
return HttpResponse("Invalid workout number")
if 'promember' in kwargs:
promember = kwargs['promember']
else:
workstrokesonly = False
promember = 0
try:
favoritenr = int(request.GET['favoritechart'])
except:
favoritenr = 0
row = Workout.objects.get(id=id)
promember=0
@@ -2601,6 +2610,82 @@ def workout_flexchart3_view(request,id=0,xparam='distance',yparam1='pace',
if request.user == row.user.user:
mayedit=1
workouttype = 'ote'
if row.workouttype == 'water':
workouttype = 'otw'
favorites = FavoriteChart.objects.filter(user=r,
workouttype__in=[workouttype,'both']).order_by("id")
maxfav = len(favorites)-1
# check if favoritenr is not out of range
if favorites:
try:
t = favorites[favoritenr].xparam
except IndexError:
favoritenr=0
if 'xparam' in kwargs:
xparam = kwargs['xparam']
else:
if favorites:
xparam = favorites[favoritenr].xparam
else:
xparam = 'distance'
if 'yparam1' in kwargs:
yparam1 = kwargs['yparam1']
else:
if favorites:
yparam1 = favorites[favoritenr].yparam1
else:
yparam1 = 'pace'
if 'yparam2' in kwargs:
yparam2 = kwargs['yparam2']
if yparam2 == '':
yparam2 = 'None'
else:
if favorites:
yparam2 = favorites[favoritenr].yparam2
if yparam2 == '':
yparam2 = 'None'
else:
yparam2 = 'hr'
if 'plottype' in kwargs:
plottype = kwargs['plottype']
else:
if favorites:
plottype = favorites[favoritenr].plottype
else:
plottype = 'line'
if 'workstrokesonly' in kwargs:
workstrokesonly = kwargs['workstrokesonly']
else:
if favorites:
workstrokesonly = not favorites[favoritenr].reststrokes
else:
workstrokesonly = False
if request.method == 'POST' and 'savefavorite' in request.POST:
workstrokesonly = request.POST['workstrokesonlysave']
reststrokes = not workstrokesonly
f = FavoriteChart(user=r,xparam=xparam,
yparam1=yparam1,yparam2=yparam2,
plottype=plottype,workouttype=workouttype,
reststrokes=reststrokes)
f.save()
if request.method == 'POST' and 'workstrokesonly' in request.POST:
workstrokesonly = request.POST['workstrokesonly']
if workstrokesonly == 'True':
workstrokesonly = True
else:
workstrokesonly = False
# create interactive plot
res = interactive_flex_chart2(id,xparam=xparam,yparam1=yparam1,
yparam2=yparam2,
@@ -2626,6 +2711,8 @@ def workout_flexchart3_view(request,id=0,xparam='distance',yparam1='pace',
'mayedit':mayedit,
'promember':promember,
'workstrokesonly': not workstrokesonly,
'favoritenr':favoritenr,
'maxfav':maxfav,
})
else:
return render(request,
@@ -2642,6 +2729,8 @@ def workout_flexchart3_view(request,id=0,xparam='distance',yparam1='pace',
'mayedit':mayedit,
'promember':promember,
'workstrokesonly': not workstrokesonly,
'favoritenr':favoritenr,
'maxfav':maxfav,
})
def testbokeh(request):
@@ -2735,7 +2824,7 @@ def testbokeh(request):
'css_res':css_resources,
})
#@user_passes_test(promember,login_url="/login")
#@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_biginteractive_view(request,id=0,message="",successmessage=""):
row = Workout.objects.get(id=id)
# check if user is owner of this workout
@@ -2977,7 +3066,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
'workout_form.html',
{'form':form})
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_add_otw_powerplot_view(request,id):
w = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,w)==False):
@@ -3199,7 +3288,7 @@ def workout_add_distanceplot_view(request,id):
url = "/rowers/workout/"+str(w.id)+"/edit"
return HttpResponseRedirect(url)
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_add_distanceplot2_view(request,id):
w = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,w)==False):
@@ -3243,7 +3332,7 @@ def workout_add_distanceplot2_view(request,id):
return HttpResponseRedirect(url)
@user_passes_test(promember,login_url="/login")
@user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_add_timeplot2_view(request,id):
w = Workout.objects.get(id=id)
if (checkworkoutuser(request.user,w)==False):
@@ -3639,7 +3728,7 @@ def workout_upload_view(request,message=""):
if not 'originalvelo' in row.df:
row.df['originalvelo'] = velo
if windowsize > 3:
if windowsize > 3 and windowsize<len(velo):
velo2 = savgol_filter(velo,windowsize,3)
else:
velo2 = velo
@@ -3711,7 +3800,7 @@ def workout_upload_view(request,message=""):
w.save()
# put stroke data in database
res = dataprep.dataprep(row.df,id=w.id,bands=True,barchart=True,otwpower=True,empower=True)
# Make Plot
if (make_plot):
imagename = f1[:-4]+'.png'
@@ -4428,6 +4517,72 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
})
@user_passes_test(promember,login_url="/rowers/me/edit",redirect_field_name=None)
def rower_favoritecharts_view(request):
message = ''
successmessage = ''
r = Rower.objects.get(user=request.user)
favorites = FavoriteChart.objects.filter(user=r).order_by('id')
aantal = len(favorites)
favorites_data = [{'yparam1':f.yparam1,
'yparam2':f.yparam2,
'xparam':f.xparam,
'plottype':f.plottype,
'workouttype':f.workouttype,
'reststrokes':f.reststrokes}
for f in favorites]
FavoriteChartFormSet = formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=0)
if aantal==0:
FavoriteChartFormSet = formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=1)
if request.method == 'POST':
favorites_formset = FavoriteChartFormSet(request.POST)
if favorites_formset.is_valid():
new_instances = []
for favorites_form in favorites_formset:
yparam1 = favorites_form.cleaned_data.get('yparam1')
yparam2 = favorites_form.cleaned_data.get('yparam2')
xparam = favorites_form.cleaned_data.get('xparam')
plottype = favorites_form.cleaned_data.get('plottype')
workouttype = favorites_form.cleaned_data.get('workouttype')
reststrokes = favorites_form.cleaned_data.get('reststrokes')
new_instances.append(FavoriteChart(user=r,
yparam1=yparam1,
yparam2=yparam2,
xparam=xparam,
plottype=plottype,
workouttype=workouttype,
reststrokes=reststrokes))
try:
with transaction.atomic():
FavoriteChart.objects.filter(user=r).delete()
FavoriteChart.objects.bulk_create(new_instances)
successmessage = "You have updated your favorites"
FavoriteChartFormSet=formset_factory(FavoriteForm,formset=BaseFavoriteFormSet)
print new_instances
print "aap",len(new_instances)
if len(new_instances)==0:
FavoriteChartFormSet=formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=1)
favorites_formset = FavoriteChartFormSet()
except IntegrityError:
message = "something went wrong"
else:
favorites_formset = FavoriteChartFormSet(initial=favorites_data)
context = {
'favorites_formset':favorites_formset,
'message':message,
'successmessage':successmessage,
}
return render(request,'favoritecharts.html',context)
@login_required()
def rower_edit_view(request,message=""):