diff --git a/erpnext/education/doctype/program_enrollment/program_enrollment.py b/erpnext/education/doctype/program_enrollment/program_enrollment.py
index c0d4e9c..22cca86 100644
--- a/erpnext/education/doctype/program_enrollment/program_enrollment.py
+++ b/erpnext/education/doctype/program_enrollment/program_enrollment.py
@@ -8,6 +8,7 @@
 from frappe.model.document import Document
 from frappe.desk.reportview import get_match_cond, get_filters_cond
 from frappe.utils import comma_and
+import erpnext.www.lms as lms
 
 class ProgramEnrollment(Document):
 	def validate(self):
@@ -74,6 +75,50 @@
 		for course_name in course_list:
 			student.enroll_in_course(course_name=course_name, program_enrollment=self.name)
 
+	def get_all_course_enrollments(self):
+		course_enrollment_names = frappe.get_list("Course Enrollment", filters={'program_enrollment': self.name})
+		return [frappe.get_doc('Course Enrollment', course_enrollment.name) for course_enrollment in course_enrollment_names]
+
+	def get_quiz_progress(self):
+		student = frappe.get_doc("Student", self.student)
+		quiz_progress = frappe._dict()
+		progress_list = []
+		for course_enrollment in self.get_all_course_enrollments():
+			course_progress = course_enrollment.get_progress(student)
+			for progress_item in course_progress:
+				if progress_item['content_type'] == "Quiz":
+					progress_item['course'] = course_enrollment.course
+					progress_list.append(progress_item)
+		if not progress_list:
+			return None
+		quiz_progress.quiz_attempt = progress_list
+		quiz_progress.name = self.program
+		quiz_progress.program = self.program
+		return quiz_progress
+
+	def get_program_progress(self):
+		import math
+		program = frappe.get_doc("Program", self.program)
+		program_progress = {}
+		progress = []
+		for course in program.get_all_children():
+			course_progress = lms.get_student_course_details(course.course, self.program)
+			is_complete = False
+			if course_progress['flag'] == "Completed":
+				is_complete = True
+			progress.append({'course_name': course.course_name, 'name': course.course, 'is_complete': is_complete})
+
+		program_progress['progress'] = progress
+		program_progress['name'] = self.program
+		program_progress['program'] = frappe.get_value("Program", self.program, 'program_name')
+
+		try:
+			program_progress['percentage'] = math.ceil((sum([item['is_complete'] for item in progress] * 100)/len(progress)))
+		except ZeroDivisionError:
+			program_progress['percentage'] = 0
+
+		return program_progress
+
 @frappe.whitelist()
 def get_program_courses(doctype, txt, searchfield, start, page_len, filters):
 	if filters.get('program'):
diff --git a/erpnext/public/js/education/lms/components/ScoreCard.vue b/erpnext/public/js/education/lms/components/ScoreCard.vue
index 679cf4e..1cf53ef 100644
--- a/erpnext/public/js/education/lms/components/ScoreCard.vue
+++ b/erpnext/public/js/education/lms/components/ScoreCard.vue
@@ -44,7 +44,7 @@
     },
     methods: {
        getQuizProgress() {
-			return lms.call('get_quiz_progress', {
+			return lms.call('get_quiz_progress_of_program', {
                     program_name: this.program
 				})
         },
diff --git a/erpnext/www/lms.py b/erpnext/www/lms.py
index 8feb0c0..a945361 100644
--- a/erpnext/www/lms.py
+++ b/erpnext/www/lms.py
@@ -195,31 +195,11 @@
 
 @frappe.whitelist()
 def get_program_progress(program_name):
-	import math
-	program = frappe.get_doc("Program", program_name)
-	program_enrollment = utils.get_program_enrollment(program_name)
-	program_progress = {}
+	program_enrollment = frappe.get_doc("Program Enrollment", utils.get_program_enrollment(program_name))
 	if not program_enrollment:
 		return None
 	else:
-		progress = []
-		for course in program.get_all_children():
-			course_progress = get_student_course_details(course.course, program_name)
-			is_complete = False
-			if course_progress['flag'] == "Completed":
-				is_complete = True
-			progress.append({'course_name': course.course_name, 'name': course.course, 'is_complete': is_complete})
-
-		program_progress['progress'] = progress
-		program_progress['name'] = program_name
-		program_progress['program'] = program.program_name
-
-		try:
-			program_progress['percentage'] = math.ceil((sum([item['is_complete'] for item in progress] * 100)/len(progress)))
-		except ZeroDivisionError:
-			program_progress['percentage'] = 0
-
-		return program_progress
+		return program_enrollment.get_program_progress()
 
 @frappe.whitelist()
 def get_joining_date():
@@ -228,28 +208,12 @@
 		return student.joining_date
 
 @frappe.whitelist()
-def get_quiz_progress(program_name):
-	program = frappe.get_doc("Program", program_name)
-	program_enrollment = utils.get_program_enrollment(program_name)
-	quiz_progress = frappe._dict()
-	student = utils.get_current_student()
+def get_quiz_progress_of_program(program_name):
+	program_enrollment = frappe.get_doc("Program Enrollment", utils.get_program_enrollment(program_name))
 	if not program_enrollment:
 		return None
 	else:
-		progress_list = []
-		for course in program.get_all_children():
-			course_enrollment = utils.get_course_enrollment(course.course)
-			course_progress = course_enrollment.get_progress(student)
-			for progress_item in course_progress:
-				if progress_item['content_type'] == "Quiz":
-					progress_item['course'] = course.course_name
-					progress_list.append(progress_item)
-		if not progress_list:
-			return None
-		quiz_progress.quiz_attempt = progress_list
-		quiz_progress.name = program_name
-		quiz_progress.program = program.program_name
-		return quiz_progress
+		return program_enrollment.get_quiz_progress()
 
 
 @frappe.whitelist(allow_guest=True)
