diff --git a/courses/api.py b/courses/api.py index 2b4e99a..adfabd9 100644 --- a/courses/api.py +++ b/courses/api.py @@ -21,7 +21,6 @@ class InApiTeacher: class CourseProgressApi: - @staticmethod def get_topic_lesson(course_token: str): course = Course.objects.get(token=course_token) @@ -36,10 +35,12 @@ class CourseProgressApi: :return: следующий урок для прохождения и требует ли он валидации """ course = Course.objects.get(token=course_token) - acc = None + acc = [] + include_lesson = True for lesson in course.get_lesson_list(): - if not lesson.token in lesson_list: - acc = (lesson.token, lesson.is_hm) - break + if not lesson.token in lesson_list and include_lesson: + acc.append((lesson.token, lesson.is_hm)) + else: + include_lesson = True - return acc \ No newline at end of file + return acc diff --git a/progress/migrations/0002_auto_20180202_1414.py b/progress/migrations/0002_auto_20180202_1414.py new file mode 100644 index 0000000..1b25b13 --- /dev/null +++ b/progress/migrations/0002_auto_20180202_1414.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-02-02 14:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('progress', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='progresslesson', + name='status', + field=models.CharField(choices=[('start', 'start'), ('done', 'done'), ('wait', 'wait'), ('fail', 'fail')], default='start', max_length=20), + ), + ] diff --git a/progress/models.py b/progress/models.py index 5bedf06..2263175 100644 --- a/progress/models.py +++ b/progress/models.py @@ -52,8 +52,8 @@ class ProgressLesson(models.Model): checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь", ) finish_date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) start_date = models.DateTimeField(verbose_name='Дата начала прохождения задания', auto_now_add=True) - STATUSES = Choices('done', 'wait', 'fail') - status = models.CharField(choices=STATUSES, default=STATUSES.wait, max_length=20) + STATUSES = Choices('start', 'done', 'wait', 'fail') + status = models.CharField(choices=STATUSES, default=STATUSES.start, max_length=20) comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=[]) def __str__(self): diff --git a/progress/tasks.py b/progress/tasks.py index dfc2eeb..1f8d6e4 100644 --- a/progress/tasks.py +++ b/progress/tasks.py @@ -3,18 +3,28 @@ from progress.models import ProgressLesson def add_next_lesson(progress): - lesson, is_hw = CourseProgressApi.get_next( + lesson_list = CourseProgressApi.get_next( progress.course_token, [i.lesson_token for i in progress.progresslesson_set.all()] ) - if is_hw: - ProgressLesson.objects.get( - progress=progress, - lesson_token=lesson, - checker=progress.teacher, - ) + last_lesson = None - progress.active_lesson = lesson + for lesson, is_hw in lesson_list: + if is_hw: + ProgressLesson.objects.get( + progress=progress, + lesson_token=lesson, + checker=progress.teacher, + ) + else: + ProgressLesson.objects.get( + progress=progress, + lesson_token=lesson, + checker=progress.user, + ) + last_lesson = lesson + + progress.active_lesson = last_lesson progress.save() return "access update course %s" % progress.course_token diff --git a/progress/views.py b/progress/views.py index ec624dc..330523e 100644 --- a/progress/views.py +++ b/progress/views.py @@ -65,7 +65,7 @@ class UpdateProgress(APIView): lesson_token = request.JSON.get('lesson_token', None) course_token = request.JSON.get('course_token', None) student_out_key = request.JSON.get('student_out_key', None) - action = request.JSON.get('action', 'wait') + action = request.JSON.get('action', None) comment = request.JSON.get('comment', None) if lesson_token is None or course_token is None: @@ -83,20 +83,25 @@ class UpdateProgress(APIView): course_token=course_token, ) - if p.active_lesson == lesson_token: - return Response("Ошибка доступа", status=403) - try: pv = ProgressLesson.objects.get( progress=p, - lesson_token=p.active_lesson, + lesson_token=lesson_token, ) - if is_student and pv.status == ProgressLesson.STATUSES.fail and action == "wait": - pv.status = ProgressLesson.STATUSES.wait + if is_student and not pv.status == ProgressLesson.STATUSES.wait\ + and not pv.status == ProgressLesson.STATUSES.done: + + if pv.checker == p.teacher: + pv.status = ProgressLesson.STATUSES.wait + elif pv.checker == p.user: + pv.status = ProgressLesson.STATUSES.done + else: + raise ValueError("Этого никогда не должнопроисходить но я уверен, что произойдёт") elif not is_student and pv.status == ProgressLesson.STATUSES.wait: pv.status = action + pv.finish_date = datetime.datetime.now() else: return Response("Ошибка прав доступа", status=403) @@ -104,13 +109,7 @@ class UpdateProgress(APIView): pv.comment_tokens.append(comment) except ProgressLesson.DoesNotExist: - pv = ProgressLesson.objects.create( - date=datetime.datetime.now(), - teacher=p.teacher, - progress=p, - lesson_token=p.active_lesson, - status=ProgressLesson.STATUSES.done - ) + return Response('Урок не проходится этим пользователем', status=403) pv.save()