UI fixes for course card

This commit is contained in:
scmmishra 2018-11-22 15:33:30 +05:30 committed by Aditya Hase
parent be7fadc521
commit fdbabde80a
3 changed files with 33 additions and 20 deletions

View File

@ -33,8 +33,16 @@
import AButton from './Button.vue'; import AButton from './Button.vue';
export default { export default {
props: ['course', 'courseMeta', 'program_name'], props: ['course', 'program_name'],
name: "CourseCard", name: "CourseCard",
data() {
return {
courseMeta: {}
}
},
mounted() {
this.getCourseMeta().then(data => this.courseMeta = data)
},
components: { components: {
AButton AButton
}, },
@ -68,6 +76,11 @@ export default {
if(content_type == 'Video') return 'fa fa-play' if(content_type == 'Video') return 'fa fa-play'
if(content_type == 'Article') return 'fa fa-file-text-o' if(content_type == 'Article') return 'fa fa-file-text-o'
if(content_type == 'Quiz') return 'fa fa-question-circle-o' if(content_type == 'Quiz') return 'fa fa-question-circle-o'
},
getCourseMeta() {
return lms.call('get_course_meta', {
course_name: this.course.name
})
} }
} }
}; };

View File

@ -3,7 +3,7 @@
<TopSection v-bind:title="program.program_name" v-bind:description="program.description"> <TopSection v-bind:title="program.program_name" v-bind:description="program.description">
</TopSection> </TopSection>
<CardList :title="'Courses'" :description="''"> <CardList :title="'Courses'" :description="''">
<CourseCard slot="card-list-slot" v-for="course in course_data" :course="course.course" :program_name="program_name" :courseMeta="course.meta" :key="course.course.name + course.meta.flag"/> <CourseCard slot="card-list-slot" v-for="course in courseData" :course="course" :program_name="program_name" :key="course.name"/>
</CardList> </CardList>
</div> </div>
</template> </template>
@ -24,7 +24,7 @@ export default {
data() { data() {
return { return {
program: {}, program: {},
course_data: [] courseData: [],
} }
}, },
beforeMount() { beforeMount() {
@ -32,11 +32,10 @@ export default {
}, },
mounted() { mounted() {
this.getProgramDetails().then(data => this.program = data); 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) => { // lms.on(`course-completed`, (course_name) => {
// const course = this.course_data.findIndex(c => c.name === course_name); // const course = this.courseData.findIndex(c => c.name === course_name);
// this.course_data[course].completed = true; // this.courseData[course].completed = true;
// }); // });
}, },
methods: { methods: {

View File

@ -64,8 +64,7 @@ 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_course_meta(utils.get_course_enrollment(item.name)), 'course':item} for item in courses] return courses
return course_data
@frappe.whitelist() @frappe.whitelist()
def get_next_content(content, content_type, course): 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) course = frappe.get_doc('Course', course_enrollment.course)
contents = course.get_contents() contents = course.get_contents()
progress = [] progress = []
for index, content in enumerate(contents): for content in contents:
if content.doctype in ('Article', 'Video'): if content.doctype in ('Article', 'Video'):
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})
@ -192,7 +191,8 @@ def check_quiz_completion(quiz, enrollment_name):
status = bool(len(attempts) == quiz.max_attempts) status = bool(len(attempts) == quiz.max_attempts)
score = None score = None
result = None result = None
if attempts and quiz.grading_basis == 'Last Highest Score': if attempts:
if quiz.grading_basis == 'Last Highest Score':
attempts = sorted(attempts, key = lambda i: int(i.score), reverse=True) attempts = sorted(attempts, key = lambda i: int(i.score), reverse=True)
score = attempts[0]['score'] score = attempts[0]['score']
result = attempts[0]['status'] result = attempts[0]['status']
@ -200,8 +200,9 @@ def check_quiz_completion(quiz, enrollment_name):
status = True status = True
return status, score, result return status, score, result
@frappe.whitelist()
def get_course_meta(course_enrollment): def get_course_meta(course_name):
course_enrollment = utils.get_course_enrollment(course_name)
# course_enrollment = frappe.get_doc("Course Enrollment", course_enrollment_name) # course_enrollment = frappe.get_doc("Course Enrollment", course_enrollment_name)
progress = get_course_progress(course_enrollment) progress = get_course_progress(course_enrollment)
count = sum([act['is_complete'] for act in progress]) count = sum([act['is_complete'] for act in progress])