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
|
||||
# trial and predict the pace
|
||||
from rowers.utils import rankingdistances,rankingdurations
|
||||
from time import strftime
|
||||
class PredictedPieceForm(forms.Form):
|
||||
unitchoices = (
|
||||
('t','minutes'),
|
||||
('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,
|
||||
initial='t',label='Unit')
|
||||
value = forms.FloatField(initial=10,label='Value')
|
||||
|
||||
class Meta:
|
||||
fields = ['value','pieceunit']
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
<p>At the bottom of the page, you will find predictions derived from the model.</p>
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
<p>Use this form to select a different date range:</p>
|
||||
<p>
|
||||
Select start and end date for a date range:
|
||||
<form enctype="multipart/form-data" action="" method="post">
|
||||
@@ -50,6 +49,10 @@
|
||||
<table>
|
||||
{{ dateform.as_table }}
|
||||
</table>
|
||||
<h2>Pieces used for predictions</h2>
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input name='daterange' class="button green" type="submit" value="Submit">
|
||||
</form>
|
||||
@@ -144,17 +147,6 @@
|
||||
|
||||
</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>
|
||||
|
||||
@@ -4544,13 +4544,9 @@ def otwcp_toadmin_view(request,theuser=0,
|
||||
def oterankings_view(request,theuser=0,
|
||||
startdate=timezone.now()-datetime.timedelta(days=365),
|
||||
enddate=timezone.now(),
|
||||
deltadays=-1,
|
||||
startdatestring="",
|
||||
enddatestring=""):
|
||||
|
||||
if deltadays>0:
|
||||
startdate = enddate-datetime.timedelta(days=int(deltadays))
|
||||
|
||||
if startdatestring != "":
|
||||
try:
|
||||
startdate = iso8601.parse_date(startdatestring)
|
||||
@@ -4563,13 +4559,6 @@ def oterankings_view(request,theuser=0,
|
||||
except ParseError:
|
||||
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:
|
||||
s = enddate
|
||||
enddate = startdate
|
||||
@@ -4596,9 +4585,8 @@ def oterankings_view(request,theuser=0,
|
||||
# get all OTW rows in date range
|
||||
|
||||
# process form
|
||||
if request.method == 'POST' and "daterange" in request.POST:
|
||||
if request.method == 'POST':
|
||||
dateform = DateRangeForm(request.POST)
|
||||
deltaform = DeltaDaysForm(request.POST)
|
||||
if dateform.is_valid():
|
||||
startdate = dateform.cleaned_data['startdate']
|
||||
enddate = dateform.cleaned_data['enddate']
|
||||
@@ -4606,34 +4594,38 @@ def oterankings_view(request,theuser=0,
|
||||
s = enddate
|
||||
enddate = startdate
|
||||
startdate = s
|
||||
elif request.method == 'POST' and "datedelta" in request.POST:
|
||||
deltaform = DeltaDaysForm(request.POST)
|
||||
if deltaform.is_valid():
|
||||
deltadays = deltaform.cleaned_data['deltadays']
|
||||
if deltadays:
|
||||
enddate = timezone.now()
|
||||
startdate = enddate-datetime.timedelta(days=deltadays)
|
||||
if startdate > enddate:
|
||||
s = enddate
|
||||
enddate = startdate
|
||||
startdate = s
|
||||
dateform = DateRangeForm(initial={
|
||||
'startdate': startdate,
|
||||
'enddate': enddate,
|
||||
})
|
||||
else:
|
||||
dateform = DateRangeForm(initial={
|
||||
'startdate': startdate,
|
||||
'enddate': enddate,
|
||||
})
|
||||
deltaform = DeltaDaysForm()
|
||||
|
||||
form = PredictedPieceForm(request.POST)
|
||||
clean = form.is_valid()
|
||||
value = form.cleaned_data['value']
|
||||
trankingdistances = form.cleaned_data['trankingdistances']
|
||||
trankingdistances = [int(d) for d in trankingdistances]
|
||||
trankingdurations = form.cleaned_data['trankingdurations']
|
||||
trankingdurations = [
|
||||
datetime.datetime.strptime(d,"%H:%M:%S").time() for d in trankingdurations
|
||||
]
|
||||
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':
|
||||
trankingdistances.append(value)
|
||||
else:
|
||||
trankingdurations.append(datetime.time(
|
||||
minute=minutevalue,
|
||||
hour=hourvalue,
|
||||
second=tvalue
|
||||
))
|
||||
else:
|
||||
form = PredictedPieceForm()
|
||||
dateform = DateRangeForm(initial={
|
||||
'startdate': startdate,
|
||||
'enddate': enddate,
|
||||
})
|
||||
deltaform = DeltaDaysForm()
|
||||
trankingdistances = rankingdistances
|
||||
trankingdurations = rankingdurations
|
||||
|
||||
# get all 2k (if any) - this rower, in date range
|
||||
try:
|
||||
@@ -4653,7 +4645,6 @@ def oterankings_view(request,theuser=0,
|
||||
# test to fix bug
|
||||
startdate = datetime.datetime.combine(startdate,datetime.time())
|
||||
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 = ""
|
||||
|
||||
|
||||
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 = []
|
||||
|
||||
|
||||
|
||||
for rankingduration in rankingdurations:
|
||||
for rankingduration in trankingdurations:
|
||||
t = 3600.*rankingduration.hour
|
||||
t += 60.*rankingduration.minute
|
||||
t += rankingduration.second
|
||||
@@ -4828,7 +4799,7 @@ def oterankings_view(request,theuser=0,
|
||||
|
||||
paulslope = 5.
|
||||
|
||||
for rankingdistance in rankingdistances:
|
||||
for rankingdistance in trankingdistances:
|
||||
|
||||
delta = paulslope * np.log(rankingdistance/distance_10)/np.log(2)
|
||||
|
||||
@@ -4880,12 +4851,6 @@ def oterankings_view(request,theuser=0,
|
||||
|
||||
# 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)
|
||||
return render(request, 'oterankings.html',
|
||||
@@ -4898,7 +4863,6 @@ def oterankings_view(request,theuser=0,
|
||||
'avgpower':avgpower,
|
||||
'form':form,
|
||||
'dateform':dateform,
|
||||
'deltaform':deltaform,
|
||||
'id': theuser,
|
||||
'theuser':uu,
|
||||
'startdate':startdate,
|
||||
|
||||
Reference in New Issue
Block a user