Skip to content

Commit daf2d28

Browse files
authored
Merge pull request #1938 from pateljannat/enrollment-from-batch-main
fix: batch enrollment conditions
2 parents 01094cd + d5e48f9 commit daf2d28

5 files changed

Lines changed: 41 additions & 38 deletions

File tree

lms/lms/doctype/lms_batch/lms_batch.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ def validate(self):
3030
self.validate_payments_app()
3131
self.validate_amount_and_currency()
3232
self.validate_duplicate_assessments()
33-
self.validate_membership()
3433
self.validate_timetable()
3534
self.validate_evaluation_end_date()
3635

@@ -82,16 +81,6 @@ def validate_evaluation_end_date(self):
8281
if self.evaluation_end_date and self.evaluation_end_date < self.end_date:
8382
frappe.throw(_("Evaluation end date cannot be less than the batch end date."))
8483

85-
def validate_membership(self):
86-
members = frappe.get_all("LMS Batch Enrollment", {"batch": self.name}, pluck="member")
87-
for course in self.courses:
88-
for member in members:
89-
if not frappe.db.exists("LMS Enrollment", {"course": course.course, "member": member}):
90-
enrollment = frappe.new_doc("LMS Enrollment")
91-
enrollment.course = course.course
92-
enrollment.member = member
93-
enrollment.save()
94-
9584
def validate_seats_left(self):
9685
if cint(self.seat_count) < 0:
9786
frappe.throw(_("Seat count cannot be negative."))

lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ def after_insert(self):
1717
def validate(self):
1818
self.validate_owner()
1919
self.validate_duplicate_members()
20+
self.validate_payment()
21+
self.validate_self_enrollment()
2022
self.validate_seat_availability()
2123
self.validate_course_enrollment()
2224

@@ -28,6 +30,32 @@ def validate_owner(self):
2830
if "Moderator" not in roles and "Batch Evaluator" not in roles:
2931
frappe.throw(_("You must be a Moderator or Batch Evaluator to enroll users in a batch."))
3032

33+
def validate_payment(self):
34+
paid_batch = frappe.db.get_value("LMS Batch", self.batch, "paid_batch")
35+
if paid_batch:
36+
payment = frappe.db.exists(
37+
"LMS Payment",
38+
{
39+
"payment_for_document_type": "LMS Batch",
40+
"payment_for_document": self.batch,
41+
"member": self.member,
42+
"payment_received": True,
43+
},
44+
)
45+
if not payment:
46+
frappe.throw(_("Payment is required to enroll in this batch."))
47+
else:
48+
self.payment = payment
49+
50+
def validate_self_enrollment(self):
51+
allow_self_enrollment = frappe.db.get_value("LMS Batch", self.batch, "allow_self_enrollment")
52+
if not allow_self_enrollment and not self.is_admin():
53+
frappe.throw(_("Enrollment in this batch is restricted. Please contact the Administrator."))
54+
55+
def is_admin(self):
56+
roles = frappe.get_roles(frappe.session.user)
57+
return "Course Creator" in roles or "Moderator" in roles or "Batch Evaluator" in roles
58+
3159
def validate_duplicate_members(self):
3260
if frappe.db.exists(
3361
"LMS Batch Enrollment",
@@ -52,6 +80,7 @@ def validate_course_enrollment(self):
5280
enrollment = frappe.new_doc("LMS Enrollment")
5381
enrollment.course = course.course
5482
enrollment.member = self.member
83+
enrollment.enrollment_from_batch = self.batch
5584
enrollment.save()
5685

5786
def add_member_to_live_class(self):

lms/lms/doctype/lms_enrollment/lms_enrollment.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"progress",
1111
"payment",
1212
"current_lesson",
13+
"enrollment_from_batch",
1314
"column_break_3",
1415
"member",
1516
"member_name",
@@ -129,13 +130,19 @@
129130
"fieldname": "member_image",
130131
"fieldtype": "Attach Image",
131132
"label": "Member Image"
133+
},
134+
{
135+
"fieldname": "enrollment_from_batch",
136+
"fieldtype": "Link",
137+
"label": "Enrollment from Batch",
138+
"options": "LMS Batch"
132139
}
133140
],
134141
"grid_page_length": 50,
135142
"index_web_pages_for_search": 1,
136143
"links": [],
137-
"modified": "2025-12-15 21:27:30.733483",
138-
"modified_by": "Administrator",
144+
"modified": "2025-12-23 12:50:13.622277",
145+
"modified_by": "sayali@frappe.io",
139146
"module": "LMS",
140147
"name": "LMS Enrollment",
141148
"owner": "Administrator",

lms/lms/doctype/lms_enrollment/lms_enrollment.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ def validate_course_enrollment_eligibility(self):
2929
)
3030
)
3131

32+
if self.enrollment_from_batch:
33+
return
34+
3235
if not course_details.published:
3336
frappe.throw(_("You cannot enroll in an unpublished course."))
3437

lms/lms/utils.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,11 +1775,7 @@ def enroll_in_batch(batch, payment_name=None):
17751775
if not frappe.db.exists("LMS Batch", batch):
17761776
frappe.throw(_("The specified batch does not exist."))
17771777

1778-
batch_doc = frappe.db.get_value(
1779-
"LMS Batch", batch, ["name", "seat_count", "allow_self_enrollment", "paid_batch"], as_dict=True
1780-
)
17811778
payment_doc = get_payment_details(payment_name)
1782-
validate_enrollment_eligibility(batch_doc, payment_doc)
17831779
create_enrollment(batch, payment_doc)
17841780

17851781

@@ -1792,27 +1788,6 @@ def get_payment_details(payment_name):
17921788
return payment_doc
17931789

17941790

1795-
def validate_enrollment_eligibility(batch_doc, payment_doc=None):
1796-
if frappe.db.exists("LMS Batch Enrollment", {"batch": batch_doc.name, "member": frappe.session.user}):
1797-
frappe.throw(_("You are already enrolled in this batch."))
1798-
1799-
if batch_doc.paid_batch:
1800-
if not payment_doc or not payment_doc.payment_received:
1801-
frappe.throw(_("Payment is required to enroll in this batch."))
1802-
1803-
elif not batch_doc.allow_self_enrollment and not is_admin():
1804-
frappe.throw(_("Enrollment in this batch is restricted. Please contact the Administrator."))
1805-
1806-
students = frappe.db.count("LMS Batch Enrollment", {"batch": batch_doc.name})
1807-
if batch_doc.seat_count and students >= batch_doc.seat_count:
1808-
frappe.throw(_("There are no seats available in this batch."))
1809-
1810-
1811-
def is_admin():
1812-
roles = frappe.get_roles(frappe.session.user)
1813-
return "Course Creator" in roles or "Moderator" in roles or "Batch Evaluator" in roles
1814-
1815-
18161791
def create_enrollment(batch, payment_doc=None):
18171792
new_student = frappe.new_doc("LMS Batch Enrollment")
18181793
new_student.update(

0 commit comments

Comments
 (0)