course update functionality
This commit is contained in:
@@ -28,7 +28,7 @@ from rowers.models import (
|
||||
Rower, Workout,
|
||||
GeoPoint,GeoPolygon, GeoCourse,
|
||||
course_length,course_coord_center,course_coord_maxmin,
|
||||
polygon_coord_center
|
||||
polygon_coord_center,PlannedSession
|
||||
)
|
||||
|
||||
# low level methods
|
||||
@@ -307,3 +307,13 @@ def get_time_course(ws,course):
|
||||
coursemeters = coursemeters-coursemetersfirst
|
||||
|
||||
return coursetimeseconds,coursemeters,coursecompleted
|
||||
|
||||
def replacecourse(course1,course2):
|
||||
ps = PlannedSession.objects.filter(course=course1)
|
||||
for p in ps:
|
||||
p.course = course2
|
||||
p.save()
|
||||
|
||||
course1.delete()
|
||||
|
||||
return 1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from django import forms
|
||||
from django.contrib.admin.widgets import FilteredSelectMultiple
|
||||
from rowers.models import Workout,Rower,Team,PlannedSession
|
||||
from rowers.models import Workout,Rower,Team,PlannedSession,GeoCourse
|
||||
from rowers.rows import validate_file_extension,must_be_csv,validate_image_extension,validate_kml
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
from django.contrib.auth.models import User
|
||||
@@ -536,6 +536,9 @@ class StatsOptionsForm(forms.Form):
|
||||
coastal = forms.BooleanField(initial=False,required=False)
|
||||
other = forms.BooleanField(initial=False,required=False)
|
||||
|
||||
class CourseSelectForm(forms.Form):
|
||||
course = forms.ModelChoiceField(queryset=GeoCourse.objects.all())
|
||||
|
||||
class WorkoutMultipleCompareForm(forms.Form):
|
||||
workouts = forms.ModelMultipleChoiceField(queryset=Workout.objects.all(),
|
||||
widget=forms.CheckboxSelectMultiple())
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
{% if nosessions %}
|
||||
<a class="button small red" href="/rowers/courses/{{ course.id }}/delete">Delete</a>
|
||||
{% else %}
|
||||
|
||||
<a class="button small red" href="/rowers/courses/{{ course.id }}/replace">
|
||||
Update</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
|
||||
51
rowers/templates/course_replace.html
Normal file
51
rowers/templates/course_replace.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{% extends "base.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load rowerfilters %}
|
||||
{% block scripts %}
|
||||
{% include "monitorjobs.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ course.name }} {% endblock %}
|
||||
{% block og_title %}{{ course.name }} {% endblock %}
|
||||
{% block content %}
|
||||
<div class="grid_12 alpha">
|
||||
<div class="grid_2 prefix_2 alpha">
|
||||
{% if course.manager == rower %}
|
||||
<a class="button small gray" href="/rowers/courses/{{ course.id }}">View Course</a>
|
||||
{% else %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<a class="button small gray" href="/rowers/list-courses">Courses</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_12 alpha">
|
||||
|
||||
<h1>Replace {{ course.name }}</h1>
|
||||
|
||||
<div class="grid_8 alpha">
|
||||
<p>
|
||||
This replaces the course {{ course.name }} with the course you select below for all
|
||||
planned sessions and virtual races, and then deletes this course.
|
||||
</p>
|
||||
<form id="course_form" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<div id="formbutton" class="grid_1 prefix_4 suffix_1 alpha">
|
||||
<input class="button green" type="submit" value="Submit">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="grid_4 omega">
|
||||
{{ mapdiv|safe }}
|
||||
|
||||
|
||||
{{ mapscript|safe }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
7
rowers/templates/coursemap.html
Normal file
7
rowers/templates/coursemap.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<div>
|
||||
{{ mapscript|safe }}
|
||||
{{ mapdiv|safe }}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -513,7 +513,9 @@ urlpatterns = [
|
||||
url(r'^courses/(?P<id>\d+)/edit$',views.course_edit_view,
|
||||
name='course_edit_view'),
|
||||
url(r'^courses/(?P<id>\d+)/delete$',views.course_delete_view),
|
||||
url(r'^courses/(?P<id>\d+)/replace$',views.course_replace_view),
|
||||
url(r'^courses/(?P<id>\d+)$',views.course_view),
|
||||
url(r'^courses/(?P<id>\d+)/map$',views.course_map_view),
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
|
||||
@@ -34,7 +34,7 @@ from rowers.forms import (
|
||||
WorkFlowLeftPanelElement,WorkFlowMiddlePanelElement,
|
||||
LandingPageForm,PlannedSessionSelectForm,WorkoutSessionSelectForm,
|
||||
PlannedSessionTeamForm,PlannedSessionTeamMemberForm,
|
||||
VirtualRaceSelectForm,WorkoutRaceSelectForm,
|
||||
VirtualRaceSelectForm,WorkoutRaceSelectForm,CourseSelectForm,
|
||||
)
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.exceptions import PermissionDenied
|
||||
@@ -8841,6 +8841,66 @@ def workout_comment_view(request,id=0):
|
||||
'form':form,
|
||||
})
|
||||
|
||||
# for ajax calls
|
||||
def course_map_view(request,id=0):
|
||||
if id != 0:
|
||||
try:
|
||||
course = GeoCourse.objects.get(id=id)
|
||||
except GeoCourse.DoesNotExist:
|
||||
return Http404("Course doesn't exist")
|
||||
|
||||
script,div = course_map(course)
|
||||
|
||||
return render(request,
|
||||
'coursemap.html',
|
||||
{
|
||||
'mapdiv':div,
|
||||
'mapscript':script
|
||||
})
|
||||
|
||||
else:
|
||||
return ""
|
||||
|
||||
@login_required()
|
||||
def course_replace_view(request,id=0):
|
||||
try:
|
||||
course = GeoCourse.objects.get(id=id)
|
||||
except GeoCourse.DoesNotExist:
|
||||
return Http404("Course doesn't exist")
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
if course.manager != r:
|
||||
raise PermissionDenied("Access denied")
|
||||
|
||||
thecourses = GeoCourse.objects.filter(manager=r).exclude(id=id)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = CourseSelectForm(request.POST)
|
||||
if form.is_valid():
|
||||
course2 = form.cleaned_data['course']
|
||||
res = courses.replacecourse(course,course2)
|
||||
|
||||
url = reverse(course_view,
|
||||
kwargs = {
|
||||
'id':course2.id
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
form = CourseSelectForm()
|
||||
form.fields["course"].queryset = thecourses
|
||||
|
||||
script,div = course_map(course)
|
||||
|
||||
return render(request,
|
||||
'course_replace.html',
|
||||
{'course':course,
|
||||
'mapdiv':div,
|
||||
'mapscript':script,
|
||||
'form':form})
|
||||
|
||||
@login_required()
|
||||
def course_delete_view(request,id=0):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user