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.contrib.postgres.fields import ArrayField
from django.db import models from django.db import models
from model_utils import Choices from model_utils import Choices
from courses.api import CourseProgressApi
class Progress(models.Model): class Progress(models.Model):
@ -15,6 +16,27 @@ class Progress(models.Model):
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент')
course_token = models.UUIDField(verbose_name="Токен курса", editable=False) 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): def __str__(self):
return '%s' % (self.user.email,) return '%s' % (self.user.email,)

@ -5,6 +5,7 @@ from access.models.other import Account
from access.models.progress import ProgressLesson from access.models.progress import ProgressLesson
from access.models import Progress from access.models import Progress
from achievements.serialers import DiplomaSerializer, AchievementsSerializer from achievements.serialers import DiplomaSerializer, AchievementsSerializer
from courses.api import CourseProgressApi
class ProgressLessonSerializer(serializers.ModelSerializer): class ProgressLessonSerializer(serializers.ModelSerializer):
@ -19,6 +20,24 @@ class ProgressLessonSerializer(serializers.ModelSerializer):
return self.teacher.get_full_name() 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): class ProgressSerializer(serializers.ModelSerializer):
lessons = serializers.SerializerMethodField() lessons = serializers.SerializerMethodField()

@ -14,5 +14,6 @@ urlpatterns = [
url(r'logout/$', views.LogoutView.as_view()), url(r'logout/$', views.LogoutView.as_view()),
url(r'reset/$', views.ResetPasswordView.as_view()), url(r'reset/$', views.ResetPasswordView.as_view()),
url(r'progress/$', views.UpdateProgress.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()), 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.other import Invite, ResetPassword
from access.models.progress import ProgressLesson from access.models.progress import ProgressLesson
from access.models import Progress 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): class TeacherListView(APIView):
@ -318,6 +320,26 @@ class CourseProgressDynamicView(APIView):
return Response(status=403) 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): class MinUserView(APIView):
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)

@ -19,3 +19,11 @@ class InApiTeacher:
@staticmethod @staticmethod
def get_token_list(slug: str) -> list: def get_token_list(slug: str) -> list:
return Course.objects.get(slug=slug).teacher_tokens 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