1
1
import datetime
2
2
import os
3
+ from typing import List
3
4
from django .http import JsonResponse
4
5
from django .contrib .auth import get_user_model
5
6
@@ -332,6 +333,15 @@ def get(self, _, pk):
332
333
serializer = self .serializer_class (queryset [0 ])
333
334
return Response (serializer .data , status = status .HTTP_200_OK )
334
335
336
+ def setAttendence (self , request , attended ):
337
+ if request .user .role != AccountRoles .STUDENT :
338
+ return Response ({"error" : f"cannot set the attendence of a non-student" }, status = status .HTTP_200_OK )
339
+
340
+ lecture : CourseLecture = self .get_object ()
341
+ lecture .set_attendence_user (request .user , attended = attended , teacher = False )
342
+
343
+ return Response ({"ok" : f"successfully set attendence" }, status = status .HTTP_200_OK )
344
+
335
345
class SetStudentAttView (generics .GenericAPIView ):
336
346
authentication_classes = [JWTAuthentication ]
337
347
permission_classes = [IsStudent ]
@@ -341,13 +351,19 @@ class SetStudentAttView(generics.GenericAPIView):
341
351
serializer_class = CourseLecture
342
352
343
353
def post (self , request , * args , ** kwargs ):
344
- if request .user .role != AccountRoles .STUDENT :
345
- return Response ({"error" : f"cannot set the attendence of a non-student" }, status = status .HTTP_200_OK )
346
-
347
- lecture : CourseLecture = self .get_object ()
348
- lecture .set_attendence_user (request .user , teacher = False )
354
+ return setAttendence (self , request , True )
349
355
350
- return Response ({"ok" : f"successfully set attendence" }, status = status .HTTP_200_OK )
356
+ class UnsetStudentAttView (generics .GenericAPIView ):
357
+ authentication_classes = [JWTAuthentication ]
358
+ permission_classes = [IsStudent ]
359
+ lookup_field = 'pk'
360
+
361
+ queryset = CourseLecture .objects .all ()
362
+ serializer_class = CourseLecture
363
+
364
+ def post (self , request , * args , ** kwargs ):
365
+ print (request .user )
366
+ return setAttendence (self , request , False )
351
367
352
368
class SetTeacherAttView (generics .GenericAPIView ):
353
369
authentication_classes = [JWTAuthentication ]
@@ -364,27 +380,34 @@ def post(self, request, *args, **kwargs):
364
380
365
381
queryset = User .objects .all ()
366
382
usernames = result .data ["usernames" ]
367
- for username in usernames :
383
+ for username , attended in usernames . items () :
368
384
user = queryset .filter (username = username )[0 ]
369
- lecture .set_attendence_user (user , teacher = True )
385
+ lecture .set_attendence_user (user , attended = ( attended == "true" ), teacher = True )
370
386
371
387
return Response ({"ok" : f"succesfully set attendence for { len (usernames )} students" }, status = status .HTTP_200_OK )
372
388
389
+
373
390
class GetScheduleView (generics .GenericAPIView ):
374
391
authentication_classes = [JWTAuthentication ]
375
392
permission_classes = [IsStudent ]
376
393
377
- def get (self , request , * args , ** kwargs ):
394
+ def get (self , request , year , week ):
395
+ if not year .isdigit () or int (year ) < 1970 :
396
+ return Response ({"error" : f"invalid year parameter" }, status = status .HTTP_400_BAD_REQUEST )
397
+ if not week .isdigit () or int (week ) < 0 or int (week ) > 52 :
398
+ return Response ({"error" : f"invalid week parameter" }, status = status .HTTP_400_BAD_REQUEST )
399
+
378
400
user = User .objects .all ().filter (username = request .user .username )[0 ]
379
- courses = user .get_enrolled_courses ()
401
+ courses : List [ Course ] = user .get_enrolled_courses ()
380
402
all_lectures = []
381
- for course in courses :
382
- lectures_obj = course .get_lectures ( )
403
+ for course in courses :
404
+ lectures_obj = course .get_lectures_week ( int ( year ), int ( week ) )
383
405
lectures = LectureSerializer (lectures_obj , many = True )
384
406
for i , lecture_obj in enumerate (lectures_obj ):
385
407
att = lecture_obj .get_attendence_user (user )
386
- lectures .data [i ]["attended_student" ] = att .attended_student if att is not None else False
387
- lectures .data [i ]["attended_teacher" ] = att .attended_teacher if att is not None else False
408
+ lectures .data [i ]["course_name" ] = lecture_obj .course .course_name
409
+ lectures .data [i ]["attended_student" ] = att .attended_student if att is not None else None
410
+ lectures .data [i ]["attended_teacher" ] = att .attended_teacher if att is not None else None
388
411
all_lectures += lectures .data
389
412
390
413
# Sort chronological order
0 commit comments