fix: recalculate course progress when lesson is inserted or deleted
This commit is contained in:
@@ -400,7 +400,7 @@ const sidebarStore = useSidebar()
|
||||
const plyrSources = ref([])
|
||||
const showInlineMenu = ref(false)
|
||||
const currentTab = ref('Notes')
|
||||
let timerInterval
|
||||
let timerInterval = null
|
||||
|
||||
const tabs = ref([
|
||||
{
|
||||
@@ -742,7 +742,8 @@ const updateVideoTime = (video) => {
|
||||
|
||||
const startTimer = () => {
|
||||
if (!lesson.data?.membership) return
|
||||
let timerInterval = setInterval(() => {
|
||||
timerInterval = setInterval(() => {
|
||||
console.log('Timer:', timer.value)
|
||||
timer.value++
|
||||
if (timer.value == 30) {
|
||||
clearInterval(timerInterval)
|
||||
|
||||
@@ -475,7 +475,7 @@ def delete_lesson(lesson: str, chapter: str):
|
||||
update_index(lessons, chapter)
|
||||
|
||||
frappe.db.delete("LMS Course Progress", {"lesson": lesson})
|
||||
frappe.db.delete("Course Lesson", lesson)
|
||||
frappe.delete_doc("Course Lesson", lesson)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
|
||||
@@ -4,25 +4,12 @@
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
from lms.lms.utils import get_course_progress, get_lesson_count
|
||||
from lms.lms.utils import get_lesson_count
|
||||
|
||||
|
||||
class CourseChapter(Document):
|
||||
def on_update(self):
|
||||
self.recalculate_course_progress()
|
||||
self.update_lesson_count()
|
||||
frappe.enqueue(method=self.recalculate_course_progress, queue="short", timeout=300, is_async=True)
|
||||
|
||||
def recalculate_course_progress(self):
|
||||
"""Recalculate course progress if a new lesson is added or removed"""
|
||||
previous_lessons = self.get_doc_before_save() and self.get_doc_before_save().as_dict().lessons
|
||||
current_lessons = self.lessons
|
||||
|
||||
if previous_lessons and previous_lessons != current_lessons:
|
||||
enrolled_members = frappe.get_all("LMS Enrollment", {"course": self.course}, ["member", "name"])
|
||||
for enrollment in enrolled_members:
|
||||
new_progress = get_course_progress(self.course, enrollment.member)
|
||||
frappe.db.set_value("LMS Enrollment", enrollment.name, "progress", new_progress)
|
||||
|
||||
def update_lesson_count(self):
|
||||
"""Update lesson count in the course"""
|
||||
|
||||
@@ -9,15 +9,36 @@ from frappe.model.document import Document
|
||||
from frappe.realtime import get_website_room
|
||||
from frappe.utils.telemetry import capture
|
||||
|
||||
from lms.lms.utils import get_course_progress
|
||||
from lms.lms.utils import get_course_progress, recalculate_course_progress
|
||||
|
||||
from ...md import find_macros
|
||||
|
||||
|
||||
class CourseLesson(Document):
|
||||
def after_insert(self):
|
||||
frappe.enqueue(method=self.recalculate_progress, queue="long", is_async=True)
|
||||
|
||||
def after_delete(self):
|
||||
frappe.enqueue(method=self.recalculate_progress, queue="long", is_async=True)
|
||||
|
||||
def on_update(self):
|
||||
self.validate_quiz_id()
|
||||
|
||||
def recalculate_progress(self):
|
||||
if not self.course or not self.chapter:
|
||||
return
|
||||
|
||||
enrollments = frappe.db.get_all(
|
||||
"LMS Enrollment",
|
||||
filters={"course": self.course},
|
||||
fields=["name", "member"],
|
||||
)
|
||||
if not len(enrollments):
|
||||
return
|
||||
|
||||
for enrollment in enrollments:
|
||||
recalculate_course_progress(self.course, enrollment.member)
|
||||
|
||||
def validate_quiz_id(self):
|
||||
if self.quiz_id and not frappe.db.exists("LMS Quiz", self.quiz_id):
|
||||
frappe.throw(_("Invalid Quiz ID"))
|
||||
|
||||
@@ -4,20 +4,9 @@
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
from lms.lms.doctype.lms_enrollment.lms_enrollment import update_program_progress
|
||||
from lms.lms.utils import get_course_progress
|
||||
from lms.lms.utils import recalculate_course_progress
|
||||
|
||||
|
||||
class LMSCourseProgress(Document):
|
||||
def after_delete(self):
|
||||
progress = get_course_progress(self.course, self.member)
|
||||
membership = frappe.db.get_value(
|
||||
"LMS Enrollment",
|
||||
{
|
||||
"member": self.member,
|
||||
"course": self.course,
|
||||
},
|
||||
"name",
|
||||
)
|
||||
frappe.db.set_value("LMS Enrollment", membership, "progress", progress)
|
||||
update_program_progress(self.member)
|
||||
recalculate_course_progress(self.course, self.member)
|
||||
|
||||
@@ -28,6 +28,7 @@ from frappe.utils import (
|
||||
from pypika import Case
|
||||
from pypika import functions as fn
|
||||
|
||||
from lms.lms.doctype.lms_enrollment.lms_enrollment import update_program_progress
|
||||
from lms.lms.md import find_macros
|
||||
|
||||
RE_SLUG_NOTALLOWED = re.compile("[^a-z0-9]+")
|
||||
@@ -2312,3 +2313,17 @@ def has_lms_role():
|
||||
lms_roles = set(LMS_ROLES)
|
||||
user_roles = set(roles)
|
||||
return not lms_roles.isdisjoint(user_roles)
|
||||
|
||||
|
||||
def recalculate_course_progress(course: str, member: str):
|
||||
progress = get_course_progress(course, member)
|
||||
membership = frappe.db.get_value(
|
||||
"LMS Enrollment",
|
||||
{
|
||||
"member": member,
|
||||
"course": course,
|
||||
},
|
||||
"name",
|
||||
)
|
||||
frappe.db.set_value("LMS Enrollment", membership, "progress", progress)
|
||||
update_program_progress(member)
|
||||
|
||||
Reference in New Issue
Block a user