def check_complete(self, user): """Checks if a lesson is complete, and if it is, marks it complete in the database.""" # Get lesson progress lesson_progress = self.progress_for_user(user) # Get all task progress for this lesson tp_qs = TaskProgress.objects.filter(user=user, task__lesson=self).all() # Convert the queryset to a list so we can do cached operations tp_list = list(tp_qs) # Assume lesson complete until we reach a task that isn't complete lesson_complete = True for task in self.task_set.all(): task_progress = utils.find_using_property(tp_list, task, 'task') # If task progress was not found, or if task progress completed is False, # the lesson isn't complete. if not task_progress or not task_progress.completed: lesson_complete = False if lesson_complete: lesson_progress.complete() # Log the lesson is complete CourseLog.complete_lesson(user) self.course.check_complete(user)
def calc_progress(self, user): """Calculates the percentage complete for a course and saves to percentage_complete.""" # Get all tasks for a course tp_qs = TaskProgress.objects.filter(user=user, task__lesson__course=self.course).all() # Convert the queryset to a list so we can do cached operations tp_list = list(tp_qs) total_tasks = 0 completed_tasks = 0 # Loop through all lessons and tasks while keeping track of total_tasks and completed_tasks for lesson in self.course.lesson_set.all(): for task in lesson.task_set.all(): total_tasks += 1 task_progress = utils.find_using_property(tp_list, task, 'task') if task_progress and task_progress.completed: completed_tasks += 1 # Calculate the percentage completed and save to the database self.percentage_complete = round(completed_tasks / float(total_tasks) * 100) self.save()
def check_complete(self, user): """Checks if a course is complete, and if it is, marks it complete in the database.""" # Get course progress course_progress = self.progress_for_user(user) # Get all lesson progress for this course lp_qs = LessonProgress.objects.filter(user=user, lesson__course=self).all() # Convert the queryset to a list so we can do cached operations lp_list = list(lp_qs) # Assume course complete until we reach a task that isn't complete course_complete = True for lesson in self.lesson_set.all(): lesson_progress = utils.find_using_property(lp_list, lesson, 'lesson') # If lesson progress was not found, or if lesson progress completed is False, # the course isn't complete. if not lesson_progress or not lesson_progress.completed: course_complete = False if course_complete: course_progress.complete() # Log course complete CourseLog.complete_course(user)