Merge branch 'current_branch' into 'dev'

migrate update

See merge request !35
feature/fix_generate_pass
Andrey 8 years ago
commit a072eabf12
  1. 2
      progress/management/commands/set_progress.py
  2. 1
      progress/urls.py
  3. 94
      progress/views.py

@ -101,7 +101,7 @@ class Command(BaseCommand):
pl.finish_date = None
pl.save()
except ProgressLesson.DoesNotExist:
pl = ProgressLesson.objects.create(
ProgressLesson.objects.create(
progress=progress,
lesson_token=token_list[-1:][0],
checker=progress.teacher if lesson_list[-1:][0].is_hm else student

@ -6,4 +6,5 @@ urlpatterns = [
url(r'students/(?P<teacher_token>[0-9A-Fa-f-]+)/$', views.StudentWorkView.as_view()),
url(r'student/$', views.StudentUpdateProgress.as_view()),
url(r'teacher/$', views.TeacherUpdateProgress.as_view()),
url(r'set-progress/$', views.SetProgress.as_view()),
]

@ -10,6 +10,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView
from django.db.models import Q
from courses.models import Course
from progress.models import ProgressLesson, Progress
from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer
from courses.api import CourseProgressApi
@ -252,3 +253,96 @@ class UserGuardView(APIView):
return res_204
return res_403
class SetProgress(APIView):
renderer_classes = (JSONRenderer,)
permission_classes = (IsAuthenticated,)
@staticmethod
def post(request):
if request.user.is_staff:
email = request.JSON.get('email', None)
course_slug = request.JSON.get('course_slug', None)
topic_sort = int(request.JSON.get('topic', 1))
lesson_sort = int(request.JSON.get('lesson', 1))
force = request.JSON.get('force', False)
if course_slug is None:
return Response('course_slug не передан', status=400)
if email is None:
return Response('email не передан', status=400)
try:
student = get_user_model().objects.get(email=email)
except get_user_model().DoesNotExist:
return Response("User doesn't exist", status=404)
try:
course = Course.objects.get(slug=course_slug)
except get_user_model().DoesNotExist:
return Response("Course doesn't exist", status=404)
try:
progress = Progress.objects.get(course_token=course.token, user=student)
except Progress.DoesNotExist:
if not force:
return Response("Студент не проходит этот курс", status=403)
teacher = get_user_model().objects.get(out_key=course.get_teacher())
progress = Progress.objects.create(course_token=course.token, user=student, teacher=teacher)
token_list = []
lesson_list = []
for topic_idx, topic in enumerate(course.topic_set.all()):
topic_find = topic_idx == (topic_sort - 1)
for lesson_idx, lesson in enumerate(topic.lesson_set.all()):
token_list.append(lesson.token)
lesson_list.append(lesson)
if lesson_idx == (lesson_sort - 1) and topic_find:
break
if topic_find:
break
if progress.progresslesson_set.filter(
~Q(lesson_token__in=token_list)).exists() and not force:
return Response("Пользователь, прошёл дальше по курсу", status=403)
progress.progresslesson_set.filter(~Q(lesson_token__in=token_list)).delete()
for lesson_idx, lesson_token in enumerate(token_list[:-1]):
try:
pl = ProgressLesson.objects.get(progress__user=student, lesson_token=lesson_token)
if pl.finish_date is None:
pl.finish_date = datetime.datetime.now()
pl.status = 'done'
pl.save()
except ProgressLesson.DoesNotExist:
ProgressLesson.objects.create(
progress=progress,
lesson_token=lesson_token,
checker=progress.teacher if lesson_list[lesson_idx].is_hm else student,
status="done",
finish_date=datetime.datetime.now()
)
try:
pl = ProgressLesson.objects.get(progress=progress, lesson_token=token_list[-1:][0])
if pl.status == "done":
pl.status = "start"
pl.finish_date = None
pl.save()
except ProgressLesson.DoesNotExist:
ProgressLesson.objects.create(
progress=progress,
lesson_token=token_list[-1:][0],
checker=progress.teacher if lesson_list[-1:][0].is_hm else student
)
return Response(status=204)
else:
return Response("Эта функция доступна только сотрудникам персонала", status=403)

Loading…
Cancel
Save