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