def put(self, request, *args, **kwargs): try: lesson = Lesson.objects.get(pk=kwargs['pk']) attendance = Attendance.objects.get(pk=kwargs['att_pk']) except Lesson.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Lesson of requested id does not exist") except Attendance.DoesNotExist: CreateAttendanceRequest(data=request.data).is_valid( raise_exception=True) student = Person.objects.get( Q(pk=request.data.get("student_id", "")) & Q(groups__in=[1])) attendance = Attendance.objects.create( pk=kwargs['att_pk'], lesson=lesson, student=student, was_present=request.data.get("was_present", "")) return Response(data=AttendanceSerializer(attendance).data, status=status.HTTP_201_CREATED) if attendance.lesson.id is not lesson.id: raise GenericException( code=status.HTTP_400_BAD_REQUEST, detail="Attendance of requested id is not from requested lesson" ) attendance.was_present = not attendance.was_present attendance.save() return Response(status=status.HTTP_204_NO_CONTENT)
def get_queryset(self): try: student = Person.objects.get(pk=self.kwargs['pk']) except Person.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Student of requested id does not exist") if student.groups.filter(pk=1).count() == 0: raise GenericException(code=status.HTTP_400_BAD_REQUEST, detail="User of given id is not a student") enrollments = Enrollment.objects.filter(student=student) class_groups = list() for enrollment in enrollments: if enrollment.class_group.id in class_groups: continue class_groups.append(enrollment.class_group.id) transfer_requests = TransferRequest.objects.filter( Q(enrollment__student=student) & Q(status=TransferStatus.PENDING)) for request in transfer_requests: if request.target_group.id in class_groups: continue class_groups.append(request.target_group.id) available_class_groups = ClassGroup.objects.exclude( pk__in=class_groups) return available_class_groups
def post(self, request, *args, **kwargs): try: student = Person.objects.get(pk=self.kwargs['pk'], groups__in=[1]) except Person.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Student of requested id does not exist") EnrollmentRequestSerializer(data=request.data).is_valid( raise_exception=True) class_group = ClassGroup.objects.get( pk=request.data.get("class_group_id", "")) enrollment_status = EnrollmentStatus( request.data.get("enrollment_status", "")) active = True if enrollment_status is EnrollmentStatus.ACCEPTED else False if Enrollment.objects.filter(student=student, class_group=class_group).count() > 0: raise GenericException( code=status.HTTP_400_BAD_REQUEST, detail="'{}' is already enrolled in '{}'".format( student.first_name, class_group)) enrollment = Enrollment.objects.create(student=student, class_group=class_group, graduated=False, finalGrade=None, active=active, status=enrollment_status) return Response(data=EnrollmentSerializer(enrollment).data, status=status.HTTP_201_CREATED)
def post(self, request, *args, **kwargs): origin_group = ClassGroup.objects.get( pk=request.data.get("class_group_id", "")) requester_student = Person.objects.get( Q(pk=request.data.get("student_id", "")) & Q(groups__in=[Group.objects.get(pk=1)])) enrollment = Enrollment.objects.get( Q(class_group=origin_group) & Q(student=requester_student)) target_group = ClassGroup.objects.get( Q(id=request.data.get("target_group_id", "")) & Q(course=origin_group.course)) if Enrollment.objects.filter( Q(class_group=target_group) & Q(student=requester_student)).count() > 0: raise GenericException( code=status.HTTP_400_BAD_REQUEST, detail="'{}' is already enrolled in '{}.'".format( requester_student, target_group)) transfer_request = TransferRequest.objects.create( enrollment=enrollment, target_group=target_group, status=TransferStatus.PENDING) return Response(data=TransferRequestSerializer(transfer_request).data, status=status.HTTP_201_CREATED)
def get_queryset(self): try: class_group = ClassGroup.objects.get(pk=self.kwargs['pk']) except ClassGroup.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="ClassGroup of requested id does not exist") return Enrollment.objects.filter(class_group=class_group)
def get(self, request, *args, **kwargs): try: student = Person.objects.get(pk=self.kwargs['pk'], groups__in=[1]) class_group = ClassGroup.objects.filter( pk=self.kwargs['group_id'])[:1].get() except Person.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Student of requested id does not exist") except ClassGroup.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Class group of requested id does not exist") attendances = list( Attendance.objects.filter(student=student, lesson__class_group=class_group)) return Response(data=StudentAttendanceSerializer(attendances, many=True).data, status=status.HTTP_200_OK)
def delete(self, request, *args, **kwargs): try: transfer_request = TransferRequest.objects.get(pk=kwargs["pk"]) except TransferRequest.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Transfer Request of requested id does not exist") transfer_request.status = TransferStatus.REJECTED transfer_request.save() return Response(status=status.HTTP_204_NO_CONTENT)
def get(self, request, *args, **kwargs): try: user = Person.objects.get(pk=self.kwargs['pk']) except Person.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="User of requested id does not exist") if not user.groups.filter(pk__in=[2, 3]): raise GenericException( code=status.HTTP_403_FORBIDDEN, detail= "User does not have the required permissions to perform this action" ) class_groups = list( ClassGroup.objects.filter( Q(teacher=user) | Q(collaborators__in=[user]))) return Response(data=ClassGroupSerializer(class_groups, many=True).data, status=status.HTTP_200_OK)
def get(self, request, *args, **kwargs): try: lesson = Lesson.objects.get(pk=self.kwargs['pk']) except Lesson.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Lesson of requested id does not exist") attendances = list(Attendance.objects.filter(lesson=lesson)) return Response(data=LessonAttendanceSerializer(attendances, many=True).data, status=status.HTTP_200_OK)
def get(self, request, *args, **kwargs): try: class_group = ClassGroup.objects.get(pk=kwargs['pk']) except ClassGroup.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Class group of requested id could not be found") lessons = Lesson.objects.filter(class_group=class_group) return Response(data=ClassGroupLessonSerializer(lessons, many=True).data, status=status.HTTP_200_OK)
def get(self, request, *args, **kwargs): try: student = Person.objects.filter(pk=self.kwargs['pk'], groups__in=[1])[:1].get() except Person.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Student of requested id does not exist") student_enrollments = list( Enrollment.objects.filter(student_id=student.id)) serializer = StudentEnrollmentSerializer(student_enrollments, many=True) return Response(data=serializer.data, status=status.HTTP_200_OK)
def get(self, request, *args, **kwargs): if Course.objects.filter(pk=self.kwargs['pk']).count() == 0: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Course of requested id does not exist") enrollments = list( Enrollment.objects.filter( class_group__course_id=self.kwargs['pk'])) students = list() for enrollment in enrollments: if enrollment.student in students: continue students.append(enrollment.student) return Response(data=StudentSerializer(students, many=True).data, status=status.HTTP_200_OK)
def get(self, request, *args, **kwargs): try: student = Person.objects.get(pk=self.kwargs['pk'], groups__in=[1]) class_group = ClassGroup.objects.filter( pk=self.kwargs['group_id'])[:1].get() except Person.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Student of requested id does not exist") except ClassGroup.DoesNotExist: raise GenericException( code=status.HTTP_404_NOT_FOUND, detail="Class group of requested id does not exist") student_enrollments = list(Enrollment.objects.filter(student=student)) student_class_group_ids = list() for enrollment in student_enrollments: student_class_group_ids.append(enrollment.class_group.id) targets = list( ClassGroup.objects.filter( Q(course=class_group.course) & ~Q(pk=class_group.pk) & ~Q(pk__in=student_class_group_ids))) return Response(data=ClassGroupSerializer(targets, many=True).data, status=status.HTTP_200_OK)