diff --git a/rowers/templates/teambuttons.html b/rowers/templates/teambuttons.html
new file mode 100644
index 00000000..b91e27c7
--- /dev/null
+++ b/rowers/templates/teambuttons.html
@@ -0,0 +1,9 @@
+
+
+
diff --git a/rowers/tests.py b/rowers/tests.py
index 589a8bde..1b24e6cd 100644
--- a/rowers/tests.py
+++ b/rowers/tests.py
@@ -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)
diff --git a/rowers/views.py b/rowers/views.py
index 31b88755..7ef32f3a 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -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'])
@@ -2057,9 +2057,14 @@ def multi_compare_view(request):
r = Rower.objects.get(user=request.user)
result = request.user.is_authenticated() and ispromember(request.user)
if result:
- promember=1
+ 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,137 +3665,111 @@ 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
- 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.save()
- # change data in csv file
+ # 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.save()
+ # 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"
- url = "/rowers/workout/"+str(row.id)+"/edit"
- url = reverse(workout_edit_view,
- kwargs = {
- 'id':str(row.id),
- 'successmessage':str(successmessage),
- })
- response = HttpResponseRedirect(url)
- else:
- message = "You are not allowed to change this workout"
- url = reverse(workouts_view,args=[str(message)])
+ 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"
+ url = "/rowers/workout/"+str(row.id)+"/edit"
+ url = reverse(workout_edit_view,
+ kwargs = {
+ 'id':str(row.id),
+ 'successmessage':str(successmessage),
+ })
+ response = HttpResponseRedirect(url)
+ else:
+ message = "You are not allowed to change this workout"
+ 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)
- 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)
+
+
+ try:
+ row = Workout.objects.get(id=id)
+ 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):
+ raise Http404("You are not allowed to edit this workout")
+
+ # create interactive plot
+ f1 = row.csvfilename
+ u = request.user
+ r = Rower.objects.get(user=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
- return response
else:
- try:
- row = Workout.objects.get(id=id)
- form = WorkoutForm(instance=row)
- 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)])
-
- return HttpResponseRedirect(url)
-
- else:
- # create interactive plot
- f1 = row.csvfilename
- u = request.user
- r = Rower.objects.get(user=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:
- res = googlemap_chart(rowdata.df[' latitude'],
- rowdata.df[' longitude'],
- row.name)
- gmscript = res[0]
- gmdiv = res[1]
- else:
- gmscript = ""
- gmdiv = ""
-
-
- # render page
- if (len(g)<=3):
- return render(request, 'workout_form.html',
- {'form':form,
- 'workout':row,
- 'graphs1':g[0:3],
- 'message': message,
- 'successmessage': successmessage,
- 'gmscript': gmscript,
- 'gmdiv': gmdiv,
- })
-
- else:
- return render(request, 'workout_form.html',
- {'form':form,
- 'workout':row,
- 'graphs1':g[0:3],
- 'graphs2':g[3:6],
- 'message': message,
- 'successmessage': successmessage,
- 'gmscript': gmscript,
- 'gmdiv': gmdiv,
- })
+ hascoordinates = 0
- except Workout.DoesNotExist:
- message = "workout doesn't exist"
- url = reverse(workouts_view,
- kwargs = {
- 'message': str(message)
- })
- return HttpResponseRedirect(url)
+ if hascoordinates:
+ res = googlemap_chart(rowdata.df[' latitude'],
+ rowdata.df[' longitude'],
+ row.name)
+ gmscript = res[0]
+ gmdiv = res[1]
+ else:
+ gmscript = ""
+ gmdiv = ""
+
+
+ # render page
+ if (len(g)<=3):
+ return render(request, 'workout_form.html',
+ {'form':form,
+ 'workout':row,
+ 'graphs1':g[0:3],
+ 'message': message,
+ 'successmessage': successmessage,
+ 'gmscript': gmscript,
+ 'gmdiv': gmdiv,
+ })
+
+ else:
+ return render(request, 'workout_form.html',
+ {'form':form,
+ 'workout':row,
+ 'graphs1':g[0:3],
+ 'graphs2':g[3:6],
+ 'message': message,
+ 'successmessage': successmessage,
+ 'gmscript': gmscript,
+ 'gmdiv': gmdiv,
+ })
+
+
+ return HttpResponseRedirect(url)
# Create the chart image with wind corrected pace (OTW)
@user_passes_test(ispromember,login_url="/",redirect_field_name=None)
@@ -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,
diff --git a/rowers/weather.py b/rowers/weather.py
index 5b51b9af..9acf5154 100644
--- a/rowers/weather.py
+++ b/rowers/weather.py
@@ -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