added registration form
This commit is contained in:
@@ -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 = {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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> </th>
|
||||
<th>Name</th>
|
||||
<th>Team Name</th>
|
||||
<th> </th>
|
||||
<th> </th>
|
||||
<th> </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> </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>
|
||||
|
||||
50
rowers/templates/virtualeventregister.html
Normal file
50
rowers/templates/virtualeventregister.html
Normal 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 %}
|
||||
@@ -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 = {
|
||||
|
||||
101
rowers/views.py
101
rowers/views.py
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user