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.
 
 
 
 
 
 

136 lines
4.7 KiB

from courses.models import CourseTheme, Lesson, CourseMap, Homework, Exam
class CourseBuilder:
def __init__(self, course, material=None):
self.course = course
self.course_public = self.course.public
self.material = material # Вернуть токен вызвавшего материала
self.ready = []
self.materials = []
self.token = ''
def append_in_price(self, map):
# Добавить карту в счета, куда включены все карты курса в типе, исключая текущий
#Price.objects.filter(included=map.get_befor)
pass
def rebuild_map(self):
sort = 0
for theme in CourseTheme.objects.filter(course=self.course):
for lesson in Lesson.objects.filter(theme=theme):
must_save = False
try:
token = '{0}#{1}'.format(self.course.id, sort)
tmp = CourseMap.objects.get(token=token)
except CourseMap.DoesNotExist:
tmp = CourseMap.objects.create(lesson=lesson, sort=sort, course=self.course)
self.append_in_price(tmp)
if tmp.homework:
tmp.homework = None
must_save = True
if tmp.exam:
tmp.exam = None
must_save = True
if tmp.lesson != lesson:
tmp.lesson = lesson
must_save = True
if lesson.token != token:
lesson.token = token
lesson.save()
if must_save: tmp.save()
if lesson == self.material:
self.token = tmp.token
self.materials.append(tmp.id)
sort += 1
for homework in Homework.objects.filter(theme=theme):
must_save = False
try:
token = '{0}#{1}'.format(self.course.id, sort)
tmp = CourseMap.objects.get(token=token)
except CourseMap.DoesNotExist:
tmp = CourseMap.objects.create(homework=homework, sort=sort, course=self.course)
self.append_in_price(tmp)
if tmp.homework != homework:
tmp.homework = homework
must_save = True
if tmp.exam:
tmp.exam = None
must_save = True
if tmp.lesson:
tmp.lesson = None
must_save = True
if homework.token != token:
homework.token = token
homework.save()
if must_save: tmp.save()
if homework == self.material:
self.token = tmp.token
self.materials.append(tmp.id)
sort += 1
for exam in Exam.objects.filter(theme=theme):
must_save = False
try:
token = '{0}#{1}'.format(self.course.id, sort)
tmp = CourseMap.objects.get(token=token)
except CourseMap.DoesNotExist:
tmp = CourseMap.objects.create(exam=exam, sort=sort, course=self.course)
self.append_in_price(tmp)
if tmp.exam != exam:
tmp.exam = exam
must_save = True
if tmp.homework:
tmp.homework = None
must_save = True
if tmp.lesson:
tmp.lesson = None
must_save = True
if exam.token != token:
exam.token = token
exam.save()
if must_save: tmp.save()
if exam == self.material:
self.token = tmp.token
self.materials.append(tmp.id)
sort += 1
if sort != CourseMap.objects.filter(course=self.course).count():
CourseMap.objects.filter(course=self.course).exclude(id__in=self.materials).delete()
def course_switcher(self):
# Блокировка курса на время обработки
if self.course_public:
if self.course.public:
self.course.public = False
else:
self.course.public = True
self.course.save()
def main(self):
self.course_switcher()
##
self.rebuild_map()
##
self.course_switcher()
return self.token if self.material else None # Вернуть токен для материала если он есть