fix: progress

This commit is contained in:
Jannat Patel
2024-05-06 14:24:19 +05:30
parent cf5a088f5e
commit 3478f278ff
7 changed files with 59 additions and 37 deletions

View File

@@ -67,7 +67,7 @@
{{ lesson.title }} {{ lesson.title }}
<Check <Check
v-if="lesson.is_complete" v-if="lesson.is_complete"
class="h-4 w-4 text-green-500 stroke-1.5 ml-2" class="h-4 w-4 text-green-700 ml-2"
/> />
</div> </div>
</router-link> </router-link>
@@ -139,9 +139,9 @@ const props = defineProps({
type: Boolean, type: Boolean,
default: false, default: false,
}, },
membership: { getProgress: {
type: Object, type: Boolean,
default: () => ({}), default: false,
}, },
}) })
@@ -150,27 +150,11 @@ const outline = createResource({
cache: ['course_outline', props.courseName], cache: ['course_outline', props.courseName],
params: { params: {
course: props.courseName, course: props.courseName,
progress: props.getProgress,
}, },
auto: true, auto: true,
}) })
/* const isComplete = (lesson) => {
createResource({
url: 'lms.lms.utils.get_progress',
makeParams() {
console.log(lesson)
return {
course: lesson.course,
lesson: lesson.name,
}
},
auto: true,
onSuccess(data) {
console.log(data)
}
})
} */
const openChapterDetail = (index) => { const openChapterDetail = (index) => {
return index == route.params.chapterNumber || index == 1 return index == route.params.chapterNumber || index == 1
} }

View File

@@ -13,7 +13,7 @@
</template> </template>
</Button> </Button>
</header> </header>
<div v-if="batch.data" class="grid grid-cols-[70%,30%] h-full"> <div v-if="batch.data" class="grid grid-cols-[70%,30%] h-screen">
<div class="border-r-2"> <div class="border-r-2">
<Tabs v-model="tabIndex" :tabs="tabs" tablistClass="overflow-x-visible"> <Tabs v-model="tabIndex" :tabs="tabs" tablistClass="overflow-x-visible">
<template #tab="{ tab, selected }" class="overflow-x-hidden"> <template #tab="{ tab, selected }" class="overflow-x-hidden">

View File

@@ -173,7 +173,7 @@
<CourseOutline <CourseOutline
:courseName="courseName" :courseName="courseName"
:key="chapterNumber" :key="chapterNumber"
:membership="lesson.data.membership" :getProgress="lesson.data.membership ? true : false"
/> />
</div> </div>
</div> </div>

View File

@@ -7,6 +7,7 @@ from frappe.model.document import Document
from frappe.utils.telemetry import capture from frappe.utils.telemetry import capture
from lms.lms.utils import get_course_progress from lms.lms.utils import get_course_progress
from ...md import find_macros from ...md import find_macros
import json
class CourseLesson(Document): class CourseLesson(Document):
@@ -95,6 +96,7 @@ def save_progress(lesson, course):
return 0 return 0
quiz_completed = get_quiz_progress(lesson) quiz_completed = get_quiz_progress(lesson)
print(quiz_completed)
if not quiz_completed: if not quiz_completed:
return 0 return 0
@@ -118,19 +120,46 @@ def save_progress(lesson, course):
def get_quiz_progress(lesson): def get_quiz_progress(lesson):
body = frappe.db.get_value("Course Lesson", lesson, "body") lesson_details = frappe.db.get_value(
macros = find_macros(body) "Course Lesson", lesson, ["body", "content"], as_dict=1
quizzes = [value for name, value in macros if name == "Quiz"] )
quizzes = []
if lesson_details.content:
content = json.loads(lesson_details.content)
for block in content.get("blocks"):
if block.get("type") == "quiz":
quizzes.append(block.get("data").get("quiz"))
elif lesson_details.body:
macros = find_macros(lesson_details.body)
quizzes = [value for name, value in macros if name == "Quiz"]
for quiz in quizzes: for quiz in quizzes:
print(quiz)
passing_percentage = frappe.db.get_value("LMS Quiz", quiz, "passing_percentage") passing_percentage = frappe.db.get_value("LMS Quiz", quiz, "passing_percentage")
print(frappe.session.user)
print(passing_percentage)
print(
frappe.db.exists(
"LMS Quiz Submission",
{
"quiz": quiz,
"member": frappe.session.user,
"percentage": [">=", passing_percentage],
},
)
)
if not frappe.db.exists( if not frappe.db.exists(
"LMS Quiz Submission", "LMS Quiz Submission",
{ {
"quiz": quiz, "quiz": quiz,
"owner": frappe.session.user, "member": frappe.session.user,
"percentage": [">=", passing_percentage], "percentage": [">=", passing_percentage],
}, },
): ):
print("no submission")
return False return False
return True return True

View File

