worked through a few more views. Need to do analysis, api, error
This commit is contained in:
@@ -387,11 +387,6 @@ rules.add_perm('plannedsession.view_session',can_view_session)
|
||||
rules.add_perm('plannedsession.change_session',can_change_session)
|
||||
rules.add_perm('plannedsession.delete_session',can_delete_session)
|
||||
|
||||
|
||||
|
||||
# checkaccessplanuser (models.py)
|
||||
# getrequestrower, getrequestplanrower
|
||||
|
||||
# TEAM (group) permissions
|
||||
|
||||
"""
|
||||
@@ -455,8 +450,44 @@ rules.add_perm('teams.delete_team',can_delete_team)
|
||||
- rules to add, view, delete, change
|
||||
- GeoCourse
|
||||
- rules to add, view, delete, change
|
||||
- RaceLogo
|
||||
"""
|
||||
|
||||
@rules.predicate
|
||||
def can_change_course(user,course):
|
||||
if user.is_anonymous:
|
||||
return False
|
||||
|
||||
return course.manager == user.rower
|
||||
|
||||
@rules.predicate
|
||||
def can_delete_course(user,course):
|
||||
if user.is_anonymous:
|
||||
return False
|
||||
|
||||
return course.manager == user.rower
|
||||
|
||||
@rules.predicate
|
||||
def can_delete_logo(user,logo):
|
||||
if user.is_anonymous:
|
||||
return False
|
||||
|
||||
return logo.user == user
|
||||
|
||||
@rules.predicate
|
||||
def can_change_race(user,race):
|
||||
if user.is_anonymous:
|
||||
return False
|
||||
|
||||
return race.manager == user
|
||||
|
||||
rules.add_perm('course.change_course',can_change_course)
|
||||
rules.add_perm('course.delete_course',can_delete_course)
|
||||
|
||||
rules.add_perm('racelogo.delete_logo',can_delete_logo)
|
||||
|
||||
rules.add_perm('virtualevent.change_race',can_change_race)
|
||||
|
||||
|
||||
# ANALYSIS permissions
|
||||
|
||||
|
||||
@@ -191,7 +191,7 @@ urlpatterns = [
|
||||
views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'),
|
||||
re_path(r'^virtualevent/(?P<id>\d+)/submit/(?P<workoutid>\b[0-9A-Fa-f]+\b)/$',
|
||||
views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'),
|
||||
re_path(r'^virtualevent/(?P<raceid>\d+)/disqualify/(?P<recordid>\d+)/',
|
||||
re_path(r'^virtualevent/(?P<id>\d+)/disqualify/(?P<recordid>\d+)/',
|
||||
views.virtualevent_disqualify_view,name='virtualevent_disqualify_view'),
|
||||
re_path(r'^list-workouts/$',views.workouts_view,name='workouts_view'),
|
||||
re_path(r'^list-courses/$',views.courses_view,name='courses_view'),
|
||||
|
||||
@@ -45,7 +45,7 @@ def course_map_view(request,id=0):
|
||||
return Http404("Course doesn't exist")
|
||||
|
||||
script,div = course_map(course)
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url': reverse('virtualevents_view'),
|
||||
@@ -64,10 +64,10 @@ def course_map_view(request,id=0):
|
||||
'name': 'Map'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
|
||||
|
||||
|
||||
return render(request,
|
||||
'coursemap.html',
|
||||
{
|
||||
@@ -76,21 +76,16 @@ def course_map_view(request,id=0):
|
||||
'mapscript':script,
|
||||
'active':'nav-racing',
|
||||
'rower':r,
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'breadcrumbs':breadcrumbs,
|
||||
})
|
||||
|
||||
|
||||
|
||||
@login_required()
|
||||
@permission_required('course.change_course',fn=get_course_by_pk,raise_exception=True)
|
||||
def course_replace_view(request,id=0):
|
||||
try:
|
||||
course = GeoCourse.objects.get(id=id)
|
||||
except GeoCourse.DoesNotExist:
|
||||
return Http404("Course doesn't exist")
|
||||
course = get_object_or_404(GeoCourse,pk=id)
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
if course.manager != r:
|
||||
raise PermissionDenied("Access denied")
|
||||
|
||||
thecourses = GeoCourse.objects.filter(manager=r).exclude(id=id)
|
||||
|
||||
@@ -141,18 +136,13 @@ def course_replace_view(request,id=0):
|
||||
'mapdiv':div,
|
||||
'mapscript':script,
|
||||
'form':form})
|
||||
|
||||
|
||||
@login_required()
|
||||
@permission_required('course.delete_course',fn=get_course_by_pk,raise_exception=True)
|
||||
def course_delete_view(request,id=0):
|
||||
try:
|
||||
course = GeoCourse.objects.get(id=id)
|
||||
except GeoCourse.DoesNotExist:
|
||||
return Http404("Course doesn't exist")
|
||||
course = get_object_or_404(GeoCourse,pk=id)
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
if course.manager != r:
|
||||
raise PermissionDenied("Access denied")
|
||||
|
||||
ps = PlannedSession.objects.filter(course=course)
|
||||
nosessions = len(ps) == 0
|
||||
@@ -163,22 +153,17 @@ def course_delete_view(request,id=0):
|
||||
url = reverse(courses_view)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
@login_required()
|
||||
@permission_required('course.change_course',fn=get_course_by_pk,raise_exception=True)
|
||||
def course_edit_view(request,id=0):
|
||||
try:
|
||||
course = GeoCourse.objects.get(id=id)
|
||||
except GeoCourse.DoesNotExist:
|
||||
return Http404("Course doesn't exist")
|
||||
course = get_object_or_404(GeoCourse,pk=id)
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
if course.manager != r:
|
||||
raise PermissionDenied("Access denied")
|
||||
|
||||
ps = PlannedSession.objects.filter(course=course)
|
||||
nosessions = len(ps) == 0
|
||||
|
||||
|
||||
script,div = course_map(course)
|
||||
|
||||
if request.method == 'POST':
|
||||
@@ -187,7 +172,7 @@ def course_edit_view(request,id=0):
|
||||
name = form.cleaned_data['name']
|
||||
country = form.cleaned_data['country']
|
||||
notes = form.cleaned_data['notes']
|
||||
|
||||
|
||||
course.name = name
|
||||
course.country = country
|
||||
course.notes = notes
|
||||
@@ -213,7 +198,7 @@ def course_edit_view(request,id=0):
|
||||
'name': 'Edit'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
return render(request, 'course_edit_view.html',
|
||||
{
|
||||
'course':course,
|
||||
@@ -235,9 +220,9 @@ def course_view(request,id=0):
|
||||
return Http404("Course doesn't exist")
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
|
||||
script,div = course_map(course)
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url': reverse('virtualevents_view'),
|
||||
@@ -266,11 +251,10 @@ def course_view(request,id=0):
|
||||
)
|
||||
|
||||
@login_required()
|
||||
@permission_required('racelogo.delete_logo',fn=get_logo_by_pk,raise_exception=True)
|
||||
def logo_delete_view(request,id=0):
|
||||
try:
|
||||
logo = RaceLogo.objects.get(id=id)
|
||||
except RaceLogo.DoesNotExist:
|
||||
raise Http404("Logo doesn't exist")
|
||||
logo = get_object_or_404(RaceLogo,pk=id)
|
||||
|
||||
|
||||
if logo.user == request.user:
|
||||
logo.delete()
|
||||
@@ -281,28 +265,18 @@ def logo_delete_view(request,id=0):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@login_required()
|
||||
@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True)
|
||||
def virtualevent_setlogo_view(request,id=0,logoid=0):
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Race doesn't exist")
|
||||
race = get_object_or_404(VirtualRace,pk=id)
|
||||
logo = get_object_or_404(RaceLogo,pk=logoid)
|
||||
|
||||
try:
|
||||
logo = RaceLogo.objects.get(id=logoid)
|
||||
except RaceLogo.DoesNotExist:
|
||||
raise Http404("Logo doesn't exist")
|
||||
otherlogos = race.logos.all()
|
||||
for otherlogo in otherlogos:
|
||||
otherlogo.race.remove(race)
|
||||
|
||||
if logo.user == request.user and race.manager == request.user:
|
||||
otherlogos = race.logos.all()
|
||||
for otherlogo in otherlogos:
|
||||
otherlogo.race.remove(race)
|
||||
|
||||
|
||||
logo.race.add(race)
|
||||
logo.save()
|
||||
else:
|
||||
message = "You do not own this race or this image"
|
||||
messages.error(request,message)
|
||||
logo.race.add(race)
|
||||
logo.save()
|
||||
|
||||
url = reverse('virtualevent_view',
|
||||
kwargs={'id':id})
|
||||
@@ -318,10 +292,7 @@ def virtualevent_uploadimage_view(request,id=0):
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Race doesn't exist")
|
||||
race = get_object_or_404(VirtualRace,pk=id)
|
||||
|
||||
logos = RaceLogo.objects.filter(user=request.user).order_by("-creationdatetime")
|
||||
|
||||
@@ -348,7 +319,7 @@ def virtualevent_uploadimage_view(request,id=0):
|
||||
kwargs={'id':id})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
form = ImageForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
f = form.cleaned_data['file']
|
||||
@@ -399,14 +370,14 @@ def virtualevent_uploadimage_view(request,id=0):
|
||||
else:
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
|
||||
form = ImageForm()
|
||||
|
||||
|
||||
if is_ajax:
|
||||
return {'result':0}
|
||||
|
||||
|
||||
|
||||
return render(request,'logo_form.html',
|
||||
{'form':form,
|
||||
'rower':r,
|
||||
@@ -425,7 +396,7 @@ def course_upload_view(request):
|
||||
is_ajax = True
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
|
||||
if request.method == 'POST':
|
||||
form = CourseForm(request.POST,request.FILES)
|
||||
|
||||
@@ -435,7 +406,7 @@ def course_upload_view(request):
|
||||
notes = form.cleaned_data['notes']
|
||||
if f is not None:
|
||||
filename,path_and_filename = handle_uploaded_file(f)
|
||||
|
||||
|
||||
cs = courses.kmltocourse(path_and_filename)
|
||||
|
||||
|
||||
@@ -443,11 +414,11 @@ def course_upload_view(request):
|
||||
cname = name+' - '+course['name']
|
||||
cnotes = notes+'\n\n'+course['description']
|
||||
polygons = course['polygons']
|
||||
|
||||
|
||||
course = courses.createcourse(r,cname,polygons,notes=cnotes)
|
||||
|
||||
|
||||
os.remove(path_and_filename)
|
||||
|
||||
|
||||
url = reverse(courses_view)
|
||||
if is_ajax:
|
||||
return JSONResponse({'result':1,'url':url})
|
||||
@@ -492,7 +463,7 @@ def virtualevents_view(request):
|
||||
evaluation_closure__gte=timezone.now()-datetime.timedelta(days=3),
|
||||
)
|
||||
|
||||
|
||||
|
||||
races = (races1 | races2).order_by("startdate","start_time")
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
@@ -524,7 +495,7 @@ def virtualevents_view(request):
|
||||
country__in=countries
|
||||
)
|
||||
|
||||
|
||||
|
||||
races = (races1 | races2).order_by("startdate","start_time")
|
||||
|
||||
|
||||
@@ -550,7 +521,7 @@ def virtualevents_view(request):
|
||||
country__in=countries
|
||||
).order_by("startdate","start_time")
|
||||
else:
|
||||
|
||||
|
||||
form = VirtualRaceSelectForm()
|
||||
|
||||
if is_ajax:
|
||||
@@ -558,7 +529,7 @@ def virtualevents_view(request):
|
||||
{ 'races':races,
|
||||
'rower':r,
|
||||
})
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
@@ -576,18 +547,13 @@ def virtualevents_view(request):
|
||||
)
|
||||
|
||||
@login_required()
|
||||
def virtualevent_disqualify_view(request,raceid=0,recordid=0):
|
||||
@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True)
|
||||
def virtualevent_disqualify_view(request,id=0,recordid=0):
|
||||
|
||||
r = getrower(request.user)
|
||||
race = get_object_or_404(VirtualRace,pk=id)
|
||||
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=raceid)
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Virtual Race does not exist")
|
||||
|
||||
if r.user != race.manager:
|
||||
raise PermissionDenied("Access denied")
|
||||
|
||||
if race.sessiontype == 'race':
|
||||
recordobj = VirtualRaceResult
|
||||
else:
|
||||
@@ -603,7 +569,7 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0):
|
||||
if timezone.now() > race.evaluation_closure+datetime.timedelta(hours=1):
|
||||
messages.error(request,"The evaluation is already closed and the results are official")
|
||||
url = reverse('virtualevent_view',kwargs={'id':raceid})
|
||||
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
if request.method == 'POST':
|
||||
@@ -619,16 +585,16 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0):
|
||||
job = myqueue(queue,handle_send_disqualification_email,
|
||||
r.user.email, name,
|
||||
disqualifier,message,race.name)
|
||||
|
||||
|
||||
messages.info(request,"We have invalidated the result for: "+str(record))
|
||||
|
||||
|
||||
record.coursecompleted = False
|
||||
record.save()
|
||||
|
||||
url = reverse('virtualevent_view',kwargs={'id':raceid})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
else:
|
||||
form = DisqualificationForm(request.POST)
|
||||
|
||||
@@ -705,7 +671,7 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0):
|
||||
|
||||
if race_can_edit(r,race):
|
||||
buttons += ['editbutton']
|
||||
|
||||
|
||||
return render(request,"disqualification_view.html",
|
||||
{'workout':workout,
|
||||
'active':'nav-racing',
|
||||
@@ -723,13 +689,13 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0):
|
||||
def virtualevent_view(request,id=0):
|
||||
|
||||
results = []
|
||||
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
r = getrower(request.user)
|
||||
else:
|
||||
r = None
|
||||
|
||||
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
except VirtualRace.DoesNotExist:
|
||||
@@ -744,8 +710,8 @@ def virtualevent_view(request,id=0):
|
||||
resultobj = IndoorVirtualRaceResult
|
||||
|
||||
records = resultobj.objects.filter(race=race)
|
||||
|
||||
|
||||
|
||||
|
||||
buttons = []
|
||||
|
||||
# to-do - add DNS
|
||||
@@ -755,7 +721,7 @@ def virtualevent_view(request,id=0):
|
||||
race=race,
|
||||
workoutid__isnull=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
if race_can_register(r,race):
|
||||
@@ -790,14 +756,14 @@ def virtualevent_view(request,id=0):
|
||||
except KeyError:
|
||||
boattype = mytypes.waterboattype
|
||||
|
||||
try:
|
||||
try:
|
||||
boatclass = cd['boatclass']
|
||||
except KeyError:
|
||||
if race.sessiontype == 'race':
|
||||
boatclass = [t for t in mytypes.otwtypes]
|
||||
else:
|
||||
boatclass = [t for t in mytypes.otetypes]
|
||||
|
||||
|
||||
age_min = cd['age_min']
|
||||
age_max = cd['age_max']
|
||||
|
||||
@@ -834,8 +800,8 @@ def virtualevent_view(request,id=0):
|
||||
age__gte=age_min,
|
||||
age__lte=age_max
|
||||
).order_by("duration","-distance")
|
||||
|
||||
|
||||
|
||||
|
||||
# to-do - add DNS
|
||||
dns = []
|
||||
if timezone.now() > race.evaluation_closure:
|
||||
@@ -860,9 +826,9 @@ def virtualevent_view(request,id=0):
|
||||
form = RaceResultFilterForm(records=records)
|
||||
else:
|
||||
form = None
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
@@ -875,7 +841,7 @@ def virtualevent_view(request,id=0):
|
||||
'name': race.name
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
racelogos = race.logos.all()
|
||||
|
||||
if racelogos:
|
||||
@@ -885,7 +851,7 @@ def virtualevent_view(request,id=0):
|
||||
|
||||
comments = PlannedSessionComment.objects.filter(plannedsession=race).order_by("created")
|
||||
|
||||
|
||||
|
||||
return render(request,'virtualevent.html',
|
||||
{
|
||||
'coursescript':script,
|
||||
@@ -906,13 +872,13 @@ def virtualevent_view(request,id=0):
|
||||
def virtualevent_ranking_view(request,id=0):
|
||||
|
||||
results = []
|
||||
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
r = getrower(request.user)
|
||||
else:
|
||||
r = None
|
||||
|
||||
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
except VirtualRace.DoesNotExist:
|
||||
@@ -927,8 +893,8 @@ def virtualevent_ranking_view(request,id=0):
|
||||
resultobj = IndoorVirtualRaceResult
|
||||
|
||||
records = resultobj.objects.filter(race=race)
|
||||
|
||||
|
||||
|
||||
|
||||
buttons = []
|
||||
|
||||
# to-do - add DNS
|
||||
@@ -938,7 +904,7 @@ def virtualevent_ranking_view(request,id=0):
|
||||
race=race,
|
||||
workoutid__isnull=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
if race_can_register(r,race):
|
||||
@@ -973,14 +939,14 @@ def virtualevent_ranking_view(request,id=0):
|
||||
except KeyError:
|
||||
boattype = mytypes.waterboattype
|
||||
|
||||
try:
|
||||
try:
|
||||
boatclass = cd['boatclass']
|
||||
except KeyError:
|
||||
if race.sessiontype == 'race':
|
||||
boatclass = [t for t in mytypes.otwtypes]
|
||||
else:
|
||||
boatclass = [t for t in mytypes.otetypes]
|
||||
|
||||
|
||||
age_min = cd['age_min']
|
||||
age_max = cd['age_max']
|
||||
|
||||
@@ -1017,8 +983,8 @@ def virtualevent_ranking_view(request,id=0):
|
||||
age__gte=age_min,
|
||||
age__lte=age_max
|
||||
).order_by("duration","-distance")
|
||||
|
||||
|
||||
|
||||
|
||||
# to-do - add DNS
|
||||
dns = []
|
||||
if timezone.now() > race.evaluation_closure:
|
||||
@@ -1043,9 +1009,9 @@ def virtualevent_ranking_view(request,id=0):
|
||||
form = RaceResultFilterForm(records=records)
|
||||
else:
|
||||
form = None
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
@@ -1058,7 +1024,7 @@ def virtualevent_ranking_view(request,id=0):
|
||||
'name': race.name
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
racelogos = race.logos.all()
|
||||
|
||||
if racelogos:
|
||||
@@ -1132,7 +1098,7 @@ def virtualevent_addboat_view(request,id=0):
|
||||
boattypes = [record.boattype for record in records]
|
||||
boatclasses = [record.boatclass for record in records]
|
||||
allowedboats = tuple([ type for type in mytypes.boattypes if type[0] not in boattypes] )
|
||||
|
||||
|
||||
|
||||
# we're still here
|
||||
if request.method == 'POST':
|
||||
@@ -1151,14 +1117,14 @@ def virtualevent_addboat_view(request,id=0):
|
||||
sex = r.sex
|
||||
if mix:
|
||||
sex = 'mixed'
|
||||
|
||||
|
||||
if boattype == '1x' and r.birthdate:
|
||||
age = calculate_age(r.birthdate)
|
||||
sex = r.sex
|
||||
|
||||
if sex == 'not specified':
|
||||
sex = 'male'
|
||||
|
||||
|
||||
if boattype in boattypes and boatclass in boatclasses:
|
||||
# check if different sexes
|
||||
therecords = records.filter(
|
||||
@@ -1167,7 +1133,7 @@ def virtualevent_addboat_view(request,id=0):
|
||||
|
||||
thesexes = [record.sex for record in therecords]
|
||||
if sex in thesexes:
|
||||
|
||||
|
||||
messages.error(
|
||||
request,
|
||||
"You have already registered in that boat class/type"
|
||||
@@ -1199,11 +1165,11 @@ def virtualevent_addboat_view(request,id=0):
|
||||
)
|
||||
|
||||
record.save()
|
||||
|
||||
|
||||
add_rower_race(r,race)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
messages.info(
|
||||
request,
|
||||
"You have successfully registered for this race. Good luck!"
|
||||
@@ -1215,14 +1181,14 @@ def virtualevent_addboat_view(request,id=0):
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
else:
|
||||
initial = {
|
||||
'age': calculate_age(r.birthdate),
|
||||
'weightcategory': r.weightcategory,
|
||||
'adaptiveclass': r.adaptiveclass,
|
||||
}
|
||||
|
||||
|
||||
form = VirtualRaceResultForm(initial=initial)
|
||||
|
||||
breadcrumbs = [
|
||||
@@ -1243,8 +1209,8 @@ def virtualevent_addboat_view(request,id=0):
|
||||
'name': 'Add Discipline'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
buttons = []
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
@@ -1311,7 +1277,7 @@ def virtualevent_register_view(request,id=0):
|
||||
sex = r.sex
|
||||
if mix:
|
||||
sex = 'mixed'
|
||||
|
||||
|
||||
if boattype == '1x' and r.birthdate:
|
||||
age = calculate_age(r.birthdate)
|
||||
sex = r.sex
|
||||
@@ -1338,7 +1304,7 @@ def virtualevent_register_view(request,id=0):
|
||||
)
|
||||
|
||||
record.save()
|
||||
|
||||
|
||||
add_rower_race(r,race)
|
||||
|
||||
otherrecords = IndoorVirtualRaceResult.objects.filter(
|
||||
@@ -1357,8 +1323,8 @@ def virtualevent_register_view(request,id=0):
|
||||
race.name,
|
||||
race.id
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
messages.info(
|
||||
request,
|
||||
"You have successfully registered for this race. Good luck!"
|
||||
@@ -1370,14 +1336,14 @@ def virtualevent_register_view(request,id=0):
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
else:
|
||||
initial = {
|
||||
'age': calculate_age(r.birthdate),
|
||||
'weightcategory': r.weightcategory,
|
||||
'adaptiveclass': r.adaptiveclass,
|
||||
}
|
||||
|
||||
|
||||
form = VirtualRaceResultForm(initial=initial)
|
||||
|
||||
breadcrumbs = [
|
||||
@@ -1419,7 +1385,7 @@ def virtualevent_register_view(request,id=0):
|
||||
|
||||
if race_can_edit(r,race):
|
||||
buttons += ['editbutton']
|
||||
|
||||
|
||||
return render(request,'virtualeventregister.html',
|
||||
{
|
||||
'form':form,
|
||||
@@ -1440,7 +1406,7 @@ def virtualevent_toggle_email_view(request,id=0):
|
||||
newsetting = False
|
||||
else:
|
||||
newsetting = True
|
||||
|
||||
|
||||
for record in records:
|
||||
record.emailnotifications = newsetting
|
||||
record.save()
|
||||
@@ -1454,7 +1420,7 @@ def virtualevent_toggle_email_view(request,id=0):
|
||||
def indoorvirtualevent_toggle_email_view(request,id=0):
|
||||
r = getrower(request.user)
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
|
||||
|
||||
records = IndoorVirtualRaceResult.objects.filter(userid=r.id,
|
||||
race=race)
|
||||
|
||||
@@ -1462,7 +1428,7 @@ def indoorvirtualevent_toggle_email_view(request,id=0):
|
||||
newsetting = False
|
||||
else:
|
||||
newsetting = True
|
||||
|
||||
|
||||
for record in records:
|
||||
record.emailnotifications = newsetting
|
||||
record.save()
|
||||
@@ -1503,7 +1469,7 @@ def indoorvirtualevent_register_view(request,id=0):
|
||||
boatclass = cd['boatclass']
|
||||
|
||||
sex = r.sex
|
||||
|
||||
|
||||
if r.birthdate:
|
||||
age = calculate_age(r.birthdate)
|
||||
sex = r.sex
|
||||
@@ -1529,7 +1495,7 @@ def indoorvirtualevent_register_view(request,id=0):
|
||||
)
|
||||
|
||||
record.save()
|
||||
|
||||
|
||||
add_rower_race(r,race)
|
||||
|
||||
otherrecords = IndoorVirtualRaceResult.objects.filter(
|
||||
@@ -1548,8 +1514,8 @@ def indoorvirtualevent_register_view(request,id=0):
|
||||
race.name,
|
||||
race.id
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
messages.info(
|
||||
request,
|
||||
"You have successfully registered for this race. Good luck!"
|
||||
@@ -1561,14 +1527,14 @@ def indoorvirtualevent_register_view(request,id=0):
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
else:
|
||||
initial = {
|
||||
'age': calculate_age(r.birthdate),
|
||||
'weightcategory': r.weightcategory,
|
||||
'adaptiveclass': r.adaptiveclass,
|
||||
}
|
||||
|
||||
|
||||
form = IndoorVirtualRaceResultForm(initial=initial)
|
||||
|
||||
breadcrumbs = [
|
||||
@@ -1624,7 +1590,7 @@ def indoorvirtualevent_register_view(request,id=0):
|
||||
@login_required()
|
||||
def indoorvirtualevent_create_view(request):
|
||||
r = getrower(request.user)
|
||||
|
||||
|
||||
if request.method == 'POST':
|
||||
racecreateform = IndoorVirtualRaceForm(request.POST)
|
||||
if racecreateform.is_valid():
|
||||
@@ -1650,7 +1616,7 @@ def indoorvirtualevent_create_view(request):
|
||||
startdatetime = datetime.datetime.combine(startdate,start_time)
|
||||
enddatetime = datetime.datetime.combine(enddate,end_time)
|
||||
|
||||
|
||||
|
||||
startdatetime = pytz.timezone(timezone_str).localize(
|
||||
startdatetime
|
||||
)
|
||||
@@ -1681,7 +1647,7 @@ def indoorvirtualevent_create_view(request):
|
||||
sessionmode = 'time'
|
||||
else:
|
||||
sessionmode = 'distance'
|
||||
|
||||
|
||||
vs = VirtualRace(
|
||||
name=name,
|
||||
startdate=startdate,
|
||||
@@ -1719,7 +1685,7 @@ def indoorvirtualevent_create_view(request):
|
||||
),
|
||||
dotweet = dotweet
|
||||
)
|
||||
|
||||
|
||||
sa.save()
|
||||
|
||||
url = reverse('virtualevents_view')
|
||||
@@ -1728,7 +1694,7 @@ def indoorvirtualevent_create_view(request):
|
||||
|
||||
racecreateform = IndoorVirtualRaceForm(timezone=r.defaulttimezone)
|
||||
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
@@ -1753,7 +1719,7 @@ def indoorvirtualevent_create_view(request):
|
||||
@login_required()
|
||||
def virtualevent_create_view(request):
|
||||
r = getrower(request.user)
|
||||
|
||||
|
||||
if request.method == 'POST':
|
||||
racecreateform = VirtualRaceForm(request.POST)
|
||||
if racecreateform.is_valid():
|
||||
@@ -1779,7 +1745,7 @@ def virtualevent_create_view(request):
|
||||
startdatetime = datetime.datetime.combine(startdate,start_time)
|
||||
enddatetime = datetime.datetime.combine(enddate,end_time)
|
||||
|
||||
|
||||
|
||||
startdatetime = pytz.timezone(timezone_str).localize(
|
||||
startdatetime
|
||||
)
|
||||
@@ -1805,8 +1771,8 @@ def virtualevent_create_view(request):
|
||||
registration_closure = enddatetime
|
||||
else:
|
||||
registration_closure = evaluation_closure
|
||||
|
||||
|
||||
|
||||
|
||||
vs = VirtualRace(
|
||||
name=name,
|
||||
startdate=startdate,
|
||||
@@ -1842,7 +1808,7 @@ def virtualevent_create_view(request):
|
||||
),
|
||||
dotweet = dotweet
|
||||
)
|
||||
|
||||
|
||||
sa.save()
|
||||
url = reverse('virtualevents_view')
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -1850,7 +1816,7 @@ def virtualevent_create_view(request):
|
||||
|
||||
racecreateform = VirtualRaceForm()
|
||||
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
@@ -1872,15 +1838,12 @@ def virtualevent_create_view(request):
|
||||
})
|
||||
|
||||
@login_required()
|
||||
@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True)
|
||||
def virtualevent_edit_view(request,id=0):
|
||||
r = getrower(request.user)
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
if race.manager != request.user:
|
||||
raise PermissionDenied("Access denied")
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Virtual Race does not exist")
|
||||
race = get_object_or_404(VirtualRace,pk=id)
|
||||
|
||||
|
||||
|
||||
start_time = race.start_time
|
||||
start_date = race.startdate
|
||||
@@ -1900,7 +1863,7 @@ def virtualevent_edit_view(request,id=0):
|
||||
racecreateform = VirtualRaceForm(request.POST,instance=race)
|
||||
if racecreateform.is_valid():
|
||||
cd = racecreateform.cleaned_data
|
||||
|
||||
|
||||
res, message = update_virtualrace(race,cd)
|
||||
|
||||
if res:
|
||||
@@ -1912,7 +1875,7 @@ def virtualevent_edit_view(request,id=0):
|
||||
kwargs = {
|
||||
'id':race.id
|
||||
})
|
||||
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
@@ -1937,7 +1900,7 @@ def virtualevent_edit_view(request,id=0):
|
||||
'name': 'Edit'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
buttons = []
|
||||
|
||||
if not request.user.is_anonymous:
|
||||
@@ -1970,15 +1933,10 @@ def virtualevent_edit_view(request,id=0):
|
||||
})
|
||||
|
||||
@login_required()
|
||||
@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True)
|
||||
def indoorvirtualevent_edit_view(request,id=0):
|
||||
r = getrower(request.user)
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
if race.manager != request.user:
|
||||
raise PermissionDenied("Access denied")
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Virtual Race does not exist")
|
||||
race = get_object_or_404(VirtualRace,pk=id)
|
||||
|
||||
start_time = race.start_time
|
||||
start_date = race.startdate
|
||||
@@ -1998,7 +1956,7 @@ def indoorvirtualevent_edit_view(request,id=0):
|
||||
racecreateform = IndoorVirtualRaceForm(request.POST,instance=race)
|
||||
if racecreateform.is_valid():
|
||||
cd = racecreateform.cleaned_data
|
||||
|
||||
|
||||
res, message = update_indoorvirtualrace(race,cd)
|
||||
|
||||
if res:
|
||||
@@ -2010,14 +1968,14 @@ def indoorvirtualevent_edit_view(request,id=0):
|
||||
kwargs = {
|
||||
'id':race.id
|
||||
})
|
||||
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
|
||||
racecreateform = IndoorVirtualRaceForm(instance=race)
|
||||
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
@@ -2057,8 +2015,8 @@ def indoorvirtualevent_edit_view(request,id=0):
|
||||
|
||||
if race_can_edit(r,race):
|
||||
buttons += ['editbutton']
|
||||
|
||||
|
||||
|
||||
|
||||
return render(request,'virtualeventedit.html',
|
||||
{
|
||||
'form':racecreateform,
|
||||
@@ -2084,7 +2042,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
start_date = race.startdate
|
||||
startdatetime = datetime.datetime.combine(start_date, start_time)
|
||||
startdatetime = pytz.timezone(race.timezone).localize(startdatetime)
|
||||
|
||||
|
||||
end_time = race.end_time
|
||||
end_date = race.enddate
|
||||
enddatetime = datetime.datetime.combine(end_date, end_time)
|
||||
@@ -2096,7 +2054,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
resultobj = VirtualRaceResult
|
||||
else:
|
||||
resultobj = IndoorVirtualRaceResult
|
||||
|
||||
|
||||
records = resultobj.objects.filter(
|
||||
userid = r.id,
|
||||
race=race
|
||||
@@ -2104,7 +2062,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
|
||||
|
||||
entrychoices = []
|
||||
|
||||
|
||||
for record in records:
|
||||
rtpl = (record.id, record.__str__())
|
||||
entrychoices.append(rtpl)
|
||||
@@ -2121,7 +2079,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
}
|
||||
)
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
ws = Workout.objects.filter(
|
||||
user=r,
|
||||
workouttype__in=mytypes.rowtypes,
|
||||
@@ -2134,14 +2092,14 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
request,
|
||||
'You have no workouts executed during the race window. Please upload a result or enter it manually.'
|
||||
)
|
||||
|
||||
|
||||
url = reverse('virtualevent_view',
|
||||
kwargs = {
|
||||
'id':id
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
|
||||
initialworkouts = [w.id for w in Workout.objects.filter(
|
||||
user=r,plannedsession=race
|
||||
@@ -2151,7 +2109,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
workoutdata['initial'] = []
|
||||
|
||||
choices = []
|
||||
|
||||
|
||||
for w in ws:
|
||||
wtpl = (w.id, w.__str__())
|
||||
choices.append(wtpl)
|
||||
@@ -2183,7 +2141,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
result,comments,errors,jobid = add_workout_indoorrace(
|
||||
workouts,race,r,recordid=recordid)
|
||||
|
||||
|
||||
|
||||
for c in comments:
|
||||
messages.info(request,c)
|
||||
for er in errors:
|
||||
@@ -2217,13 +2175,13 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
race.id
|
||||
)
|
||||
|
||||
|
||||
|
||||
# redirect to race page
|
||||
url = reverse('virtualevent_view',
|
||||
kwargs = {
|
||||
'id':race.id
|
||||
})
|
||||
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
@@ -2273,7 +2231,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
if race_can_edit(r,race):
|
||||
buttons += ['editbutton']
|
||||
|
||||
|
||||
|
||||
return render(request,'race_submit.html',
|
||||
{
|
||||
'race':race,
|
||||
|
||||
@@ -285,9 +285,21 @@ def getfavorites(r,row):
|
||||
|
||||
return favorites,maxfav
|
||||
|
||||
def get_logo_by_pk(request,*args,**kwargs):
|
||||
id = kwargs['id']
|
||||
return get_object_or_404(RaceLogo,pk=id)
|
||||
|
||||
def get_virtualevent_by_pk(request,*args,**kwargs):
|
||||
id = kwargs['id']
|
||||
return get_object_or_404(VirtualRace,pk=id)
|
||||
|
||||
def get_promember(request,*args,**kwargs):
|
||||
return request.user
|
||||
|
||||
def get_course_by_pk(request,*args,**kwargs):
|
||||
id = kwargs['id']
|
||||
return get_object_or_404(GeoCourse,pk=id)
|
||||
|
||||
def get_workout_by_opaqueid(request,id,**kwargs):
|
||||
pk = encoder.decode_hex(id)
|
||||
return get_object_or_404(Workout,pk=pk)
|
||||
|
||||
Reference in New Issue
Block a user