Private
Public Access
1
0

Merge branch 'release/v6.56'

This commit is contained in:
Sander Roosendaal
2018-04-30 20:50:47 +02:00
9 changed files with 123 additions and 298 deletions
+6 -1
View File
@@ -759,8 +759,10 @@ def create_row_df(r,distance,duration,startdatetime,
totalseconds += duration.second
totalseconds += duration.microsecond/1.e6
try:
spm = 60.*nr_strokes/totalseconds
except ZeroDivisionError:
spm = 20.
step = totalseconds/float(nr_strokes)
@@ -775,7 +777,10 @@ def create_row_df(r,distance,duration,startdatetime,
pace = 500.*totalseconds/distance
if workouttype in ['rower','slides','dynamic']:
try:
velo = distance/totalseconds
except ZeroDivisionError:
velo = 2.4
power = 2.8*velo**3
else:
power = 0
+4 -8
View File
@@ -1233,7 +1233,7 @@ class Workout(models.Model):
max_length=100)
distance = models.IntegerField(default=0,blank=True)
duration = models.TimeField(default=1,blank=True)
weightcategory = models.CharField(default="hwt",max_length=10)
weightcategory = models.CharField(default="hwt",max_length=10,choices=weightcategories)
weightvalue = models.FloatField(default=80.0,blank=True,verbose_name = 'Average Crew Weight (kg)')
csvfilename = models.CharField(blank=True,max_length=150)
uploadedtoc2 = models.IntegerField(default=0)
@@ -1478,10 +1478,10 @@ def auto_delete_image_on_delete(sender,instance, **kwargs):
# Form to update Workout data
class WorkoutForm(ModelForm):
duration = forms.TimeInput(format='%H:%M:%S.%f')
# duration = forms.TimeInput(format='%H:%M:%S.%f')
class Meta:
model = Workout
fields = ['name','date','starttime','timezone','duration','distance','workouttype','notes','privacy','rankingpiece','boattype']
fields = ['name','date','starttime','timezone','duration','distance','workouttype','weightcategory','notes','privacy','rankingpiece','boattype']
widgets = {
'date': AdminDateWidget(),
'notes': forms.Textarea,
@@ -1492,11 +1492,6 @@ class WorkoutForm(ModelForm):
super(WorkoutForm, self).__init__(*args, **kwargs)
# this line to be removed
del self.fields['privacy']
# self.fields['timezone'] = forms.ChoiceField(choices=[
# (x,x) for x in pytz.common_timezones
# ],
# initial='UTC',
# label='Time Zone')
if self.instance.workouttype != 'water':
del self.fields['boattype']
@@ -1509,6 +1504,7 @@ class WorkoutForm(ModelForm):
'duration',
'distance',
'workouttype',
'weightcategory',
'notes',
'rankingpiece',
'boattype'
+1 -1
View File
@@ -16,7 +16,7 @@
<div class="grid_12 alpha">
<div class="grid_2 alpha">
{% if user.is_authenticated and psdict.id.1|is_session_manager:user %}
<a class="button small gray" href="/rowers/sessions/{{ psdict.id.1 }}/edit">
<a class="button small gray" href="/rowers/sessions/{{ psdict.id.1 }}/edit/rower/{{ rower.id }}">
Edit Session</a>
{% else %}
&nbsp;
+1 -1
View File
@@ -8,7 +8,7 @@
<th>Event</th>
<th>Country</th>
<th>Course</th>
<th>Action</th>
<th>Click for Details</th>
</tr>
</thead>
<tbody>
+6 -5
View File
@@ -99,10 +99,8 @@
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>Boat</th>
<th>Raw Time</th>
<th>In Class</th>
<th>Corrected Time</th>
<th>Corrected Place</th>
<th>Time</th>
<th>Details</th>
</tr>
</thead>
<tbody>
@@ -112,12 +110,15 @@
<td>
<a href="/rowers/workout/{{ result.workoutid }}">
{{ result.username }}</a></td>
<td>{{ result.teamname }}</th>
<td>{{ result.teamname }}</td>
<td>{{ result.age }}</td>
<td>{{ result.sex }}</td>
<td>{{ result.weightcategory }}</td>
<td>{{ result.boattype }}</td>
<td>{{ result.duration |durationprint:"%H:%M:%S.%f" }}</td>
<td>
<a href="/rowers/workout/{{ result.workoutid }}">
Details</a></td>
</tr>
{% endfor %}
{% for result in dns %}
+4
View File
@@ -85,6 +85,10 @@
</div>
<div class="grid_12 alpha" id="racelist">
<p>Click on the event name or on the Details button to see the event
details (and manage your participation and results). Click on the
course name to see the course details.
</p>
{% include 'racelist.html' %}
</div>
+2
View File
@@ -448,6 +448,7 @@ class DataTest(TestCase):
'duration':'0:55:00.1',
'distance':8000,
'notes':'Aap noot \n mies',
'weightcategory':'lwt',
'workouttype':'water',
}
form = WorkoutForm(data=form_data)
@@ -675,6 +676,7 @@ class ViewTest(TestCase):
'timezone':'Europe/Berlin',
'duration':'1:00:00.5',
'distance':'15000',
'weightcategory':'hwt',
'workouttype':'rower',
'notes':'noot mies',
}
-1
View File
@@ -254,7 +254,6 @@ urlpatterns = [
url(r'^workout/compare/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\w+.*)$',views.workout_comparison_list),
url(r'^workout/(?P<id>\d+)/edit$',views.workout_edit_view,
name='workout_edit_view'),
url(r'^workout/(?P<id>\d+)/navionics$',views.workout_edit_view_navionics),
url(r'^workout/(?P<id>\d+)/map$',views.workout_map_view),
url(r'^workout/(?P<id>\d+)/setprivate$',views.workout_setprivate_view),
url(r'^workout/(?P<id>\d+)/updatecp$',views.workout_update_cp_view),
+89 -271
View File
@@ -181,7 +181,35 @@ class JSONResponse(HttpResponse):
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
def getrequestrower(request,rowerid=0,userid=0,notpermanent=False):
if notpermanent == False:
if rowerid == 0 and 'rowerid' in request.session:
rowerid = request.session['rowerid']
if userid != 0:
rowerid = 0
try:
if rowerid != 0:
r = Rower.objects.get(id=rowerid)
elif userid != 0:
u = User.objects.get(id=userid)
r = getrower(u)
else:
r = getrower(request.user)
except Rower.DoesNotExist:
raise Http404("Rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You have no access to this user")
if notpermanent == False:
request.session['rowerid'] = r.id
return r
def getrower(user):
@@ -1062,8 +1090,8 @@ def start_plantrial_view(request):
messages.info(request,'We have started your 14 day trial period')
subject2 = "User started Pro Trial"
message2 = "User Started Pro Trial.\n"
subject2 = "User started Plan Trial"
message2 = "User Started Plan Trial.\n"
message2 += request.user.email + "\n"
message2 += "User name: "+request.user.username
@@ -2952,7 +2980,15 @@ def cum_flex(request,theuser=0,
promember=0
if theuser == 0:
if 'rowerid' in request.session:
try:
r = Rower.objects.get(id=request.session['rowerid'])
theuser = r.user.id
except Rower.DoesNotExist:
theuser = request.user.id
else:
theuser = request.user.id
if not request.user.is_anonymous():
r = getrower(request.user)
@@ -3105,11 +3141,9 @@ def cum_flex(request,theuser=0,
def fitnessmetric_view(request,id=0,mode='rower',
startdate=timezone.now()-timezone.timedelta(days=365),
enddate=timezone.now()):
if id==0:
id = request.user.id
theuser = User.objects.get(id=id)
therower = Rower.objects.get(user=theuser)
therower = getrequestrower(request,userid=id)
theuser = therower.user
if request.method == 'POST':
@@ -3275,8 +3309,9 @@ def histo(request,theuser=0,
startdate = s
promember=0
if theuser == 0:
theuser = request.user.id
r = getrequestrower(request,userid=theuser)
theuser = r.user.id
if not request.user.is_anonymous():
r = getrower(request.user)
@@ -3431,6 +3466,7 @@ def addmanual_view(request):
starttime = form.cleaned_data['starttime']
workouttype = form.cleaned_data['workouttype']
duration = form.cleaned_data['duration']
weightcategory = form.cleaned_data['weightcategory']
distance = form.cleaned_data['distance']
notes = form.cleaned_data['notes']
thetimezone = form.cleaned_data['timezone']
@@ -3458,6 +3494,7 @@ def addmanual_view(request):
id,message = dataprep.create_row_df(r,
distance,
weightcategory,
duration,startdatetime,
title = name,
notes=notes,
@@ -4346,6 +4383,13 @@ def otwrankings_view(request,theuser=0,
startdate = s
if theuser == 0:
if 'rowerid' in request.session:
try:
r = Rower.objects.get(id=request.session['rowerid'])
theuser = r.user.id
except Rower.DoesNotExist:
theuser = request.user.id
else:
theuser = request.user.id
promember=0
@@ -4400,6 +4444,7 @@ def otwrankings_view(request,theuser=0,
# get all 2k (if any) - this rower, in date range
try:
r = Rower.objects.get(user=theuser)
request.session['rowerid'] = r.id
except Rower.DoesNotExist:
raise Http404("Rower doesn't exist")
@@ -4622,7 +4667,15 @@ def oterankings_view(request,theuser=0,
startdate = s
if theuser == 0:
if 'rowerid' in request.session:
try:
r = Rower.objects.get(id=request.session['rowerid'])
theuser = r.user.id
except Rower.DoesNotExist:
theuser = request.user.id
else:
theuser = request.user.id
promember=0
if not request.user.is_anonymous():
@@ -4676,6 +4729,7 @@ def oterankings_view(request,theuser=0,
# get all 2k (if any) - this rower, in date range
try:
r = Rower.objects.get(user=theuser)
request.session['rowerid'] = r.id
except Rower.DoesNotExist:
allergworkouts = []
raise Http404("Rower doesn't exist")
@@ -5493,13 +5547,8 @@ def user_multiflex_select(request,
enddate=timezone.now(),
userid=0):
if userid == 0:
user = request.user
else:
user = User.objects.get(id=userid)
r = getrower(user)
r = getrequestrower(request,userid=userid)
user = r.user
if 'options' in request.session:
options = request.session['options']
@@ -6032,13 +6081,8 @@ def user_boxplot_select(request,
},
userid=0):
if userid == 0:
user = request.user
else:
user = User.objects.get(id=userid)
r = getrower(user)
r = getrequestrower(request,userid=userid)
user = r.user
if 'options' in request.session:
options = request.session['options']
@@ -6423,17 +6467,7 @@ def workouts_view(request,message='',successmessage='',
teamid=0,rankingonly=False,rowerid=0,userid=0):
request.session['referer'] = absolute(request)['PATH']
try:
if rowerid != 0:
r = Rower.objects.get(id=rowerid)
elif userid != 0:
u = User.objects.get(id=userid)
r = getrower(u)
else:
r = getrower(request.user)
except Rower.DoesNotExist:
raise Http404("Rower doesn't exist")
r = getrequestrower(request,rowerid=rowerid,userid=userid)
# check if access is allowed
if not checkaccessuser(request.user,r):
@@ -7572,7 +7606,15 @@ def cumstats(request,theuser=0,
promember=0
if theuser == 0:
if 'rowerid' in request.session:
try:
r = Rower.objects.get(id=request.session['rowerid'])
theuser = r.user.id
except Rower.DoesNotExist:
theuser = request.user.id
else:
theuser = request.user.id
if not request.user.is_anonymous():
r = getrower(request.user)
@@ -7697,6 +7739,7 @@ def cumstats(request,theuser=0,
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
request.session['rowerid'] = r.id
if datadf.empty:
stats = {}
@@ -9011,6 +9054,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
date = form.cleaned_data['date']
starttime = form.cleaned_data['starttime']
workouttype = form.cleaned_data['workouttype']
weightcategory = form.cleaned_data['weightcategory']
duration = form.cleaned_data['duration']
distance = form.cleaned_data['distance']
notes = form.cleaned_data['notes']
@@ -9049,6 +9093,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
row.starttime = starttime
row.startdatetime = startdatetime
row.workouttype = workouttype
row.weightcategory = weightcategory
row.notes = notes
row.duration = duration
row.distance = distance
@@ -9223,166 +9268,6 @@ def workout_map_view(request,id=0):
'mayedit':mayedit,
})
# The basic edit page
@login_required()
def workout_edit_view_navionics(request,id=0,message="",successmessage=""):
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
request.session['referer'] = absolute(request)['PATH']
row = get_workout(id)
form = WorkoutForm(instance=row)
if request.method == 'POST':
# Form was submitted
form = WorkoutForm(request.POST)
if form.is_valid():
# Get values from form
name = form.cleaned_data['name']
date = form.cleaned_data['date']
starttime = form.cleaned_data['starttime']
workouttype = form.cleaned_data['workouttype']
duration = form.cleaned_data['duration']
distance = form.cleaned_data['distance']
notes = form.cleaned_data['notes']
thetimezone = form.cleaned_data['timezone']
try:
boattype = request.POST['boattype']
except KeyError:
boattype = Workout.objects.get(id=id).boattype
try:
privacy = request.POST['privacy']
except KeyError:
privacy = Workout.objects.get(id=id).privacy
try:
rankingpiece = form.cleaned_data['rankingpiece']
except KeyError:
rankingpiece =- Workout.objects.get(id=id).rankingpiece
startdatetime = (str(date) + ' ' + str(starttime))
startdatetime = datetime.datetime.strptime(startdatetime,
"%Y-%m-%d %H:%M:%S")
startdatetime = timezone.make_aware(startdatetime)
startdatetime = startdatetime.astimezone(pytz.timezone(thetimezone))
# check if user is owner of this workout
if checkworkoutuser(request.user,row):
row.name = name
row.date = date
row.starttime = starttime
row.startdatetime = startdatetime
row.workouttype = workouttype
row.notes = notes
row.duration = duration
row.distance = distance
row.boattype = boattype
row.privacy = privacy
row.rankingpiece = rankingpiece
row.timezone = thetimezone
try:
row.save()
except IntegrityError:
pass
# change data in csv file
r = rdata(row.csvfilename)
if r == 0:
return HttpResponse("Error: CSV Data File Not Found")
r.rowdatetime = startdatetime
r.write_csv(row.csvfilename,gzip=True)
dataprep.update_strokedata(id,r.df)
successmessage = "Changes saved"
messages.info(request,successmessage)
url = reverse(workout_edit_view,
kwargs = {
'id':str(row.id),
})
response = HttpResponseRedirect(url)
else:
message = "You are not allowed to change this workout"
messages.error(request,message)
url = reverse(workouts_view)
response = HttpResponseRedirect(url)
#else: # form not POSTed
form = WorkoutForm(instance=row)
row = get_workout(id)
g = GraphImage.objects.filter(workout=row).order_by("-creationdatetime")
for i in g:
try:
width,height = Image.open(i.filename).size
i.width = width
i.height = height
i.save()
except:
pass
# check if user is owner of this workout
comments = WorkoutComment.objects.filter(workout=row)
aantalcomments = len(comments)
if (checkworkoutuser(request.user,row)==False):
raise PermissionDenied("Access denied")
# create interactive plot
f1 = row.csvfilename
u = row.user.user
r = getrower(u)
rowdata = rdata(f1)
hascoordinates = 1
if rowdata != 0:
try:
latitude = rowdata.df[' latitude']
if not latitude.std():
hascoordinates = 0
except KeyError,AttributeError:
hascoordinates = 0
else:
hascoordinates = 0
if hascoordinates:
mapscript,mapdiv = leaflet_chart2(rowdata.df[' latitude'],
rowdata.df[' longitude'],
row.name)
else:
mapscript = ""
mapdiv = ""
# render page
if (len(g)<=3):
return render(request, 'workout_form.html',
{'form':form,
'workout':row,
'teams':get_my_teams(request.user),
'graphs1':g[0:3],
'mapscript':mapscript,
'aantalcomments':aantalcomments,
'mapdiv':mapdiv,
})
else:
return render(request, 'workout_form.html',
{'form':form,
'teams':get_my_teams(request.user),
'workout':row,
'graphs1':g[0:3],
'graphs2':g[3:6],
'mapscript':mapscript,
'aantalcomments':aantalcomments,
'mapdiv':mapdiv,
})
return HttpResponseRedirect(url)
# Image upload
@login_required()
@@ -11346,12 +11231,7 @@ def rower_exportsettings_view(request):
# Add email address to form so user can change his email address
@login_required()
def rower_edit_view(request,rowerid=0,message=""):
if rowerid==0:
r = getrower(request.user)
else:
r = Rower.objects.get(id=rowerid)
if not checkaccessuser(request.user,r):
raise PermissionDenied("You have no access to these user settings")
r = getrequestrower(request,rowerid=rowerid,notpermanent=True)
rowerid = r.id
@@ -12298,15 +12178,7 @@ def plannedsession_multiclone_view(
startdate=timezone.now()-datetime.timedelta(days=30),
enddate=timezone.now()):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
if 'startdate' in request.session:
startdate = iso8601.parse_date(request.session['startdate'])
@@ -12402,15 +12274,8 @@ def plannedsession_multiclone_view(
@user_passes_test(hasplannedsessions,login_url="/rowers/planmembership/",
redirect_field_name=None)
def plannedsession_create_view(request,timeperiod='thisweek',rowerid=0):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
if request.method == 'POST':
sessioncreateform = PlannedSessionForm(request.POST)
@@ -12505,15 +12370,7 @@ def plannedsession_multicreate_view(request,timeperiod='thisweek',
extrasessions=int(extrasessions)
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
startdate,enddate = get_dates_timeperiod(timeperiod)
sps = get_sessions(r,startdate=startdate,enddate=enddate)
@@ -12876,15 +12733,7 @@ def plannedsessions_coach_view(request,timeperiod='thisweek',
@login_required()
def plannedsessions_view(request,timeperiod='thisweek',rowerid=0):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
startdate,enddate = get_dates_timeperiod(timeperiod)
@@ -12921,15 +12770,7 @@ def plannedsessions_view(request,timeperiod='thisweek',rowerid=0):
@login_required()
def plannedsessions_print_view(request,timeperiod='thisweek',rowerid=0):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
startdate,enddate = get_dates_timeperiod(timeperiod)
@@ -12958,15 +12799,7 @@ def plannedsessions_manage_view(request,timeperiod='thisweek',rowerid=0,
if request.is_ajax():
is_ajax = True
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
startdate,enddate = get_dates_timeperiod(timeperiod)
@@ -13084,15 +12917,8 @@ def plannedsessions_manage_view(request,timeperiod='thisweek',rowerid=0,
redirect_field_name=None)
def plannedsession_clone_view(request,id=0,rowerid=0,
timeperiod='thisweek'):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
startdate,enddate = get_dates_timeperiod(timeperiod)
@@ -13138,15 +12964,7 @@ def plannedsession_clone_view(request,id=0,rowerid=0,
redirect_field_name=None)
def plannedsession_edit_view(request,id=0,timeperiod='thisweek',rowerid=0):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
r = getrequestrower(request,rowerid=rowerid)
startdate,enddate = get_dates_timeperiod(timeperiod)