diff --git a/erpnext/public/js/education/lms/components/CourseCard.vue b/erpnext/public/js/education/lms/components/CourseCard.vue index 31ca773487a..921ad9f7a05 100644 --- a/erpnext/public/js/education/lms/components/CourseCard.vue +++ b/erpnext/public/js/education/lms/components/CourseCard.vue @@ -33,8 +33,16 @@ import AButton from './Button.vue'; export default { - props: ['course', 'courseMeta', 'program_name'], + props: ['course', 'program_name'], name: "CourseCard", + data() { + return { + courseMeta: {} + } + }, + mounted() { + this.getCourseMeta().then(data => this.courseMeta = data) + }, components: { AButton }, @@ -68,7 +76,12 @@ export default { if(content_type == 'Video') return 'fa fa-play' if(content_type == 'Article') return 'fa fa-file-text-o' if(content_type == 'Quiz') return 'fa fa-question-circle-o' - } + }, + getCourseMeta() { + return lms.call('get_course_meta', { + course_name: this.course.name + }) + } } }; diff --git a/erpnext/public/js/education/lms/pages/ProgramPage.vue b/erpnext/public/js/education/lms/pages/ProgramPage.vue index 1c90f73ac00..65bb9a6ddf6 100644 --- a/erpnext/public/js/education/lms/pages/ProgramPage.vue +++ b/erpnext/public/js/education/lms/pages/ProgramPage.vue @@ -3,7 +3,7 @@ - + @@ -24,7 +24,7 @@ export default { data() { return { program: {}, - course_data: [] + courseData: [], } }, beforeMount() { @@ -32,11 +32,10 @@ export default { }, mounted() { this.getProgramDetails().then(data => this.program = data); - this.getCourses().then(data => this.course_data = data); - + this.getCourses().then(data => this.courseData = data); // lms.on(`course-completed`, (course_name) => { - // const course = this.course_data.findIndex(c => c.name === course_name); - // this.course_data[course].completed = true; + // const course = this.courseData.findIndex(c => c.name === course_name); + // this.courseData[course].completed = true; // }); }, methods: { diff --git a/erpnext/www/lms.py b/erpnext/www/lms.py index 01fb323cb08..10d29480da5 100644 --- a/erpnext/www/lms.py +++ b/erpnext/www/lms.py @@ -64,8 +64,7 @@ def get_program_details(program_name): def get_courses(program_name): program = frappe.get_doc('Program', program_name) courses = program.get_course_list() - course_data = [{'meta':get_course_meta(utils.get_course_enrollment(item.name)), 'course':item} for item in courses] - return course_data + return courses @frappe.whitelist() def get_next_content(content, content_type, course): @@ -171,7 +170,7 @@ def get_course_progress(course_enrollment): course = frappe.get_doc('Course', course_enrollment.course) contents = course.get_contents() progress = [] - for index, content in enumerate(contents): + for content in contents: if content.doctype in ('Article', 'Video'): status = check_content_completion(content.name, content.doctype, course_enrollment.name) progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status}) @@ -192,16 +191,18 @@ def check_quiz_completion(quiz, enrollment_name): status = bool(len(attempts) == quiz.max_attempts) score = None result = None - if attempts and quiz.grading_basis == 'Last Highest Score': - attempts = sorted(attempts, key = lambda i: int(i.score), reverse=True) - score = attempts[0]['score'] - result = attempts[0]['status'] - if result == 'Pass': - status = True + if attempts: + if quiz.grading_basis == 'Last Highest Score': + attempts = sorted(attempts, key = lambda i: int(i.score), reverse=True) + score = attempts[0]['score'] + result = attempts[0]['status'] + if result == 'Pass': + status = True return status, score, result - - -def get_course_meta(course_enrollment): + +@frappe.whitelist() +def get_course_meta(course_name): + course_enrollment = utils.get_course_enrollment(course_name) # course_enrollment = frappe.get_doc("Course Enrollment", course_enrollment_name) progress = get_course_progress(course_enrollment) count = sum([act['is_complete'] for act in progress])