@@ -103,15 +103,21 @@ def quiz_summary(quiz, results):
"passing_percentage": quiz_details.passing_percentage, "passing_percentage": quiz_details.passing_percentage,
} }
) )
submission.save(ignore_permissions=True)
print(
percentage, quiz_details.passing_percentage, quiz_details.lesson, quiz_details.course
)
if ( if (
percentage >= quiz_details.passing_percentage percentage >= quiz_details.passing_percentage
and quiz_details.lesson and quiz_details.lesson
and quiz_details.course and quiz_details.course
): ):
print("if")
save_progress(quiz_details.lesson, quiz_details.course)
elif not quiz_details.passing_percentage:
print("elif")
save_progress(quiz_details.lesson, quiz_details.course) save_progress(quiz_details.lesson, quiz_details.course)
submission.save(ignore_permissions=True)
return { return {
"score": score, "score": score,

View File

@@ -115,27 +115,27 @@ def get_chapters(course):
return chapters return chapters
def get_lessons(course, chapter=None, get_details=True): def get_lessons(course, chapter=None, get_details=True, progress=False):
"""If chapter is passed, returns lessons of only that chapter. """If chapter is passed, returns lessons of only that chapter.
Else returns lessons of all chapters of the course""" Else returns lessons of all chapters of the course"""
lessons = [] lessons = []
lesson_count = 0 lesson_count = 0
if chapter: if chapter:
if get_details: if get_details:
return get_lesson_details(chapter) return get_lesson_details(chapter, progress=progress)
else: else:
return frappe.db.count("Lesson Reference", {"parent": chapter.name}) return frappe.db.count("Lesson Reference", {"parent": chapter.name})
for chapter in get_chapters(course): for chapter in get_chapters(course):
if get_details: if get_details:
lessons += get_lesson_details(chapter) lessons += get_lesson_details(chapter, progress=progress)
else: else:
lesson_count += frappe.db.count("Lesson Reference", {"parent": chapter.name}) lesson_count += frappe.db.count("Lesson Reference", {"parent": chapter.name})
return lessons if get_details else lesson_count return lessons if get_details else lesson_count
def get_lesson_details(chapter, get_progress=False): def get_lesson_details(chapter, progress=False):
lessons = [] lessons = []
lesson_list = frappe.get_all( lesson_list = frappe.get_all(
"Lesson Reference", {"parent": chapter.name}, ["lesson", "idx"], order_by="idx" "Lesson Reference", {"parent": chapter.name}, ["lesson", "idx"], order_by="idx"
@@ -162,6 +162,9 @@ def get_lesson_details(chapter, get_progress=False):
lesson_details.number = f"{chapter.idx}.{row.idx}" lesson_details.number = f"{chapter.idx}.{row.idx}"
lesson_details.icon = get_lesson_icon(lesson_details.body) lesson_details.icon = get_lesson_icon(lesson_details.body)
if progress:
lesson_details.is_complete = get_progress(lesson_details.course, lesson_details.name)
lessons.append(lesson_details) lessons.append(lesson_details)
return lessons return lessons
@@ -1301,7 +1304,7 @@ def get_categorized_courses(courses):
@frappe.whitelist(allow_guest=True) @frappe.whitelist(allow_guest=True)
def get_course_outline(course): def get_course_outline(course, progress=False):
"""Returns the course outline.""" """Returns the course outline."""
outline = [] outline = []
chapters = frappe.get_all( chapters = frappe.get_all(
@@ -1315,7 +1318,7 @@ def get_course_outline(course):
as_dict=True, as_dict=True,
) )
chapter_details["idx"] = chapter.idx chapter_details["idx"] = chapter.idx
chapter_details.lessons = get_lessons(course, chapter_details) chapter_details.lessons = get_lessons(course, chapter_details, progress=progress)
outline.append(chapter_details) outline.append(chapter_details)
return outline return outline

View File

@@ -15,10 +15,10 @@
<meta name="twitter:title" content="{{ meta.title }}" /> <meta name="twitter:title" content="{{ meta.title }}" />
<meta name="twitter:image" content="{{ meta.image }}" /> <meta name="twitter:image" content="{{ meta.image }}" />
<meta name="twitter:description" content="{{ meta.description }}" /> <meta name="twitter:description" content="{{ meta.description }}" />
<script type="module" crossorigin src="/assets/lms/frontend/assets/index-CushEWOj.js"></script> <script type="module" crossorigin src="/assets/lms/frontend/assets/index-BQuTMdxr.js"></script>
<link rel="modulepreload" crossorigin href="/assets/lms/frontend/assets/frappe-ui-BI4McHL7.js"> <link rel="modulepreload" crossorigin href="/assets/lms/frontend/assets/frappe-ui-BI4McHL7.js">
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/frappe-ui-DzKBfka9.css"> <link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/frappe-ui-DzKBfka9.css">
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/index-Dhpy-T0p.css"> <link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/index-BF30Plnj.css">
</head> </head>
<body> <body>
<div id="app"> <div id="app">