improved date form on oterankings
This commit is contained in:
@@ -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']
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user