Skip to content
Snippets Groups Projects
Commit 6f8ecf33 authored by Daphne Li-Chen's avatar Daphne Li-Chen
Browse files

AA-204: passing correct section information to frontend to complete outline portion of tab

parent 725e0bbd
No related branches found
No related tags found
No related merge requests found
"""
Progress Tab Serializers
"""
from rest_framework import serializers
from lms.djangoapps.course_home_api.outline.v1.serializers import CourseBlockSerializer
from rest_framework.reverse import reverse
class GradedTotalSerializer(serializers.Serializer):
earned = serializers.FloatField()
first_attempted = serializers.CharField()
graded = serializers.BooleanField()
possible = serializers.FloatField()
class SubsectionSerializer(serializers.Serializer):
display_name = serializers.CharField()
due = serializers.DateTimeField()
format = serializers.CharField()
graded = serializers.BooleanField()
graded_total = GradedTotalSerializer()
# TODO: override serializer
percent_graded = serializers.FloatField()
problem_scores = serializers.SerializerMethodField()
show_correctness = serializers.CharField()
show_grades = serializers.SerializerMethodField()
url = serializers.SerializerMethodField()
def get_url(self, subsection):
relative_path = reverse('jump_to', args=[self.context['course_key'], subsection.location])
request = self.context['request']
return request.build_absolute_uri(relative_path)
def get_problem_scores(self, subsection):
problem_scores = [
{
'earned': score.earned,
'possible': score.possible,
}
for score in subsection.problem_scores.values()
]
return problem_scores
def get_show_grades(self, subsection):
return subsection.show_grades(self.context['staff_access'])
class ChapterSerializer(serializers.Serializer):
"""
Serializer for chapters in coursewaresummary
"""
display_name = serializers.CharField()
subsections = SubsectionSerializer(source='sections', many=True)
class ProgressTabSerializer(serializers.Serializer):
......@@ -11,4 +58,6 @@ class ProgressTabSerializer(serializers.Serializer):
Serializer for progress tab
"""
course_blocks = CourseBlockSerializer()
courseware_summary = ChapterSerializer(many=True)
enrollment_mode = serializers.CharField()
user_timezone = serializers.CharField()
......@@ -13,6 +13,7 @@ from lms.djangoapps.course_home_api.progress.v1.serializers import ProgressTabSe
from student.models import CourseEnrollment, UserTestGroup
from lms.djangoapps.course_api.blocks.transformers.blocks_api import BlocksAPITransformer
from lms.djangoapps.courseware.context_processor import user_timezone_locale_prefs
from lms.djangoapps.courseware.courses import get_course_with_access
from lms.djangoapps.courseware.masquerade import setup_masquerade
from lms.djangoapps.courseware.access import has_access
......@@ -20,6 +21,7 @@ from xmodule.modulestore.django import modulestore
from lms.djangoapps.course_blocks.api import get_course_blocks
import lms.djangoapps.course_blocks.api as course_blocks_api
from lms.djangoapps.grades.api import CourseGradeFactory
from openedx.core.djangoapps.content.block_structure.transformers import BlockStructureTransformers
......@@ -82,21 +84,31 @@ class ProgressTabView(RetrieveAPIView):
reset_masquerade_data=True
)
user_timezone_locale = user_timezone_locale_prefs(request)
user_timezone = user_timezone_locale['user_timezone']
transformers = BlockStructureTransformers()
transformers += course_blocks_api.get_course_block_access_transformers(request.user)
transformers += [
BlocksAPITransformer(None, None, depth=3),
]
get_course_with_access(request.user, 'load', course_key, check_if_enrolled=True)
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=True)
course_blocks = get_course_blocks(request.user, course_usage_key, transformers, include_completion=True)
enrollment_mode, _ = CourseEnrollment.enrollment_mode_for_user(request.user, course_key)
course_grade = CourseGradeFactory().read(request.user, course)
courseware_summary = course_grade.chapter_grades.values()
data = {
'course_blocks': course_blocks,
'enrollment_mode': enrollment_mode,
'courseware_summary': courseware_summary,
'user_timezone': user_timezone,
}
serializer = self.get_serializer(data)
context = self.get_serializer_context()
context['staff_access'] = bool(has_access(request.user, 'staff', course))
context['course_key'] = course_key
serializer = self.get_serializer_class()(data, context=context)
return Response(serializer.data)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment