From 466b248c30c03a5bb733b9c8dd3dd56a6dc9809d Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 4 Dec 2025 17:48:39 +0530 Subject: [PATCH] fix: validate course details before enrolling --- .../doctype/lms_enrollment/lms_enrollment.py | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/lms/lms/doctype/lms_enrollment/lms_enrollment.py b/lms/lms/doctype/lms_enrollment/lms_enrollment.py index 14640c52..9112c7a6 100644 --- a/lms/lms/doctype/lms_enrollment/lms_enrollment.py +++ b/lms/lms/doctype/lms_enrollment/lms_enrollment.py @@ -77,8 +77,7 @@ def update_program_progress(member): @frappe.whitelist() def create_membership(course, batch=None, member=None, member_type="Student", role="Member"): - if frappe.db.get_value("LMS Course", course, "disable_self_learning"): - return False + validate_course_enrollment_eligibility(course, member) enrollment = frappe.new_doc("LMS Enrollment") enrollment.update( @@ -95,6 +94,42 @@ def create_membership(course, batch=None, member=None, member_type="Student", ro return enrollment +def validate_course_enrollment_eligibility(course, member): + if not member: + member = frappe.session.user + + course_details = frappe.db.get_value( + "LMS Course", + course, + ["published", "disable_self_learning", "paid_course", "paid_certificate"], + as_dict=True, + ) + + if course_details.disable_self_learning: + frappe.throw( + _( + "You cannot enroll in this course as self-learning is disabled. Please contact the Administrator." + ) + ) + + if not course_details.published: + frappe.throw(_("You cannot enroll in an unpublished course.")) + + if course_details.paid_course: + payment = frappe.db.exists( + "LMS Payment", + { + "reference_doctype": "LMS Course", + "reference_docname": course, + "member": member, + "payment_receipt": True, + }, + ) + + if not payment: + frappe.throw(_("You need to complete the payment for this course before enrolling.")) + + @frappe.whitelist() def update_current_membership(batch, course, member): all_memberships = frappe.get_all("LMS Enrollment", {"member": member, "course": course})