Merge branch 'release/v15.28'
This commit is contained in:
@@ -2292,6 +2292,7 @@ class PlannedSession(models.Model):
|
||||
if self.sessionvalue <= 0:
|
||||
self.sessionvalue = 1
|
||||
|
||||
|
||||
manager = self.manager
|
||||
if self.sessiontype not in ['race','indoorrace']:
|
||||
if not can_add_session(self.manager):
|
||||
|
||||
@@ -27,6 +27,16 @@ class IsOwnerOrNot(permissions.BasePermission):
|
||||
r = Rower.objects.get(user=request.user)
|
||||
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):
|
||||
|
||||
def has_object_permission(self, request, view, obj):
|
||||
|
||||
@@ -10,7 +10,7 @@ from rest_framework import serializers
|
||||
from rowers.models import (
|
||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
|
||||
GeoCourse, GeoPolygon, GeoPoint,
|
||||
GeoCourse, GeoPolygon, GeoPoint,PlannedSession,
|
||||
)
|
||||
|
||||
from django.core.exceptions import PermissionDenied
|
||||
@@ -31,8 +31,11 @@ class RowerSerializer(serializers.HyperlinkedModelSerializer):
|
||||
'at',
|
||||
'tr',
|
||||
'an',
|
||||
'hrzones',
|
||||
'ftp',
|
||||
'hrftp',
|
||||
'sex',
|
||||
'defaulttimezone',
|
||||
)
|
||||
|
||||
class FavoriteChartSerializer(serializers.ModelSerializer):
|
||||
@@ -127,6 +130,34 @@ class VirtualRaceSerializer(serializers.ModelSerializer):
|
||||
'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):
|
||||
entrycategory = CourseStandardSerializer(read_only=True)
|
||||
race = VirtualRaceSerializer(read_only=True)
|
||||
@@ -172,7 +203,6 @@ class WorkoutSerializer(serializers.ModelSerializer):
|
||||
)
|
||||
|
||||
def create(self, validated_data):
|
||||
print(validated_data)
|
||||
if self.context['request'].user.is_authenticated:
|
||||
r = Rower.objects.get(user=self.context['request'].user)
|
||||
else:
|
||||
|
||||
@@ -208,6 +208,32 @@
|
||||
</td>
|
||||
|
||||
</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>
|
||||
<td>Challenge</td>
|
||||
<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 rowers.models import (
|
||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||
VirtualRace,StandardCollection,CourseStandard,GeoCourse,
|
||||
VirtualRace,StandardCollection,CourseStandard,GeoCourse,PlannedSession,
|
||||
)
|
||||
|
||||
from rest_framework import routers, serializers, viewsets,permissions
|
||||
@@ -24,7 +24,8 @@ from django.utils.decorators import method_decorator
|
||||
|
||||
from rowers.permissions import (
|
||||
IsOwnerOrNot,IsOwnerOrReadOnly,
|
||||
IsCompetitorOrNot,
|
||||
IsCompetitorOrNot,IsRowerOrNot,
|
||||
IsPlanOrHigher,
|
||||
)
|
||||
from rowers.serializers import (
|
||||
WorkoutSerializer,
|
||||
@@ -38,6 +39,7 @@ from rowers.serializers import (
|
||||
GeoCourseSerializer,
|
||||
GeoPolygonSerializer,
|
||||
GeoPointSerializer,
|
||||
PlannedSessionSerializer,
|
||||
)
|
||||
|
||||
from oauth2_provider.views import (
|
||||
@@ -49,6 +51,25 @@ from oauth2_provider.views.base import (
|
||||
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):
|
||||
model = Workout
|
||||
#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.
|
||||
router = routers.DefaultRouter()
|
||||
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/charts',FavoriteChartViewSet, 'charts')
|
||||
router.register(r'api/entries',EntryViewSet,'entries')
|
||||
|
||||
Reference in New Issue
Block a user