Private
Public Access
1
0

Merge branch 'release/v13.64'

This commit is contained in:
Sander Roosendaal
2020-07-19 10:06:55 +02:00
4 changed files with 90 additions and 4 deletions

View File

@@ -1261,7 +1261,7 @@ class GeoCourseEditForm(ModelForm):
@python_2_unicode_compatible
class GeoPolygon(models.Model):
name = models.CharField(max_length=150,blank=True)
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE)
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE,related_name='polygons')
order_in_course = models.IntegerField(default=0)
def __str__(self):
@@ -1280,7 +1280,7 @@ class GeoPolygon(models.Model):
class GeoPoint(models.Model):
latitude = models.FloatField(default=0)
longitude = models.FloatField(default=0)
polygon = models.ForeignKey(GeoPolygon,blank=True,on_delete=models.CASCADE)
polygon = models.ForeignKey(GeoPolygon,blank=True,on_delete=models.CASCADE,related_name='points')
order_in_poly = models.IntegerField(default=0)
# need error checking to "insert" new point into existing polygon? This affects order_in_poly

View File

@@ -31,3 +31,10 @@ class IsCompetitorOrNot(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return (obj.userid == request.user.id)
class IsManagerOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.manager == request.user.rower

View File

@@ -10,7 +10,7 @@ from rest_framework import serializers
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
GeoCourse, GeoPolygon, GeoPoint,
)
import datetime
@@ -245,3 +245,67 @@ class StrokeDataSerializer(serializers.Serializer):
# do something
return 1
class GeoPointSerializer(serializers.ModelSerializer):
class Meta:
model = GeoPoint
fields = (
'id',
'latitude',
'longitude',
'order_in_poly',
)
extra_kwargs = {'id': {'read_only': False, 'required': True}}
class GeoPolygonSerializer(serializers.ModelSerializer):
points = GeoPointSerializer(many=True)
class Meta:
model = GeoPolygon
fields = (
'id',
'name',
'order_in_course',
'points',
)
extra_kwargs = {'id': {'read_only': False, 'required': True}}
class GeoCourseSerializer(serializers.ModelSerializer):
polygons = GeoPolygonSerializer(many=True)
class Meta:
model = GeoCourse
fields = (
'id',
'name',
'distance',
'country',
'notes',
'polygons',
)
def update(self, instance, validated_data):
instance.name = validated_data.get('name',instance.name)
instance.country = validated_data.get('country',instance.country)
instance.notes = validated_data.get('notes',instance.notes)
instance.save()
polygons = validated_data.get('polygons')
for polygon in polygons:
polygon_id = polygon.get('id',None)
if polygon_id:
p = GeoPolygon.objects.get(id=polygon_id)
p.name = polygon.get('name',p.name)
p.order_in_course = polygon.get('order_in_course',p.order_in_course)
p.save()
points = polygon.get('points')
for point in points:
point_id = point.get('id',None)
if point_id:
pt = GeoPoint.objects.get(id=point_id)
pt.latitude = point.get('latitude',pt.latitude)
pt.longitude = point.get('longitude',pt.longitude)
pt.order_in_poly = point.get('order_in_poly',pt.order_in_poly)
pt.save()
return instance

View File

@@ -9,7 +9,7 @@ from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required, permission_required
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,StandardCollection,CourseStandard,
VirtualRace,StandardCollection,CourseStandard,GeoCourse,
)
from rest_framework import routers, serializers, viewsets,permissions
@@ -32,6 +32,9 @@ from rowers.serializers import (
CourseStandardSerializer,
StandardCollectionSerializer,
VirtualRaceSerializer,
GeoCourseSerializer,
GeoPolygonSerializer,
GeoPointSerializer,
)
from oauth2_provider.views import (
@@ -152,6 +155,17 @@ class StandardCollectionViewSet(viewsets.ModelViewSet):
http_method_names = ['get']
class GeoCourseViewSet(viewsets.ModelViewSet):
model = GeoCourse,
serializer_class = GeoCourseSerializer
def get_queryset(self):
try:
return GeoCourse.objects.all()
except TypeError:
return []
http_method_names = ['get','patch']
class StrokeDataViewSet(viewsets.ModelViewSet):
serializer_class = StrokeDataSerializer
@@ -164,6 +178,7 @@ router.register(r'api/entries',EntryViewSet,'entries')
router.register(r'api/challenges',VirtualRaceViewSet,'challenges')
router.register(r'api/standards',CourseStandardViewSet,'standards')
router.register(r'api/standardcollections',StandardCollectionViewSet,'standardcollections')
router.register(r'api/geocourses',GeoCourseViewSet,'geocourses')
def permissiondenied_view(request):
raise PermissionDenied