Merge branch 'release/v15.28'
This commit is contained in:
@@ -2292,6 +2292,7 @@ class PlannedSession(models.Model):
|
|||||||
if self.sessionvalue <= 0:
|
if self.sessionvalue <= 0:
|
||||||
self.sessionvalue = 1
|
self.sessionvalue = 1
|
||||||
|
|
||||||
|
|
||||||
manager = self.manager
|
manager = self.manager
|
||||||
if self.sessiontype not in ['race','indoorrace']:
|
if self.sessiontype not in ['race','indoorrace']:
|
||||||
if not can_add_session(self.manager):
|
if not can_add_session(self.manager):
|
||||||
|
|||||||
@@ -27,6 +27,16 @@ class IsOwnerOrNot(permissions.BasePermission):
|
|||||||
r = Rower.objects.get(user=request.user)
|
r = Rower.objects.get(user=request.user)
|
||||||
return (obj.user == r)
|
return (obj.user == r)
|
||||||
|
|
||||||
|
class IsRowerOrNot(permissions.BasePermission):
|
||||||
|
def has_object_permission(self, request, view, obj):
|
||||||
|
r = Rower.objects.get(user=request.user)
|
||||||
|
return (r in obj.rower.all())
|
||||||
|
|
||||||
|
class IsPlanOrHigher(permissions.BasePermission):
|
||||||
|
def has_object_permission(self, request, view, obj):
|
||||||
|
r = Rower.objects.get(user=request.user)
|
||||||
|
return r not in ['basic','pro','freecoach']
|
||||||
|
|
||||||
class IsCompetitorOrNot(permissions.BasePermission):
|
class IsCompetitorOrNot(permissions.BasePermission):
|
||||||
|
|
||||||
def has_object_permission(self, request, view, obj):
|
def has_object_permission(self, request, view, obj):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from rest_framework import serializers
|
|||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||||
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
|
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
|
||||||
GeoCourse, GeoPolygon, GeoPoint,
|
GeoCourse, GeoPolygon, GeoPoint,PlannedSession,
|
||||||
)
|
)
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
@@ -31,8 +31,11 @@ class RowerSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
'at',
|
'at',
|
||||||
'tr',
|
'tr',
|
||||||
'an',
|
'an',
|
||||||
|
'hrzones',
|
||||||
'ftp',
|
'ftp',
|
||||||
|
'hrftp',
|
||||||
'sex',
|
'sex',
|
||||||
|
'defaulttimezone',
|
||||||
)
|
)
|
||||||
|
|
||||||
class FavoriteChartSerializer(serializers.ModelSerializer):
|
class FavoriteChartSerializer(serializers.ModelSerializer):
|
||||||
@@ -127,6 +130,34 @@ class VirtualRaceSerializer(serializers.ModelSerializer):
|
|||||||
'coursestandards',
|
'coursestandards',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class PlannedSessionSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = VirtualRace
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'comment',
|
||||||
|
'startdate',
|
||||||
|
'enddate',
|
||||||
|
'preferreddate',
|
||||||
|
'sessiontype',
|
||||||
|
'sessionvalue',
|
||||||
|
'sessionunit',
|
||||||
|
'sessionmode',
|
||||||
|
'course',
|
||||||
|
)
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
if self.context['request'].user.is_authenticated:
|
||||||
|
r = Rower.objects.get(user=self.context['request'].user)
|
||||||
|
else:
|
||||||
|
raise PermissionDenied("Not allowed")
|
||||||
|
|
||||||
|
ps = PlannedSession.objects.create(manager=r.user,**validated_data)
|
||||||
|
ps.rower.add(r)
|
||||||
|
ps.save()
|
||||||
|
return ps
|
||||||
|
|
||||||
class EntrySerializer(serializers.ModelSerializer):
|
class EntrySerializer(serializers.ModelSerializer):
|
||||||
entrycategory = CourseStandardSerializer(read_only=True)
|
entrycategory = CourseStandardSerializer(read_only=True)
|
||||||
race = VirtualRaceSerializer(read_only=True)
|
race = VirtualRaceSerializer(read_only=True)
|
||||||
@@ -172,7 +203,6 @@ class WorkoutSerializer(serializers.ModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
print(validated_data)
|
|
||||||
if self.context['request'].user.is_authenticated:
|
if self.context['request'].user.is_authenticated:
|
||||||
r = Rower.objects.get(user=self.context['request'].user)
|
r = Rower.objects.get(user=self.context['request'].user)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -208,6 +208,32 @@
|
|||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Planned Session</td>
|
||||||
|
<td><a href="/rowers/api/plannedsessions/">/rowers/api/plannedsessions/</a>
|
||||||
|
<br>
|
||||||
|
<a href="/rowers/api/plannedsessions/1">/rowers/api/plannedsessions/{id}</a></td>
|
||||||
|
<td>GET, POST, DELETE</td>
|
||||||
|
<td>
|
||||||
|
<pre>{
|
||||||
|
"id": 17,
|
||||||
|
"name": "Test Session",
|
||||||
|
"comment": "",
|
||||||
|
"startdate": "2021-01-25",
|
||||||
|
"enddate": "2021-01-31",
|
||||||
|
"preferreddate": "2021-01-29",
|
||||||
|
"sessiontype": "session",
|
||||||
|
"sessionvalue": 60,
|
||||||
|
"sessionunit": "min",
|
||||||
|
"sessionmode": "time",
|
||||||
|
"manager": 1,
|
||||||
|
"course": null
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Challenge</td>
|
<td>Challenge</td>
|
||||||
<td><a href="/rowers/api/challenges/">/rowers/api/challenges/</a>
|
<td><a href="/rowers/api/challenges/">/rowers/api/challenges/</a>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from django.views.decorators.csrf import csrf_exempt
|
|||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||||
VirtualRace,StandardCollection,CourseStandard,GeoCourse,
|
VirtualRace,StandardCollection,CourseStandard,GeoCourse,PlannedSession,
|
||||||
)
|
)
|
||||||
|
|
||||||
from rest_framework import routers, serializers, viewsets,permissions
|
from rest_framework import routers, serializers, viewsets,permissions
|
||||||
@@ -24,7 +24,8 @@ from django.utils.decorators import method_decorator
|
|||||||
|
|
||||||
from rowers.permissions import (
|
from rowers.permissions import (
|
||||||
IsOwnerOrNot,IsOwnerOrReadOnly,
|
IsOwnerOrNot,IsOwnerOrReadOnly,
|
||||||
IsCompetitorOrNot,
|
IsCompetitorOrNot,IsRowerOrNot,
|
||||||
|
IsPlanOrHigher,
|
||||||
)
|
)
|
||||||
from rowers.serializers import (
|
from rowers.serializers import (
|
||||||
WorkoutSerializer,
|
WorkoutSerializer,
|
||||||
@@ -38,6 +39,7 @@ from rowers.serializers import (
|
|||||||
GeoCourseSerializer,
|
GeoCourseSerializer,
|
||||||
GeoPolygonSerializer,
|
GeoPolygonSerializer,
|
||||||
GeoPointSerializer,
|
GeoPointSerializer,
|
||||||
|
PlannedSessionSerializer,
|
||||||
)
|
)
|
||||||
|
|
||||||
from oauth2_provider.views import (
|
from oauth2_provider.views import (
|
||||||
@@ -49,6 +51,25 @@ from oauth2_provider.views.base import (
|
|||||||
RevokeTokenView
|
RevokeTokenView
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class PlannedSessionViewSet(viewsets.ModelViewSet):
|
||||||
|
model = PlannedSession
|
||||||
|
serializer_class = PlannedSessionSerializer
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
try:
|
||||||
|
r = Rower.objects.get(user=self.request.user)
|
||||||
|
if r.rowerplan not in ['basic','pro']:
|
||||||
|
return PlannedSession.objects.filter(rower=r).order_by("-preferreddate")
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
except TypeError:
|
||||||
|
return []
|
||||||
|
|
||||||
|
permission_classes = (
|
||||||
|
IsRowerOrNot,
|
||||||
|
IsPlanOrHigher,
|
||||||
|
)
|
||||||
|
|
||||||
class WorkoutViewSet(viewsets.ModelViewSet):
|
class WorkoutViewSet(viewsets.ModelViewSet):
|
||||||
model = Workout
|
model = Workout
|
||||||
#queryset = Workout.objects.all().order_by("-date", "-starttime")
|
#queryset = Workout.objects.all().order_by("-date", "-starttime")
|
||||||
@@ -175,6 +196,7 @@ class StrokeDataViewSet(viewsets.ModelViewSet):
|
|||||||
# Routers provide an easy way of automatically determining the URL conf.
|
# Routers provide an easy way of automatically determining the URL conf.
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register(r'api/workouts',WorkoutViewSet, 'workout')
|
router.register(r'api/workouts',WorkoutViewSet, 'workout')
|
||||||
|
router.register(r'api/plannedsessions',PlannedSessionViewSet,'plannedsession')
|
||||||
router.register(r'api/me',RowerViewSet, 'rower')
|
router.register(r'api/me',RowerViewSet, 'rower')
|
||||||
router.register(r'api/charts',FavoriteChartViewSet, 'charts')
|
router.register(r'api/charts',FavoriteChartViewSet, 'charts')
|
||||||
router.register(r'api/entries',EntryViewSet,'entries')
|
router.register(r'api/entries',EntryViewSet,'entries')
|
||||||
|
|||||||
Reference in New Issue
Block a user