Merge branch 'develop' into feature/restapi
This commit is contained in:
213
rowers/views.py
213
rowers/views.py
@@ -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=""):
|
||||
|
||||
Reference in New Issue
Block a user