Private
Public Access
1
0

added registration form

This commit is contained in:
Sander Roosendaal
2018-04-20 13:38:00 +02:00
parent 82da46ef0c
commit f70a2b2510
6 changed files with 199 additions and 28 deletions

View File

@@ -427,14 +427,14 @@ sexcategories = (
('female','female'),
('not specified','not specified'),
)
weightcategories = (
('hwt','heavy-weight'),
('lwt','light-weight'),
)
# Extension of User with rowing specific data
class Rower(models.Model):
weightcategories = (
('hwt','heavy-weight'),
('lwt','light-weight'),
)
stravatypes = (
('Ride','Ride'),
@@ -1327,11 +1327,15 @@ def auto_delete_strokedata_on_delete(sender, instance, **kwargs):
# Virtual Race results (for keeping results when workouts are deleted)
class VirtualRaceResult(models.Model):
user = models.ForeignKey(Rower)
teamname = models.CharField(max_length=20,verbose_name = 'Team Name',
blank=True,null=True)
username = models.CharField(max_length=150)
workout = models.ForeignKey(Workout)
weightcategory = models.CharField(default="hwt",max_length=10)
workout = models.ForeignKey(Workout,blank=True,null=True)
weightcategory = models.CharField(default="hwt",max_length=10,
choices=weightcategories,
verbose_name='Weight Category')
race = models.ForeignKey(VirtualRace)
duration = models.TimeField(default=3600)
duration = models.TimeField(default=datetime.time(1,0))
boattype = models.CharField(choices=boattypes,max_length=40,
default='1x',
verbose_name = 'Boat Type'
@@ -1344,7 +1348,12 @@ class VirtualRaceResult(models.Model):
age = models.IntegerField(null=True)
class VirtualRaceResultForm(ModelForm):
class Meta:
model = VirtualRaceResult
fields = ['teamname','weightcategory','boattype','age']
from rowers.metrics import rowingmetrics
strokedatafields = {

View File

@@ -612,6 +612,13 @@ def add_rower_race(r,race):
def remove_rower_race(r,race):
race.rower.remove(r)
records = VirtualRaceResult.objects.filter(user=r,
workout__isnull=True,
race=race)
for r in records:
r.delete()
return 1
# Low Level functions - to be called by higher level methods

View File

@@ -87,12 +87,13 @@
<div id="results">
<h2>Results</h2>
<p>
{% if results %}
{% if results or dns %}
<table class="listtable shortpadded" width="100%">
<thead>
<tr>
<th>&nbsp;</th>
<th>Name</th>
<th>Team Name</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
@@ -109,7 +110,8 @@
<td>{{ forloop.counter }}</td>
<td>
<a href="/rowers/workout/{{ result.workout.id }}">
{{ result.username }}</a></td>
{{ result.username }}</a></td>
<td>{{ result.teamname }}</th>
<td>{{ result.age }}</td>
<td>{{ result.sex }}</td>
<td>{{ result.weightcategory }}</td>
@@ -120,9 +122,8 @@
{% for result in dns %}
<tr>
<td>&nbsp;</td>
<td>
<a href="/rowers/workout/{{ result.workout.id }}">
{{ result.username }}</a></td>
<td>{{ result.username }}</td>
<td>{{ result.teamname }}</td>
<td>{{ result.age }}</td>
<td>{{ result.sex }}</td>
<td>{{ result.weightcategory }}</td>
@@ -137,6 +138,30 @@
{% endif %}
</p>
</div>
<div id="registered">
{% if records %}
<h2>Registered Competitors</h2>
<table class="listtable shortpadded" width="80%">
<thead>
<tr>
<th>Name</th>
<th>Team Name</th>
<th>Age</th>
<th>Weight Category</th>
</tr>
<tbody>
{% for record in records %}
<tr>
<td>{{ record.username }}
<td>{{ record.teamname }}</td>
<td>{{ record.weightcategory }}</td>
<td>{{ record.age }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
<div id="rules">
<h2>Rules</h2>
<p>

View File

@@ -0,0 +1,50 @@
{% extends "base.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Register for a Virtual Race{% endblock %}
{% block meta %}
<script type='text/javascript'
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
</script>
<script type='text/javascript'
src='https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js'>
</script>
<script>
</script>
{% endblock %}
{% block content %}
<div class="grid_12 alpha">
<div class="grid_6 alpha">
<h1>Register for {{ race.name }}</h1>
</div>
</div>
<form id="race_register_form"
method="post">
<div class="grid_12 alpha">
<p>If you are participating in a single, we will take the age and weight
value from your user settings. For other boat types, please fill out
crew weight class and average age.
</p>
<div class="grid_6 alpha">
<table width="100%">
{{ form.as_table }}
</table>
</div>
</div>
<div class="grid_2 prefix_2 suffix_8">
{% csrf_token %}
<input class="button green" type="submit" value="Submit">
</div>
</form>
{% endblock %}
{% block scripts %}
{% endblock %}

View File

@@ -5,6 +5,7 @@ import dateutil.parser
import json
import datetime
register = template.Library()
from rowers.utils import calculate_age
def strfdelta(tdelta):
minutes,seconds = divmod(tdelta.seconds,60)
@@ -136,6 +137,11 @@ from rowers.views import hasplannedsessions
def is_planmember(user):
return hasplannedsessions(user)
@register.filter
def get_age(r):
return calculate_age(r.birthdate)
@register.filter
def user_teams(user):
try:
@@ -196,6 +202,7 @@ def team_rowers(user):
return []
@register.filter
def verbosetimeperiod(timeperiod):
table = {

View File

@@ -67,7 +67,7 @@ from rowers.models import (
WorkoutComment,WorkoutCommentForm,RowerExportForm,
CalcAgePerformance,PowerTimeFitnessMetric,PlannedSessionForm,
PlannedSessionFormSmall,GeoCourseEditForm,VirtualRace,
VirtualRaceForm,
VirtualRaceForm,VirtualRaceResultForm,
)
from rowers.models import (
FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet
@@ -13406,14 +13406,25 @@ def virtualevent_view(request,id=0):
buttons += ['editbutton']
results = VirtualRaceResult.objects.filter(
race=race
race=race,
workout__isnull=False,
).order_by("duration")
# to-do - add DNS
dns = []
# to-do - add registered
registered = []
if timezone.now() > race.evaluation_closure:
print "aap"
dns = VirtualRaceResult.objects.filter(
race=race,
workout__isnull=True,
)
print dns[0].username,"noot"
records = VirtualRaceResult.objects.filter(
race=race
)
return render(request,'virtualevent.html',
{
@@ -13424,6 +13435,7 @@ def virtualevent_view(request,id=0):
'results':results,
'buttons':buttons,
'dns':dns,
'records':records,
})
@login_required()
@@ -13456,19 +13468,80 @@ def virtualevent_register_view(request,id=0):
except VirtualRace.DoesNotExist:
raise Http404("Virtual Race does not exist")
if race_can_register(r,race):
add_rower_race(r,race)
messages.info(request,
"You have successfully registered for this race. Good luck!")
else:
if not race_can_register(r,race):
messages.error(request,"You cannot register for this race")
url = reverse(virtualevent_view,
kwargs = {
'id':race.id
url = reverse(virtualevent_view,
kwargs = {
'id':race.id
})
return HttpResponseRedirect(url)
return HttpResponseRedirect(url)
# we're still here
if request.method == 'POST':
# process form
form = VirtualRaceResultForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
teamname = cd['teamname']
boattype = cd['boattype']
if not boattype == '1x':
weightcategory = cd['weightcategory']
age = cd['age']
else:
weightcategory = r.weightcategory
age = calculate_age(r.birthdate)
record = VirtualRaceResult(
user=r,
teamname=teamname,
race=race,
username = u'{f} {l}'.format(
f = r.user.first_name,
l = r.user.last_name
),
weightcategory=weightcategory,
duration=datetime.time(0,0),
boattype=boattype,
coursecompleted=False,
sex=r.sex,
age=age
)
record.save()
add_rower_race(r,race)
messages.info(
request,
"You have successfully registered for this race. Good luck!"
)
url = reverse(virtualevent_view,
kwargs = {
'id':race.id
})
return HttpResponseRedirect(url)
else:
initial = {
'age': calculate_age(r.birthdate),
'weightcategory': r.weightcategory,
}
form = VirtualRaceResultForm(initial=initial)
return render(request,'virtualeventregister.html',
{
'form':form,
'race':race,
'rower':r,
})
@login_required()
def virtualevent_create_view(request):