diff --git a/lms/lms/doctype/lms_class/lms_class.json b/lms/lms/doctype/lms_class/lms_class.json index a2a51330..be46771e 100644 --- a/lms/lms/doctype/lms_class/lms_class.json +++ b/lms/lms/doctype/lms_class/lms_class.json @@ -12,8 +12,11 @@ "start_date", "end_date", "column_break_4", - "description", + "seat_count", + "start_time", + "end_time", "section_break_6", + "description", "students", "courses", "custom_component" @@ -71,11 +74,26 @@ "fieldtype": "Code", "label": "Custom Component", "options": "HTML" + }, + { + "fieldname": "seat_count", + "fieldtype": "Int", + "label": "Seat Count" + }, + { + "fieldname": "start_time", + "fieldtype": "Time", + "label": "Start Time" + }, + { + "fieldname": "end_time", + "fieldtype": "Time", + "label": "End Time" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-03-02 22:47:13.139289", + "modified": "2023-05-03 23:07:06.725720", "modified_by": "Administrator", "module": "LMS", "name": "LMS Class", diff --git a/lms/lms/doctype/lms_class/lms_class.py b/lms/lms/doctype/lms_class/lms_class.py index cd5d2586..e4aae569 100644 --- a/lms/lms/doctype/lms_class/lms_class.py +++ b/lms/lms/doctype/lms_class/lms_class.py @@ -12,6 +12,8 @@ import json class LMSClass(Document): def validate(self): + if self.seat_count: + self.validate_seats_left() self.validate_duplicate_students() self.validate_membership() @@ -36,6 +38,10 @@ class LMSClass(Document): if not frappe.db.exists(filters): frappe.get_doc(filters).save() + def validate_seats_left(self): + if cint(self.seat_count) < len(self.students): + frappe.throw(_("There are no seats available in this class.")) + @frappe.whitelist() def add_student(email, class_name): @@ -160,7 +166,16 @@ def authenticate(): @frappe.whitelist() -def create_class(title, start_date, end_date, description=None, name=None): +def create_class( + title, + start_date, + end_date, + description=None, + seat_count=0, + start_time=None, + end_time=None, + name=None, +): if name: class_details = frappe.get_doc("LMS Class", name) else: @@ -172,6 +187,9 @@ def create_class(title, start_date, end_date, description=None, name=None): "start_date": start_date, "end_date": end_date, "description": description, + "seat_count": seat_count, + "start_time": start_time, + "end_time": end_time, } ) class_details.save() diff --git a/lms/public/js/common_functions.js b/lms/public/js/common_functions.js index 56306d1a..2ba394cb 100644 --- a/lms/public/js/common_functions.js +++ b/lms/public/js/common_functions.js @@ -415,6 +415,30 @@ const open_class_dialog = (e) => { reqd: 1, default: class_info && class_info.end_date, }, + { + fieldtype: "Column Break", + }, + { + fieldtype: "Int", + label: __("Seat Count"), + fieldname: "seat_count", + default: class_info && class_info.seat_count, + }, + { + fieldtype: "Time", + label: __("Start Time"), + fieldname: "start_time", + default: class_info && class_info.start_time, + }, + { + fieldtype: "Time", + label: __("End Time"), + fieldname: "end_time", + default: class_info && class_info.end_time, + }, + { + fieldtype: "Section Break", + }, { fieldtype: "Small Text", label: __("Description"), @@ -438,6 +462,9 @@ const create_class = (values) => { start_date: values.start_date, end_date: values.end_date, description: values.description, + seat_count: values.seat_count, + start_time: values.start_time, + end_time: values.end_time, name: class_info && class_info.name, }, callback: (r) => { diff --git a/lms/www/classes/class.py b/lms/www/classes/class.py index 09a98a9c..ab06a34e 100644 --- a/lms/www/classes/class.py +++ b/lms/www/classes/class.py @@ -13,7 +13,17 @@ def get_context(context): context.class_info = frappe.db.get_value( "LMS Class", class_name, - ["name", "title", "start_date", "end_date", "description", "custom_component"], + [ + "name", + "title", + "start_date", + "end_date", + "description", + "custom_component", + "seat_count", + "start_time", + "end_time", + ], as_dict=True, )