feature/fix_generate_pass
Andrey 8 years ago
parent b0f8151052
commit 486f19023e
  1. 22
      access/models/progress.py
  2. 19
      access/serializers.py
  3. 1
      access/urls.py
  4. 24
      access/views.py
  5. 8
      courses/api.py

@ -2,6 +2,7 @@ from django.conf import settings
from django.contrib.postgres.fields import ArrayField
from django.db import models
from model_utils import Choices
from courses.api import CourseProgressApi
class Progress(models.Model):
@ -15,6 +16,27 @@ class Progress(models.Model):
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент')
course_token = models.UUIDField(verbose_name="Токен курса", editable=False)
def progress_status(self, sorted_token_list):
"""
Возвращает порядок активной темы и урока или ничего
:return: (topic_sort, lesson_sort) or None
"""
token_list = [i.lesson_token for i in self.progresslesson_set.filter(status='done')]
x = (1, 1)
for idx_topic, lesson_list in enumerate(sorted_token_list):
for idx_lesson, lesson_token in enumerate(lesson_list):
if lesson_token in token_list:
x = None
elif x is None:
x = (idx_topic+1, idx_lesson+1)
return x
def __str__(self):
return '%s' % (self.user.email,)

@ -5,6 +5,7 @@ from access.models.other import Account
from access.models.progress import ProgressLesson
from access.models import Progress
from achievements.serialers import DiplomaSerializer, AchievementsSerializer
from courses.api import CourseProgressApi
class ProgressLessonSerializer(serializers.ModelSerializer):
@ -19,6 +20,24 @@ class ProgressLessonSerializer(serializers.ModelSerializer):
return self.teacher.get_full_name()
class ProgressAnalyticSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
email = serializers.SerializerMethodField()
class Meta:
model = Progress
fields = ('name', 'email',)
@staticmethod
def get_name(self):
return self.user.get_full_name()
@staticmethod
def get_email(self):
return self.user.email
class ProgressSerializer(serializers.ModelSerializer):
lessons = serializers.SerializerMethodField()

@ -14,5 +14,6 @@ urlpatterns = [
url(r'logout/$', views.LogoutView.as_view()),
url(r'reset/$', views.ResetPasswordView.as_view()),
url(r'progress/$', views.UpdateProgress.as_view()),
url(r'progress_detail/(?P<token>[0-9A-Fa-f-]+)/$', views.CourseProgressUserView.as_view()),
url(r'progress_dynamic/(?P<token>[0-9A-Fa-f-]+)/$', views.CourseProgressDynamicView.as_view()),
]

@ -16,7 +16,9 @@ from rest_framework.views import APIView
from access.models.other import Invite, ResetPassword
from access.models.progress import ProgressLesson
from access.models import Progress
from access.serializers import UserSelfSerializer, UserSearchSerializer, ProgressLessonSerializer
from access.serializers import UserSelfSerializer, UserSearchSerializer, ProgressLessonSerializer, \
ProgressAnalyticSerializer
from courses.api import CourseProgressApi
class TeacherListView(APIView):
@ -318,6 +320,26 @@ class CourseProgressDynamicView(APIView):
return Response(status=403)
class CourseProgressUserView(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def get(request, token):
if request.user.is_authenticated() and request.user.is_staff:
try:
res = []
sorted_token_list = CourseProgressApi.get_topic_lesson(token)
for p in Progress.objects.filter(course_token=token):
progress = ProgressAnalyticSerializer(p).data
progress['progress_course'] = p.progress_status(sorted_token_list)
res.append(progress)
return Response(res, status=200)
except ValidationError:
return Response("Bad request", status=400)
return Response(status=403)
class MinUserView(APIView):
renderer_classes = (JSONRenderer,)

@ -19,3 +19,11 @@ class InApiTeacher:
@staticmethod
def get_token_list(slug: str) -> list:
return Course.objects.get(slug=slug).teacher_tokens
class CourseProgressApi:
@staticmethod
def get_topic_lesson(course_token: str):
course = Course.objects.get(token=course_token)
return [[lesson.token for lesson in topic.lesson_set.all()] for topic in course.topic_set.all()]
Loading…
Cancel
Save