Commit 0d7a1534 authored by Matheus Miranda's avatar Matheus Miranda
Browse files

Add class UserCourseStats

parent 08b818ab
...@@ -11,7 +11,7 @@ import pandas as pd ...@@ -11,7 +11,7 @@ import pandas as pd
from discussion.models import Comment, CommentLike, Topic, TopicLike from discussion.models import Comment, CommentLike, Topic, TopicLike
from courses.models import Course, CourseStudent, StudentProgress from courses.models import Course, CourseStudent, StudentProgress, User
from courses.classes.models import Class from courses.classes.models import Class
from courses_learning_objects.models import LearningObject, Answer from courses_learning_objects.models import LearningObject, Answer
...@@ -296,3 +296,55 @@ class UsersByClassViewSet(PandasViewSet): ...@@ -296,3 +296,55 @@ class UsersByClassViewSet(PandasViewSet):
def get_pandas_filename(self, request, format): def get_pandas_filename(self, request, format):
return 'Relatório de progresso dos usuários' return 'Relatório de progresso dos usuários'
class ReportPagination(PageNumberPagination):
page_size = 50
page_size_query_param = 'page_size'
max_page_size = 100
class UserCourseStats(viewsets.ReadOnlyModelViewSet):
model = User
queryset = User.objects.all().order_by('name')
serializer_class = UserCourseStatsSerializer
filter_fields = ('group',)
# filter vai ser o group
permission_classes = [IsAuthenticated]
pagination_class = ReportPagination
filter_backends = [
filters.SearchFilter,
DjangoFilterBackend,
]
search_fields = [
'username',
'name',
'first_name',
'last_name',
'email'
]
def get_queryset(self):
## MANTER O FILTER ABAIXO?
queryset = super(User, self).get_queryset().filter(is_active=True)
user = self.request.user
course_id = self.request.query_params.get('course')
role = None
try:
role = self.request.user.teaching_courses.get(course__id=course_id).role
except ObjectDoesNotExist:
pass
classes_id = self.request.query_params.getlist('classes')
# class passed as get paremeter
classes = Class.objects.filter(course=course_id)
if classes_id:
classes = classes.filter(id__in=classes_id)
queryset = queryset.filter(user__classes__in=classes)
if not ((role and role == 'coordinator') or self.request.user.is_staff or self.request.user.is_superuser):
# if user is not coordinator or admin, only show his classes
classes = classes.filter(assistants=user)
queryset = queryset.filter(user__classes__in=classes)
return queryset.select_related('user', 'course')
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment