Refactored Course Progression Logic
This commit is contained in:
parent
1192529698
commit
a592f70d4a
@ -13,9 +13,10 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
addActivity() {
|
addActivity() {
|
||||||
if(this.$route.params.type != "Quiz"){
|
if(this.$route.params.type != "Quiz"){
|
||||||
|
console.log("Adding Activity")
|
||||||
lms.call("add_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_type: this.$route.params.type,
|
||||||
content: this.$route.params.content
|
content: this.$route.params.content
|
||||||
}
|
}
|
||||||
|
@ -36,16 +36,16 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
showStart() {
|
showStart() {
|
||||||
return lms.loggedIn && !this.courseMeta.flag == "Completed";
|
return lms.loggedIn && !this.courseMeta.flag == "Complete";
|
||||||
},
|
},
|
||||||
showCompleted() {
|
showCompleted() {
|
||||||
return lms.loggedIn && this.courseMeta.flag == "Completed";
|
return lms.loggedIn && this.courseMeta.flag == "Complete";
|
||||||
},
|
},
|
||||||
firstContentRoute() {
|
firstContentRoute() {
|
||||||
return `${this.program_name}/${this.course.name}/${this.courseMeta.content_type}/${this.courseMeta.content}`
|
return `${this.program_name}/${this.course.name}/${this.courseMeta.content_type}/${this.courseMeta.content}`
|
||||||
},
|
},
|
||||||
buttonType() {
|
buttonType() {
|
||||||
if (this.courseMeta.flag == "Start" ){
|
if (this.courseMeta.flag == "Start Course" ){
|
||||||
return "primary"
|
return "primary"
|
||||||
}
|
}
|
||||||
else if (this.courseMeta.flag == "Complete" ) {
|
else if (this.courseMeta.flag == "Complete" ) {
|
||||||
|
@ -16,13 +16,13 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
if(this.isLoggedIn && this.$route.name == 'program'){
|
// if(this.isLoggedIn && this.$route.name == 'program'){
|
||||||
this.getContinueData().then( data => {
|
// this.getContinueData().then( data => {
|
||||||
this.nextContent = data.content,
|
// this.nextContent = data.content,
|
||||||
this.nextContentType = data.content_type,
|
// this.nextContentType = data.content_type,
|
||||||
this.nextCourse = data.course
|
// this.nextCourse = data.course
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
this.computeButtons()
|
this.computeButtons()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -32,9 +32,9 @@ export default {
|
|||||||
if(this.$route.name == 'home'){
|
if(this.$route.name == 'home'){
|
||||||
this.buttonName = 'Explore Courses'
|
this.buttonName = 'Explore Courses'
|
||||||
}
|
}
|
||||||
else if(this.$route.name == 'program'){
|
// else if(this.$route.name == 'program'){
|
||||||
this.buttonName = 'Start Course'
|
// this.buttonName = 'Start Course'
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.buttonName = 'Enroll Now'
|
this.buttonName = 'Enroll Now'
|
||||||
@ -44,14 +44,14 @@ export default {
|
|||||||
this.buttonName = 'Sign Up'
|
this.buttonName = 'Sign Up'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getContinueData() {
|
// getContinueData() {
|
||||||
lms.call({
|
// lms.call({
|
||||||
method: "get_continue_data",
|
// method: "get_continue_data",
|
||||||
args: {
|
// args: {
|
||||||
program_name: this.$route.params.program_name
|
// program_name: this.$route.params.program_name
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
},
|
// },
|
||||||
primaryAction() {
|
primaryAction() {
|
||||||
if(this.$route.name == 'home'){
|
if(this.$route.name == 'home'){
|
||||||
return
|
return
|
||||||
|
@ -64,38 +64,9 @@ def get_program_details(program_name):
|
|||||||
def get_courses(program_name):
|
def get_courses(program_name):
|
||||||
program = frappe.get_doc('Program', program_name)
|
program = frappe.get_doc('Program', program_name)
|
||||||
courses = program.get_course_list()
|
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
|
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()
|
@frappe.whitelist()
|
||||||
def get_next_content(content, content_type, course):
|
def get_next_content(content, content_type, course):
|
||||||
if frappe.session.user == "Guest":
|
if frappe.session.user == "Guest":
|
||||||
@ -170,17 +141,6 @@ def add_quiz_activity(enrollment, quiz_name, result_data, score, status):
|
|||||||
quiz_activity.save()
|
quiz_activity.save()
|
||||||
frappe.db.commit()
|
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()
|
@frappe.whitelist()
|
||||||
def enroll_in_program(program_name):
|
def enroll_in_program(program_name):
|
||||||
if(not utils.get_current_student()):
|
if(not utils.get_current_student()):
|
||||||
@ -192,13 +152,14 @@ def enroll_in_program(program_name):
|
|||||||
|
|
||||||
# Academty Activity
|
# Academty Activity
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def add_activity(enrollment, content_type, content):
|
def add_activity(course, content_type, content):
|
||||||
if(utils.check_activity_exists(enrollment, content_type, content)):
|
enrollment = utils.get_course_enrollment(course)
|
||||||
|
if(utils.check_activity_exists(enrollment.name, content_type, content)):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
activity = frappe.get_doc({
|
activity = frappe.get_doc({
|
||||||
"doctype": "Course Activity",
|
"doctype": "Course Activity",
|
||||||
"enrollment": enrollment,
|
"enrollment": enrollment.name,
|
||||||
"content_type": content_type,
|
"content_type": content_type,
|
||||||
"content": content,
|
"content": content,
|
||||||
"activity_date": frappe.utils.datetime.datetime.now()
|
"activity_date": frappe.utils.datetime.datetime.now()
|
||||||
@ -215,8 +176,8 @@ def get_course_progress(course_enrollment):
|
|||||||
status = check_content_completion(content.name, content.doctype, course_enrollment.name)
|
status = check_content_completion(content.name, content.doctype, course_enrollment.name)
|
||||||
progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status})
|
progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status})
|
||||||
elif content.doctype == 'Quiz':
|
elif content.doctype == 'Quiz':
|
||||||
status, score = check_quiz_completion(content, course_enrollment.name)
|
status, score, result = check_quiz_completion(content, course_enrollment.name)
|
||||||
progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status, 'score': score})
|
progress.append({'content': content.name, 'content_type': content.doctype, 'is_complete': status, 'score': score, 'result': result})
|
||||||
return progress
|
return progress
|
||||||
|
|
||||||
def check_content_completion(content_name, content_type, enrollment_name):
|
def check_content_completion(content_name, content_type, enrollment_name):
|
||||||
@ -228,18 +189,29 @@ def check_content_completion(content_name, content_type, enrollment_name):
|
|||||||
|
|
||||||
def check_quiz_completion(quiz, enrollment_name):
|
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"])
|
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':
|
status = bool(len(attempts) == quiz.max_attempts)
|
||||||
score = attempts[0]['score']
|
score = None
|
||||||
status = attempts[0]['status']
|
result = None
|
||||||
return status, score
|
if attempts and quiz.grading_basis == 'Last Highest Score':
|
||||||
|
attempts = sorted(attempts, key = lambda i: int(i.score), reverse=True)
|
||||||
elif attempts and quiz.grading_basis == 'Last Highest Score':
|
score = attempts[0]['score']
|
||||||
sorted_by_score = sorted(attempts, key = lambda i: int(i.score), reverse=True)
|
result = attempts[0]['status']
|
||||||
score = sorted_by_score[0]['score']
|
if result == 'Pass':
|
||||||
status = sorted_by_score[0]['status']
|
status = True
|
||||||
return status, score
|
return status, score, result
|
||||||
|
|
||||||
return False, None
|
|
||||||
|
|
||||||
def get_course_meta():
|
|
||||||
pass
|
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']}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user