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 # Вернуть токен для материала если он есть