chore: Moved `get_quiz_progress` and `get_program_progress` to a class function in `program_enrollment`
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)