Private
Public Access
1
0

course update functionality

This commit is contained in:
Sander Roosendaal
2018-04-25 14:58:12 +02:00
parent d0ff742ba5
commit 53659d8b72
7 changed files with 138 additions and 4 deletions

View File

@@ -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

View File

@@ -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())

View File

@@ -13,7 +13,8 @@
{% if nosessions %}
<a class="button small red" href="/rowers/courses/{{ course.id }}/delete">Delete</a>
{% else %}
&nbsp;
<a class="button small red" href="/rowers/courses/{{ course.id }}/replace">
Update</a>
{% endif %}
</div>
<div class="grid_2">

View 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 %}
&nbsp;
{% 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 %}

View File

@@ -0,0 +1,7 @@
<div>
{{ mapscript|safe }}
{{ mapdiv|safe }}
</div>

View File

@@ -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:

View File

@@ -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: