Merge branch 'release/v1.1'
This commit is contained in:
@@ -891,6 +891,7 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
|
||||
|
||||
yparamname1 = axlabels[yparam1]
|
||||
if yparam2 != 'None':
|
||||
yparamname2 = axlabels[yparam2]
|
||||
|
||||
|
||||
@@ -1668,8 +1669,6 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line',
|
||||
if yparam != 'time' and yparam != 'pace':
|
||||
plot.add_layout(ylabel)
|
||||
|
||||
print cntr,id,len(group),ymean
|
||||
|
||||
source = ColumnDataSource(
|
||||
group
|
||||
)
|
||||
|
||||
+1
-1
@@ -393,7 +393,7 @@ class Workout(models.Model):
|
||||
maxhr = models.IntegerField(blank=True,null=True)
|
||||
uploadedtostrava = models.IntegerField(default=0)
|
||||
uploadedtosporttracks = models.IntegerField(default=0)
|
||||
notes = models.CharField(blank=True,null=True,max_length=200)
|
||||
notes = models.CharField(blank=True,null=True,max_length=1000)
|
||||
summary = models.TextField(blank=True)
|
||||
privacy = models.CharField(default='visible',max_length=30,
|
||||
choices=privacychoices)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
<div id="workouts_table" class="grid_8 alpha">
|
||||
{% if team %}
|
||||
{% include "teambuttons.html" with teamid=team.id %}
|
||||
<h3>{{ team.name }} Team Workouts</h3>
|
||||
{% else %}
|
||||
<h3>My Workouts</h3>
|
||||
|
||||
@@ -34,25 +34,33 @@
|
||||
</style>
|
||||
|
||||
|
||||
<div id="workouts" class="grid_12 alpha">
|
||||
<div id="workouts" class="grid_8 alpha">
|
||||
<h1>Interactive Comparison</h1>
|
||||
<div class="grid_2 alpha">
|
||||
<a class="button gray small" href="/rowers/list-workouts/team/{{ teamid }}/">Team Workouts</a>
|
||||
<div class="grid_8 alpha">
|
||||
{% include "teambuttons.html" with teamid=teamid%}
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<a class="button gray small" href="/rowers/team-compare-select/team/{{ teamid }}/">Multi Compare</a>
|
||||
</div>
|
||||
<div class="grid_4 omega">
|
||||
<form enctype="multipart/form-data" action="/rowers/multi-compare" method="post">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ chartform.as_table }}
|
||||
</table>
|
||||
<div class="grid_1 prefix_2 suffix_1">
|
||||
<p>
|
||||
<input name='workoutselectform' class="button green" type="submit" value="Submit">
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 suffix_6 omega">
|
||||
<a class="button gray small" href="/rowers/team/{{ teamid }}/">Team Page</a>
|
||||
</div>
|
||||
<div class="grid_12 alpha">
|
||||
</form>
|
||||
</div>
|
||||
<div class="grid_12 alpha">
|
||||
|
||||
|
||||
|
||||
<div id="theplot" class="grid_12 alpha flexplot">
|
||||
{{ the_div|safe }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -5,8 +5,15 @@
|
||||
{% block content %}
|
||||
<div class="grid_12 alpha">
|
||||
<h1>{{ team.name }}</h1>
|
||||
<div class="grid_8 alpha">
|
||||
{% include "teambuttons.html" with teamid=team.id %}
|
||||
</div>
|
||||
<div class="grid_4 omega">
|
||||
<p>{{ team.notes }}</p>
|
||||
<p><b>Manager:</b> {{ team.manager.first_name }} {{ team.manager.last_name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_12 alpha">
|
||||
{% if ismember %}
|
||||
<div class="grid_2 alpha">
|
||||
<a class="button red small" href="/rowers/team/{{ team.id }}/leaveconfirm">Leave this team</a>
|
||||
@@ -29,6 +36,9 @@
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="grid_12 alpha">
|
||||
<div class="grid_6 alpha">
|
||||
<p>
|
||||
<h2>Members</h2>
|
||||
|
||||
@@ -8,7 +8,14 @@
|
||||
|
||||
|
||||
<div class="grid_12">
|
||||
|
||||
<div class="grid_8 suffix_4">
|
||||
{% include "teambuttons.html" with teamid=teamid%}
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_12 alpha">
|
||||
<h3>{{ team.name }} Team Workouts</h3>
|
||||
</div>
|
||||
<div class="grid_12 alpha">
|
||||
<div class="grid_4 alpha">
|
||||
|
||||
{% if team %}
|
||||
@@ -46,9 +53,6 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid_12 alpha">
|
||||
<h3>{{ team.name }} Team Workouts</h3>
|
||||
</div>
|
||||
|
||||
<form enctype="multipart/form-data" action="/rowers/multi-compare" method="post">
|
||||
<div id="workouts_table" class="grid_8 alpha">
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<div class="grid_2 alpha">
|
||||
<a class="button gray small" href="/rowers/list-workouts/team/{{ teamid }}/">Team Workouts</a>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<a class="button gray small" href="/rowers/team-compare-select/team/{{ teamid }}/">Multi Compare</a>
|
||||
</div>
|
||||
<div class="grid_2 suffix_2 omega">
|
||||
<a class="button gray small" href="/rowers/team/{{ teamid }}/">Team Page</a>
|
||||
</div>
|
||||
+1
-3
@@ -580,9 +580,7 @@ class ViewTest(TestCase):
|
||||
form = WorkoutForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
response = self.c.post('/rowers/workout/1/edit', form_data, follow=True)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/1/edit/s/Changes%20saved',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
w = Workout.objects.get(id=1)
|
||||
|
||||
+56
-40
@@ -357,7 +357,7 @@ def add_workout_from_strokedata(user,importid,data,strokedata,
|
||||
except:
|
||||
title = 'Imported'
|
||||
|
||||
starttimeunix = mktime(rowdatetime.timetuple())
|
||||
starttimeunix = mktime(rowdatetime.utctimetuple())
|
||||
|
||||
res = make_cumvalues(0.1*strokedata['t'])
|
||||
cum_time = res[0]
|
||||
@@ -521,7 +521,7 @@ def add_workout_from_stdata(user,importid,data):
|
||||
except:
|
||||
title = "Imported data"
|
||||
|
||||
starttimeunix = mktime(rowdatetime.timetuple())
|
||||
starttimeunix = mktime(rowdatetime.utctimetuple())
|
||||
|
||||
res = splitstdata(data['distance'])
|
||||
|
||||
@@ -2059,7 +2059,12 @@ def multi_compare_view(request):
|
||||
if result:
|
||||
promember=1
|
||||
|
||||
if request.method == 'POST':
|
||||
if 'ids' in request.session:
|
||||
print request.session['ids']
|
||||
|
||||
print request.POST
|
||||
|
||||
if request.method == 'POST' and 'workouts' in request.POST:
|
||||
form = WorkoutMultipleCompareForm(request.POST)
|
||||
chartform = ChartParamChoiceForm(request.POST)
|
||||
if form.is_valid() and chartform.is_valid():
|
||||
@@ -2070,6 +2075,8 @@ def multi_compare_view(request):
|
||||
plottype = chartform.cleaned_data['plottype']
|
||||
teamid = chartform.cleaned_data['teamid']
|
||||
ids = [int(w.id) for w in workouts]
|
||||
request.session['ids'] = ids
|
||||
|
||||
labeldict = {
|
||||
int(w.id): w.__unicode__() for w in workouts
|
||||
}
|
||||
@@ -2086,9 +2093,40 @@ def multi_compare_view(request):
|
||||
'the_div':div,
|
||||
'promember':promember,
|
||||
'teamid':teamid,
|
||||
'chartform':chartform,
|
||||
})
|
||||
else:
|
||||
return HttpResponse("Form is not valid")
|
||||
if request.method == 'POST' and 'ids' in request.session:
|
||||
chartform = ChartParamChoiceForm(request.POST)
|
||||
if chartform.is_valid():
|
||||
xparam = chartform.cleaned_data['xparam']
|
||||
yparam = chartform.cleaned_data['yparam']
|
||||
plottype = chartform.cleaned_data['plottype']
|
||||
teamid = chartform.cleaned_data['teamid']
|
||||
ids = request.session['ids']
|
||||
request.session['ids'] = ids
|
||||
workouts = [Workout.objects.get(id=id) for id in ids]
|
||||
|
||||
labeldict = {
|
||||
int(w.id): w.__unicode__() for w in workouts
|
||||
}
|
||||
|
||||
res = interactive_multiple_compare_chart(ids,xparam,yparam,
|
||||
promember=promember,
|
||||
plottype=plottype,
|
||||
labeldict=labeldict)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
|
||||
return render(request,'multicompare.html',
|
||||
{'interactiveplot':script,
|
||||
'the_div':div,
|
||||
'promember':promember,
|
||||
'teamid':teamid,
|
||||
'chartform':chartform,
|
||||
})
|
||||
|
||||
else:
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -2469,7 +2507,7 @@ def workout_downloadwind_view(request,id=0,
|
||||
startdatetime = dateutil.parser.parse("{}, {}".format(row.date,
|
||||
row.starttime))
|
||||
|
||||
starttimeunix = int(mktime(startdatetime.timetuple()))
|
||||
starttimeunix = int(mktime(startdatetime.utctimetuple()))
|
||||
avgtime = starttimeunix+avgtime
|
||||
winddata = get_wind_data(avglat,avglon,avgtime)
|
||||
windspeed = winddata[0]
|
||||
@@ -2533,7 +2571,7 @@ def workout_downloadmetar_view(request,id=0,
|
||||
startdatetime = dateutil.parser.parse("{}, {}".format(row.date,
|
||||
row.starttime))
|
||||
|
||||
starttimeunix = int(mktime(startdatetime.timetuple()))
|
||||
starttimeunix = int(mktime(startdatetime.utctimetuple()))
|
||||
avgtime = starttimeunix+avgtime
|
||||
winddata = get_metar_data(airportcode,avgtime)
|
||||
windspeed = winddata[0]
|
||||
@@ -3597,6 +3635,12 @@ def workout_comment_view(request,id=0):
|
||||
def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
|
||||
|
||||
try:
|
||||
# check if valid ID exists (workout exists)
|
||||
row = Workout.objects.get(id=id)
|
||||
except Workout.DoesNotExist:
|
||||
raise Http404("Workout doesn't exist")
|
||||
|
||||
if request.method == 'POST':
|
||||
# Form was submitted
|
||||
form = WorkoutForm(request.POST)
|
||||
@@ -3621,9 +3665,6 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
startdatetime = datetime.datetime.strptime(startdatetime,
|
||||
"%Y-%m-%d %H:%M:%S")
|
||||
startdatetime = timezone.make_aware(startdatetime)
|
||||
try:
|
||||
# check if valid ID exists (workout exists)
|
||||
row = Workout.objects.get(id=id)
|
||||
# check if user is owner of this workout
|
||||
if checkworkoutuser(request.user,row):
|
||||
row.name = name
|
||||
@@ -3658,39 +3699,22 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
url = reverse(workouts_view,args=[str(message)])
|
||||
|
||||
response = HttpResponseRedirect(url)
|
||||
except Workout.DoesNotExist:
|
||||
# create new workout
|
||||
r = Rower.objects.get(user=request.user)
|
||||
w = Workout(name=name,date=date,workouttype=workouttype,
|
||||
user=r)
|
||||
w.save()
|
||||
successmessage = "New Workout Created"
|
||||
url = reverse(workouts_view,
|
||||
kwargs = {
|
||||
'successmessage':str(successmessage),
|
||||
})
|
||||
|
||||
response = HttpResponseRedirect(url)
|
||||
else:
|
||||
message = "Invalid Form"
|
||||
url = reverse(workouts_view,args=[str(message)])
|
||||
response = HttpResponseRedirect(url)
|
||||
else: # form not POSTed
|
||||
form = WorkoutForm(instance=row)
|
||||
|
||||
|
||||
return response
|
||||
else:
|
||||
try:
|
||||
row = Workout.objects.get(id=id)
|
||||
form = WorkoutForm(instance=row)
|
||||
except Workout.DoesNotExist:
|
||||
raise Http404("Workout doesn't exist")
|
||||
|
||||
g = GraphImage.objects.filter(workout=row).order_by("-creationdatetime")
|
||||
# check if user is owner of this workout
|
||||
|
||||
if (checkworkoutuser(request.user,row)==False):
|
||||
message = "You are not allowed to edit this workout"
|
||||
url = reverse(workouts_view,args=[str(message)])
|
||||
raise Http404("You are not allowed to edit this workout")
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
# create interactive plot
|
||||
f1 = row.csvfilename
|
||||
u = request.user
|
||||
@@ -3745,12 +3769,6 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
})
|
||||
|
||||
|
||||
except Workout.DoesNotExist:
|
||||
message = "workout doesn't exist"
|
||||
url = reverse(workouts_view,
|
||||
kwargs = {
|
||||
'message': str(message)
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Create the chart image with wind corrected pace (OTW)
|
||||
@@ -5645,8 +5663,6 @@ def rower_teams_view(request,message='',successmessage=''):
|
||||
myrequests = TeamRequest.objects.filter(team__in=myteams)
|
||||
myinvites = TeamInvite.objects.filter(team__in=myteams)
|
||||
|
||||
print form
|
||||
|
||||
return render(request, 'teams.html',
|
||||
{
|
||||
'teams':ts,
|
||||
|
||||
@@ -60,8 +60,6 @@ def get_metar_data(airportcode,unixtime):
|
||||
return [0,0,message,'',timestamp]
|
||||
|
||||
|
||||
print temp_c,wind_dir,wind_speed
|
||||
|
||||
windbearing = float(wind_dir)
|
||||
wind_knots = float(wind_speed)
|
||||
wind_ms = 0.514444*wind_knots
|
||||
|
||||
Reference in New Issue
Block a user