You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.6 KiB
77 lines
2.6 KiB
import datetime
|
|
import django
|
|
import os
|
|
import sys
|
|
|
|
sys.path.append("../")
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
|
|
django.setup()
|
|
|
|
from progress.models import ProgressLesson, Progress
|
|
from courses.models import Course
|
|
|
|
|
|
if __name__ == '__main__':
|
|
i = 0
|
|
for course in Course.objects.all():
|
|
lessons = course.get_lesson_list()
|
|
|
|
if not lessons:
|
|
continue
|
|
|
|
first_lesson = lessons[0]
|
|
for progress in Progress.objects.filter(course_token=course.token):
|
|
print(i)
|
|
i += 1
|
|
progress_lessons = progress.progresslesson_set.all()
|
|
if progress_lessons.count() == 0:
|
|
ProgressLesson.objects.create(
|
|
progress=progress,
|
|
lesson_token=first_lesson.token,
|
|
checker=progress.teacher if first_lesson.is_hm else progress.user,
|
|
)
|
|
continue
|
|
|
|
lesson_find = False
|
|
for l in lessons[::-1]:
|
|
pl = progress_lessons.filter(lesson_token=l.token)
|
|
is_done = pl.exists() and pl[0].status == ProgressLesson.STATUSES.done
|
|
|
|
if is_done and not lesson_find:
|
|
lesson_find = True
|
|
next_lesson = course.get_next(l)
|
|
if next_lesson is None:
|
|
progress.is_finish = True
|
|
progress.save()
|
|
|
|
if not progress_lessons.filter(lesson_token=next_lesson.token,).exists():
|
|
ProgressLesson.objects.create(
|
|
progress=progress,
|
|
lesson_token=next_lesson.token,
|
|
checker=progress.teacher if next_lesson.is_hm else progress.user,
|
|
)
|
|
continue
|
|
|
|
elif not lesson_find:
|
|
continue
|
|
|
|
elif not pl.exists():
|
|
ProgressLesson.objects.create(
|
|
progress=progress,
|
|
lesson_token=l.token,
|
|
checker=progress.teacher if l.is_hm else progress.user,
|
|
status=ProgressLesson.STATUSES.done,
|
|
finish_date=datetime.datetime.now(),
|
|
)
|
|
|
|
elif not is_done:
|
|
omg = pl[0]
|
|
omg.status = ProgressLesson.STATUSES.done
|
|
omg.finish_date = datetime.datetime.now()
|
|
omg.save()
|
|
|
|
elif is_done:
|
|
continue
|
|
|
|
else:
|
|
raise ValueError("что-то пошло не так")
|
|
|