Refactored Course Progression Logic
diff --git a/erpnext/public/js/education/lms/components/ContentNavigation.vue b/erpnext/public/js/education/lms/components/ContentNavigation.vue
index bf677a3..47bcf25 100644
--- a/erpnext/public/js/education/lms/components/ContentNavigation.vue
+++ b/erpnext/public/js/education/lms/components/ContentNavigation.vue
@@ -13,9 +13,10 @@
 	methods: {
 		addActivity() {
 			if(this.$route.params.type != "Quiz"){
+				console.log("Adding Activity")
 				lms.call("add_activity",
 					{
-						enrollment: lms.store.enrolledCourses[this.$route.params.course],
+						course: this.$route.params.course,
 						content_type: this.$route.params.type,
 						content: this.$route.params.content
 					}
diff --git a/erpnext/public/js/education/lms/components/CourseCard.vue b/erpnext/public/js/education/lms/components/CourseCard.vue
index c93ca10..10dc90f 100644
--- a/erpnext/public/js/education/lms/components/CourseCard.vue
+++ b/erpnext/public/js/education/lms/components/CourseCard.vue
@@ -36,16 +36,16 @@
     },
     computed: {
         showStart() {
-            return lms.loggedIn && !this.courseMeta.flag == "Completed";
+            return lms.loggedIn && !this.courseMeta.flag == "Complete";
         },
         showCompleted() {
-            return lms.loggedIn && this.courseMeta.flag == "Completed";
+            return lms.loggedIn && this.courseMeta.flag == "Complete";
         },
         firstContentRoute() {
             return `${this.program_name}/${this.course.name}/${this.courseMeta.content_type}/${this.courseMeta.content}`
         },
         buttonType() {
-            if (this.courseMeta.flag == "Start" ){
+            if (this.courseMeta.flag == "Start Course" ){
                 return "primary"
             }
             else if (this.courseMeta.flag == "Complete" ) {
diff --git a/erpnext/public/js/education/lms/components/TopSectionButton.vue b/erpnext/public/js/education/lms/components/TopSectionButton.vue
index c4a04ca..093aebc 100644
--- a/erpnext/public/js/education/lms/components/TopSectionButton.vue
+++ b/erpnext/public/js/education/lms/components/TopSectionButton.vue
@@ -16,13 +16,13 @@
         }
     },
     mounted() {
-        if(this.isLoggedIn && this.$route.name == 'program'){
-                this.getContinueData().then( data => {
-                    this.nextContent = data.content,
-                    this.nextContentType = data.content_type,
-                    this.nextCourse = data.course
-                })
-        }
+        // if(this.isLoggedIn && this.$route.name == 'program'){
+        //         this.getContinueData().then( data => {
+        //             this.nextContent = data.content,
+        //             this.nextContentType = data.content_type,
+        //             this.nextCourse = data.course
+        //         })
+        // }
         this.computeButtons()
     },
     methods: {
@@ -32,9 +32,9 @@
                     if(this.$route.name == 'home'){
                         this.buttonName = 'Explore Courses'
                     }
-                    else if(this.$route.name == 'program'){
-                        this.buttonName = 'Start Course'
-                    }
+                    // else if(this.$route.name == 'program'){
+                    //     this.buttonName = 'Start Course'
+                    // }
                 }
                 else {
                     this.buttonName = 'Enroll Now'
@@ -44,14 +44,14 @@
                 this.buttonName = 'Sign Up'
             }
         },
-        getContinueData() {
-            lms.call({
-                    method: "get_continue_data",
-                    args: {
-                        program_name: this.$route.params.program_name
-                    }
-                })
-        },
+        // getContinueData() {
+        //     lms.call({
+        //             method: "get_continue_data",
+        //             args: {
+        //                 program_name: this.$route.params.program_name
+        //             }
+        //         })
+        // },
         primaryAction() {
             if(this.$route.name == 'home'){
                 return
diff --git a/erpnext/www/lms.py b/erpnext/www/lms.py
index 4bb9901..3ef721a 100644
--- a/erpnext/www/lms.py
+++ b/erpnext/www/lms.py
@@ -64,38 +64,9 @@
 def get_courses(program_name):
 	program = frappe.get_doc('Program', program_name)
 	courses = program.get_course_list()
-	course_data = [{'meta':get_continue_content(item.name), 'course':item} for item in courses]
+	course_data = [{'meta':get_course_meta(utils.get_course_enrollment(item.name)), 'course':item} for item in courses]
 	return course_data
 
-def get_continue_content(course_name):
-	if frappe.session.user == "Guest":
-		return dict(content=None, content_type=None, flag=None)
-	enrollment = utils.get_course_enrollment(course_name)
-	course = frappe.get_doc("Course", enrollment.course)
-	last_activity = enrollment.get_last_activity()
-	
-	if last_activity == None:
-		next_content = course.get_first_content()
-		return dict(content=next_content.name, content_type=next_content.doctype, flag="Start")
-	
-	if last_activity.doctype == "Quiz Activity":
-		next_content = get_next_content(last_activity.quiz, "Quiz", course.name)
-	else:
-		next_content = get_next_content(last_activity.content, last_activity.content_type, course.name)
-	
-	if next_content == None:
-		next_content = course.get_first_content()
-		return dict(content=next_content.name, content_type=next_content.doctype, flag="Complete")
-	else:
-		next_content['flag'] = "Continue"
-		return next_content
-
-def get_starting_content(course_name):
-	course = frappe.get_doc('Course', course_name)
-	content = course.course_content[0].content
-	content_type = course.course_content[0].content_type
-	return dict(content=content, content_type=content_type)
-
 @frappe.whitelist()
 def get_next_content(content, content_type, course):
 	if frappe.session.user == "Guest":
@@ -171,17 +142,6 @@
 	frappe.db.commit()
 
 @frappe.whitelist()
-def get_continue_data(program_name):
-	program = frappe.get_doc("Program", program_name)
-	courses = program.get_all_children()
-	try:
-		continue_data = get_starting_content(courses[0].course)
-		continue_data['course'] = courses[0].course
-		return continue_data
-	except:
-		return None
-
-@frappe.whitelist()
 def enroll_in_program(program_name):
 	if(not utils.get_current_student()):
 		utils.create_student(frappe.session.user)
@@ -192,13 +152,14 @@
 
 # Academty Activity 
 @frappe.whitelist()
-def add_activity(enrollment, content_type, content):
-	if(utils.check_activity_exists(enrollment, content_type, content)):
+def add_activity(course, content_type, content):
+	enrollment = utils.get_course_enrollment(course)
+	if(utils.check_activity_exists(enrollment.name, content_type, content)):
 		pass
 	else:
 		activity = frappe.get_doc({
 			"doctype": "Course Activity",
-			"enrollment": enrollment,
+			"enrollment": enrollment.name,
 			"content_type": content_type,
 			"content": content,
 			"activity_date": frappe.utils.datetime.datetime.now()
@@ -215,8 +176,8 @@
 			status = check_content_completion(content.name, content.doctype, course_enrollment.name)
 			progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status})
 		elif content.doctype == 'Quiz':
-			status, score = check_quiz_completion(content, course_enrollment.name)
-			progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status, 'score': score})
+			status, score, result = check_quiz_completion(content, course_enrollment.name)
+			progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status, 'score': score, 'result': result})
 	return progress
 
 def check_content_completion(content_name, content_type, enrollment_name):
@@ -228,18 +189,29 @@
 
 def check_quiz_completion(quiz, enrollment_name):
 	attempts = frappe.get_list("Quiz Activity", filters={'enrollment': enrollment_name, 'quiz': quiz.name}, fields=["name", "activity_date", "score", "status"])
-	if attempts and quiz.grading_basis == 'Last Attempt':
-		score = attempts[0]['score']
-		status = attempts[0]['status']
-		return status, score
-	
-	elif attempts and quiz.grading_basis == 'Last Highest Score':
-		sorted_by_score = sorted(attempts, key = lambda i: int(i.score), reverse=True)
-		score = sorted_by_score[0]['score']
-		status = sorted_by_score[0]['status']
-		return status, score
-	
-	return False, None
+	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
+	return status, score, result
 
-def get_course_meta():
-	pass
\ No newline at end of file
+
+def get_course_meta(course_enrollment):
+	# course_enrollment = frappe.get_doc("Course Enrollment", course_enrollment_name)
+	progress = get_course_progress(course_enrollment)
+	print(progress)
+	count = sum([act['is_complete'] for act in progress])
+	print('Count', count)
+	if count == 0:
+		return {'flag':'Start Course', 'content_type': progress[0]['content_type'], 'content': progress[0]['content']}
+	elif count == len(progress):
+		return {'flag':'Complete', 'content_type': progress[0]['content_type'], 'content': progress[0]['content']}
+	elif count < len(progress):
+		next_item = next(item for item in progress if item['is_complete']==False)
+		return {'flag':'Continue', 'content_type': next_item['content_type'], 'content': next_item['content']}
+	
\ No newline at end of file