Private
Public Access
1
0

otwranking and oteranking improved forms

This commit is contained in:
Sander Roosendaal
2018-10-22 20:14:33 +02:00
parent f359082be4
commit 47682f69e5
4 changed files with 99 additions and 93 deletions

View File

@@ -288,6 +288,20 @@ class WorkoutSplitForm(forms.Form):
# trial and predict the pace # trial and predict the pace
from rowers.utils import rankingdistances,rankingdurations from rowers.utils import rankingdistances,rankingdurations
from time import strftime from time import strftime
class OteWorkoutTypeForm(forms.Form):
choices = (
('rower','Indoor Rower'),
('dynamic','Dynamic Indoor Rower'),
('slides','Indoor Rower on Slides'),
)
workouttypes = forms.MultipleChoiceField(
required=True,
choices=choices,
label='Workout Types',
initial = [a for a,b in choices],
)
class PredictedPieceForm(forms.Form): class PredictedPieceForm(forms.Form):
unitchoices = ( unitchoices = (
('t','minutes'), ('t','minutes'),
@@ -318,13 +332,33 @@ class PredictedPieceForm(forms.Form):
label='Ranking Durations' label='Ranking Durations'
) )
value = forms.FloatField(initial=10,label='Free ranking piece') value = forms.FloatField(initial=10,label='Free ranking piece (minutes)')
pieceunit = forms.ChoiceField(required=True,choices=unitchoices, pieceunit = forms.ChoiceField(required=True,choices=unitchoices,
initial='t',label='Unit') initial='t',label='Unit')
class Meta: class Meta:
fields = ['value','pieceunit'] fields = ['value','pieceunit']
class PredictedPieceFormNoDistance(forms.Form):
rankingdurationchoices = []
for d in rankingdurations:
timestr = d.strftime("%H:%M:%S")
thetuple = (timestr,timestr)
rankingdurationchoices.append(thetuple)
trankingdurations = forms.MultipleChoiceField(
required=True,
choices=rankingdurationchoices,
initial=[a for a,b in rankingdurationchoices],
label='Ranking Durations'
)
value = forms.FloatField(initial=10,label='Free ranking piece')
# On the Geeky side, to update stream information for river dwellers # On the Geeky side, to update stream information for river dwellers
class UpdateStreamForm(forms.Form): class UpdateStreamForm(forms.Form):
unitchoices = ( unitchoices = (

View File

@@ -53,6 +53,10 @@
<table> <table>
{{ form.as_table }} {{ form.as_table }}
</table> </table>
<h2>Workout Type</h2>
<table>
{{ workouttypeform.as_p }}
</table>
{% csrf_token %} {% csrf_token %}
<input name='daterange' class="button green" type="submit" value="Submit"> <input name='daterange' class="button green" type="submit" value="Submit">
</form> </form>
@@ -109,10 +113,6 @@
<li class="grid_2"> <li class="grid_2">
<h2>Pace predictions for Ranking Pieces</h2> <h2>Pace predictions for Ranking Pieces</h2>
<p>Add non-ranking piece using the form. The piece will be added in the prediction tables below. </p>
<table width="100%" class="listtable"> <table width="100%" class="listtable">
<thead> <thead>
<tr> <tr>

View File

@@ -50,6 +50,10 @@
<table> <table>
{{ dateform.as_table }} {{ dateform.as_table }}
</table> </table>
<h2>Pieces used for predictions</h2>
<table>
{{ form.as_table }}
</table>
{% csrf_token %} {% csrf_token %}
<input name='daterange' class="button green" type="submit" value="Submit"> <input name='daterange' class="button green" type="submit" value="Submit">
</form> </form>
@@ -138,17 +142,6 @@
</li> </li>
<li class="grid_2">
<form enctype="multipart/form-data" action="{{ formloc }}" method="post">
{{ form.value }} {{ form.pieceunit }}
{% csrf_token %}
minutes
<input name="piece" class="button green"
action=""
type="submit" value="Add">
</form>
</li>
</ul> </ul>

View File

@@ -44,7 +44,7 @@ from rowers.forms import (
PlannedSessionTeamForm,PlannedSessionTeamMemberForm, PlannedSessionTeamForm,PlannedSessionTeamMemberForm,
VirtualRaceSelectForm,WorkoutRaceSelectForm,CourseSelectForm, VirtualRaceSelectForm,WorkoutRaceSelectForm,CourseSelectForm,
RaceResultFilterForm,PowerIntervalUpdateForm,FlexAxesForm, RaceResultFilterForm,PowerIntervalUpdateForm,FlexAxesForm,
FlexOptionsForm,DataFrameColumnsForm, FlexOptionsForm,DataFrameColumnsForm,OteWorkoutTypeForm,
) )
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
@@ -58,7 +58,7 @@ from django.core.mail import send_mail, BadHeaderError
from rowers.forms import ( from rowers.forms import (
SummaryStringForm,IntervalUpdateForm,StrokeDataForm, SummaryStringForm,IntervalUpdateForm,StrokeDataForm,
StatsOptionsForm,PredictedPieceForm,DateRangeForm,DeltaDaysForm, StatsOptionsForm,PredictedPieceForm,DateRangeForm,DeltaDaysForm,
FitnessMetricForm, FitnessMetricForm,PredictedPieceFormNoDistance,
EmailForm, RegistrationForm, RegistrationFormTermsOfService, EmailForm, RegistrationForm, RegistrationFormTermsOfService,
RegistrationFormUniqueEmail,RegistrationFormSex, RegistrationFormUniqueEmail,RegistrationFormSex,
CNsummaryForm,UpdateWindForm, CNsummaryForm,UpdateWindForm,
@@ -4114,13 +4114,9 @@ def workout_update_cp_view(request,id=0):
def otwrankings_view(request,theuser=0, def otwrankings_view(request,theuser=0,
startdate=timezone.now()-datetime.timedelta(days=365), startdate=timezone.now()-datetime.timedelta(days=365),
enddate=timezone.now(), enddate=timezone.now(),
deltadays=-1,
startdatestring="", startdatestring="",
enddatestring=""): enddatestring=""):
if deltadays>0:
startdate = enddate-datetime.timedelta(days=int(deltadays))
if startdatestring != "": if startdatestring != "":
try: try:
startdate = iso8601.parse_date(startdatestring) startdate = iso8601.parse_date(startdatestring)
@@ -4133,13 +4129,6 @@ def otwrankings_view(request,theuser=0,
except ParseError: except ParseError:
pass pass
# if 'startdate' in request.session:
# startdate = iso8601.parse_date(request.session['startdate'])
# if 'enddate' in request.session:
# enddate = iso8601.parse_date(request.session['enddate'])
if enddate < startdate: if enddate < startdate:
s = enddate s = enddate
enddate = startdate enddate = startdate
@@ -4165,9 +4154,8 @@ def otwrankings_view(request,theuser=0,
# get all OTW rows in date range # get all OTW rows in date range
# process form # process form
if request.method == 'POST' and "daterange" in request.POST: if request.method == 'POST':
dateform = DateRangeForm(request.POST) dateform = DateRangeForm(request.POST)
deltaform = DeltaDaysForm(request.POST)
if dateform.is_valid(): if dateform.is_valid():
startdate = dateform.cleaned_data['startdate'] startdate = dateform.cleaned_data['startdate']
enddate = dateform.cleaned_data['enddate'] enddate = dateform.cleaned_data['enddate']
@@ -4175,34 +4163,36 @@ def otwrankings_view(request,theuser=0,
s = enddate s = enddate
enddate = startdate enddate = startdate
startdate = s startdate = s
elif request.method == 'POST' and "datedelta" in request.POST: form = PredictedPieceFormNoDistance(request.POST)
deltaform = DeltaDaysForm(request.POST) if form.is_valid():
if deltaform.is_valid(): value = form.cleaned_data['value']
deltadays = deltaform.cleaned_data['deltadays'] else:
if deltadays: value = None
enddate = timezone.now() trankingdurations = form.cleaned_data['trankingdurations']
startdate = enddate-datetime.timedelta(days=deltadays) trankingdurations = [
if startdate > enddate: datetime.datetime.strptime(d,"%H:%M:%S").time() for d in trankingdurations
s = enddate ]
enddate = startdate if value:
startdate = s hourvalue,tvalue = divmod(value,60)
dateform = DateRangeForm(initial={ hourvalue = int(hourvalue)
'startdate': startdate, minutevalue = int(tvalue)
'enddate': enddate, tvalue = int(60*(tvalue-minutevalue))
}) if hourvalue >= 24:
else: hourvalue = 23
dateform = DateRangeForm(initial={ trankingdurations.append(datetime.time(
'startdate': startdate, minute=minutevalue,
'enddate': enddate, hour=hourvalue,
}) second=tvalue
deltaform = DeltaDaysForm() ))
else: else:
form = PredictedPieceFormNoDistance()
dateform = DateRangeForm(initial={ dateform = DateRangeForm(initial={
'startdate': startdate, 'startdate': startdate,
'enddate': enddate, 'enddate': enddate,
}) })
deltaform = DeltaDaysForm() workouttypes = ['rower','slides','dynamic']
trankingdurations = rankingdurations
# get all 2k (if any) - this rower, in date range # get all 2k (if any) - this rower, in date range
try: try:
@@ -4320,26 +4310,11 @@ def otwrankings_view(request,theuser=0,
message = "" message = ""
if request.method == 'POST' and "piece" in request.POST:
form = PredictedPieceForm(request.POST)
clean = form.is_valid()
value = form.cleaned_data['value']
hourvalue,value = divmod(value,60)
hourvalue = int(hourvalue)
minutevalue = int(value)
value = int(60*(value-minutevalue))
if hourvalue >= 24:
hourvalue = 23
rankingdurations.append(datetime.time(minute=minutevalue,
hour=hourvalue,
second=value))
else:
form = PredictedPieceForm()
cpredictions = [] cpredictions = []
for rankingduration in rankingdurations: for rankingduration in trankingdurations:
t = 3600.*rankingduration.hour t = 3600.*rankingduration.hour
t += 60.*rankingduration.minute t += 60.*rankingduration.minute
t += rankingduration.second t += rankingduration.second
@@ -4368,7 +4343,6 @@ def otwrankings_view(request,theuser=0,
cpredictions.append(a) cpredictions.append(a)
del form.fields["pieceunit"]
startdatestring = startdate.strftime('%Y-%m-%d') startdatestring = startdate.strftime('%Y-%m-%d')
enddatestring = enddate.strftime('%Y-%m-%d') enddatestring = enddate.strftime('%Y-%m-%d')
@@ -4386,7 +4360,6 @@ def otwrankings_view(request,theuser=0,
'avgpower':avgpower, 'avgpower':avgpower,
'form':form, 'form':form,
'dateform':dateform, 'dateform':dateform,
'deltaform':deltaform,
'id': theuser, 'id': theuser,
'theuser':uu, 'theuser':uu,
'startdate':startdate, 'startdate':startdate,
@@ -4594,36 +4567,45 @@ def oterankings_view(request,theuser=0,
s = enddate s = enddate
enddate = startdate enddate = startdate
startdate = s startdate = s
workouttypeform = OteWorkoutTypeForm(request.POST)
if workouttypeform.is_valid():
workouttypes = workouttypeform.cleaned_data['workouttypes']
form = PredictedPieceForm(request.POST) form = PredictedPieceForm(request.POST)
clean = form.is_valid() if form.is_valid():
value = form.cleaned_data['value'] value = form.cleaned_data['value']
pieceunit = form.cleaned_data['pieceunit']
else:
value = None
trankingdistances = form.cleaned_data['trankingdistances'] trankingdistances = form.cleaned_data['trankingdistances']
trankingdistances = [int(d) for d in trankingdistances] trankingdistances = [int(d) for d in trankingdistances]
trankingdurations = form.cleaned_data['trankingdurations'] trankingdurations = form.cleaned_data['trankingdurations']
trankingdurations = [ trankingdurations = [
datetime.datetime.strptime(d,"%H:%M:%S").time() for d in trankingdurations datetime.datetime.strptime(d,"%H:%M:%S").time() for d in trankingdurations
] ]
hourvalue,tvalue = divmod(value,60) if value:
hourvalue = int(hourvalue) hourvalue,tvalue = divmod(value,60)
minutevalue = int(tvalue) hourvalue = int(hourvalue)
tvalue = int(60*(tvalue-minutevalue)) minutevalue = int(tvalue)
if hourvalue >= 24: tvalue = int(60*(tvalue-minutevalue))
hourvalue = 23 if hourvalue >= 24:
pieceunit = form.cleaned_data['pieceunit'] hourvalue = 23
if pieceunit == 'd': if pieceunit == 'd':
trankingdistances.append(value) trankingdistances.append(value)
else: else:
trankingdurations.append(datetime.time( trankingdurations.append(datetime.time(
minute=minutevalue, minute=minutevalue,
hour=hourvalue, hour=hourvalue,
second=tvalue second=tvalue
)) ))
else: else:
form = PredictedPieceForm() form = PredictedPieceForm()
dateform = DateRangeForm(initial={ dateform = DateRangeForm(initial={
'startdate': startdate, 'startdate': startdate,
'enddate': enddate, 'enddate': enddate,
}) })
workouttypeform = OteWorkoutTypeForm()
workouttypes = ['rower','slides','dynamic']
trankingdistances = rankingdistances trankingdistances = rankingdistances
trankingdurations = rankingdurations trankingdurations = rankingdurations
@@ -4654,11 +4636,7 @@ def oterankings_view(request,theuser=0,
theworkouts = Workout.objects.filter( theworkouts = Workout.objects.filter(
user=r,rankingpiece=True, user=r,rankingpiece=True,
workouttype__in=[ workouttype__in=workouttypes,
'rower',
'dynamic',
'slides'
],
startdatetime__gte=startdate, startdatetime__gte=startdate,
startdatetime__lte=enddate startdatetime__lte=enddate
).order_by("-startdatetime") ).order_by("-startdatetime")
@@ -4863,6 +4841,7 @@ def oterankings_view(request,theuser=0,
'avgpower':avgpower, 'avgpower':avgpower,
'form':form, 'form':form,
'dateform':dateform, 'dateform':dateform,
'workouttypeform':workouttypeform,
'id': theuser, 'id': theuser,
'theuser':uu, 'theuser':uu,
'startdate':startdate, 'startdate':startdate,