Private
Public Access
1
0

improved date form on oterankings

This commit is contained in:
Sander Roosendaal
2018-10-22 19:30:31 +02:00
parent 37fa023d70
commit f359082be4
3 changed files with 63 additions and 80 deletions

View File

@@ -286,14 +286,41 @@ class WorkoutSplitForm(forms.Form):
# This form is used on the Analysis page to add a custom distance/time # This form is used on the Analysis page to add a custom distance/time
# trial and predict the pace # trial and predict the pace
from rowers.utils import rankingdistances,rankingdurations
from time import strftime
class PredictedPieceForm(forms.Form): class PredictedPieceForm(forms.Form):
unitchoices = ( unitchoices = (
('t','minutes'), ('t','minutes'),
('d','meters'), ('d','meters'),
) )
rankingdistancechoices = []
rankingdurationchoices = []
for d in rankingdistances:
thetuple = (d,str(d)+' m')
rankingdistancechoices.append(thetuple)
for d in rankingdurations:
timestr = d.strftime("%H:%M:%S")
thetuple = (timestr,timestr)
rankingdurationchoices.append(thetuple)
trankingdistances = forms.MultipleChoiceField(
required=True,
choices=rankingdistancechoices,initial=rankingdistances,
label='Ranking Distances'
)
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')
pieceunit = forms.ChoiceField(required=True,choices=unitchoices, pieceunit = forms.ChoiceField(required=True,choices=unitchoices,
initial='t',label='Unit') initial='t',label='Unit')
value = forms.FloatField(initial=10,label='Value')
class Meta: class Meta:
fields = ['value','pieceunit'] fields = ['value','pieceunit']

View File

@@ -42,7 +42,6 @@
<p>At the bottom of the page, you will find predictions derived from the model.</p> <p>At the bottom of the page, you will find predictions derived from the model.</p>
</li> </li>
<li class="grid_2"> <li class="grid_2">
<p>Use this form to select a different date range:</p>
<p> <p>
Select start and end date for a date range: Select start and end date for a date range:
<form enctype="multipart/form-data" action="" method="post"> <form enctype="multipart/form-data" action="" method="post">
@@ -50,6 +49,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>
@@ -144,17 +147,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

@@ -4544,13 +4544,9 @@ def otwcp_toadmin_view(request,theuser=0,
def oterankings_view(request,theuser=0, def oterankings_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)
@@ -4563,13 +4559,6 @@ def oterankings_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
@@ -4596,9 +4585,8 @@ def oterankings_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']
@@ -4606,34 +4594,38 @@ def oterankings_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 = PredictedPieceForm(request.POST)
deltaform = DeltaDaysForm(request.POST) clean = form.is_valid()
if deltaform.is_valid(): value = form.cleaned_data['value']
deltadays = deltaform.cleaned_data['deltadays'] trankingdistances = form.cleaned_data['trankingdistances']
if deltadays: trankingdistances = [int(d) for d in trankingdistances]
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 hourvalue,tvalue = divmod(value,60)
startdate = s hourvalue = int(hourvalue)
dateform = DateRangeForm(initial={ minutevalue = int(tvalue)
'startdate': startdate, tvalue = int(60*(tvalue-minutevalue))
'enddate': enddate, if hourvalue >= 24:
}) hourvalue = 23
else: pieceunit = form.cleaned_data['pieceunit']
dateform = DateRangeForm(initial={ if pieceunit == 'd':
'startdate': startdate, trankingdistances.append(value)
'enddate': enddate, else:
}) trankingdurations.append(datetime.time(
deltaform = DeltaDaysForm() minute=minutevalue,
hour=hourvalue,
second=tvalue
))
else: else:
form = PredictedPieceForm()
dateform = DateRangeForm(initial={ dateform = DateRangeForm(initial={
'startdate': startdate, 'startdate': startdate,
'enddate': enddate, 'enddate': enddate,
}) })
deltaform = DeltaDaysForm() trankingdistances = rankingdistances
trankingdurations = rankingdurations
# get all 2k (if any) - this rower, in date range # get all 2k (if any) - this rower, in date range
try: try:
@@ -4653,7 +4645,6 @@ def oterankings_view(request,theuser=0,
# test to fix bug # test to fix bug
startdate = datetime.datetime.combine(startdate,datetime.time()) startdate = datetime.datetime.combine(startdate,datetime.time())
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59)) enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
#enddate = enddate+datetime.timedelta(days=1)
@@ -4754,34 +4745,14 @@ def oterankings_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,tvalue = divmod(value,60)
hourvalue = int(hourvalue)
minutevalue = int(tvalue)
tvalue = int(60*(tvalue-minutevalue))
if hourvalue >= 24:
hourvalue = 23
pieceunit = form.cleaned_data['pieceunit']
if pieceunit == 'd':
rankingdistances.append(value)
else:
rankingdurations.append(datetime.time(
minute=minutevalue,
hour=hourvalue,
second=tvalue
))
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
@@ -4828,7 +4799,7 @@ def oterankings_view(request,theuser=0,
paulslope = 5. paulslope = 5.
for rankingdistance in rankingdistances: for rankingdistance in trankingdistances:
delta = paulslope * np.log(rankingdistance/distance_10)/np.log(2) delta = paulslope * np.log(rankingdistance/distance_10)/np.log(2)
@@ -4880,12 +4851,6 @@ def oterankings_view(request,theuser=0,
# del form.fields["pieceunit"] # del form.fields["pieceunit"]
startdatestring = startdate.strftime('%Y-%m-%d')
enddatestring = enddate.strftime('%Y-%m-%d')
request.session['startdate'] = startdatestring
request.session['enddate'] = enddatestring
messages.error(request,message) messages.error(request,message)
return render(request, 'oterankings.html', return render(request, 'oterankings.html',
@@ -4898,7 +4863,6 @@ def oterankings_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,