From e10feb3c368c8589c715dd286784b0022a3bb62d Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 3 May 2023 21:02:57 +0530 Subject: [PATCH 1/4] feat: seat count in class --- lms/lms/doctype/lms_class/lms_class.json | 8 +++++++- lms/lms/doctype/lms_class/lms_class.py | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lms/lms/doctype/lms_class/lms_class.json b/lms/lms/doctype/lms_class/lms_class.json index a2a51330..ba0bb438 100644 --- a/lms/lms/doctype/lms_class/lms_class.json +++ b/lms/lms/doctype/lms_class/lms_class.json @@ -12,6 +12,7 @@ "start_date", "end_date", "column_break_4", + "seat_count", "description", "section_break_6", "students", @@ -71,11 +72,16 @@ "fieldtype": "Code", "label": "Custom Component", "options": "HTML" + }, + { + "fieldname": "seat_count", + "fieldtype": "Int", + "label": "Seat Count" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-03-02 22:47:13.139289", + "modified": "2023-05-03 20:57:22.579068", "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..3092eeee 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 self.seat_count < len(self.students): + frappe.throw(_("There are no seats available in this class.")) + @frappe.whitelist() def add_student(email, class_name): From b47ff80e9de82efd552ab7373557b92a572d060f Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 3 May 2023 22:47:39 +0530 Subject: [PATCH 2/4] feat: seat count from class dialog --- lms/lms/doctype/lms_class/lms_class.py | 7 +++++-- lms/public/js/common_functions.js | 7 +++++++ lms/www/classes/class.py | 10 +++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lms/lms/doctype/lms_class/lms_class.py b/lms/lms/doctype/lms_class/lms_class.py index 3092eeee..e6b4b389 100644 --- a/lms/lms/doctype/lms_class/lms_class.py +++ b/lms/lms/doctype/lms_class/lms_class.py @@ -39,7 +39,7 @@ class LMSClass(Document): frappe.get_doc(filters).save() def validate_seats_left(self): - if self.seat_count < len(self.students): + if cint(self.seat_count) < len(self.students): frappe.throw(_("There are no seats available in this class.")) @@ -166,7 +166,9 @@ 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, name=None +): if name: class_details = frappe.get_doc("LMS Class", name) else: @@ -178,6 +180,7 @@ 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, } ) class_details.save() diff --git a/lms/public/js/common_functions.js b/lms/public/js/common_functions.js index 56306d1a..a646621d 100644 --- a/lms/public/js/common_functions.js +++ b/lms/public/js/common_functions.js @@ -415,6 +415,12 @@ const open_class_dialog = (e) => { reqd: 1, default: class_info && class_info.end_date, }, + { + fieldtype: "Int", + label: __("Seat Count"), + fieldname: "seat_count", + default: class_info && class_info.seat_count, + }, { fieldtype: "Small Text", label: __("Description"), @@ -438,6 +444,7 @@ const create_class = (values) => { start_date: values.start_date, end_date: values.end_date, description: values.description, + seat_count: values.seat_count, name: class_info && class_info.name, }, callback: (r) => { diff --git a/lms/www/classes/class.py b/lms/www/classes/class.py index 09a98a9c..fa854ae2 100644 --- a/lms/www/classes/class.py +++ b/lms/www/classes/class.py @@ -13,7 +13,15 @@ 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", + ], as_dict=True, ) From e2bf324fb4c803cd87c4292aa62f5df4d9b59d06 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 3 May 2023 23:08:02 +0530 Subject: [PATCH 3/4] feat: start and end time in class --- lms/lms/doctype/lms_class/lms_class.json | 16 ++++++++++++++-- lms/lms/doctype/lms_class/lms_class.py | 11 ++++++++++- lms/public/js/common_functions.js | 20 ++++++++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/lms/lms/doctype/lms_class/lms_class.json b/lms/lms/doctype/lms_class/lms_class.json index ba0bb438..be46771e 100644 --- a/lms/lms/doctype/lms_class/lms_class.json +++ b/lms/lms/doctype/lms_class/lms_class.json @@ -13,8 +13,10 @@ "end_date", "column_break_4", "seat_count", - "description", + "start_time", + "end_time", "section_break_6", + "description", "students", "courses", "custom_component" @@ -77,11 +79,21 @@ "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-05-03 20:57:22.579068", + "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 e6b4b389..e4aae569 100644 --- a/lms/lms/doctype/lms_class/lms_class.py +++ b/lms/lms/doctype/lms_class/lms_class.py @@ -167,7 +167,14 @@ def authenticate(): @frappe.whitelist() def create_class( - title, start_date, end_date, description=None, seat_count=0, name=None + 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) @@ -181,6 +188,8 @@ def create_class( "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 a646621d..2ba394cb 100644 --- a/lms/public/js/common_functions.js +++ b/lms/public/js/common_functions.js @@ -415,12 +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"), @@ -445,6 +463,8 @@ const create_class = (values) => { 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) => { From 20c93b3a6b001d46c98d540337d104f994006b0d Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 3 May 2023 23:10:46 +0530 Subject: [PATCH 4/4] fix: fetch start and end time in modal --- lms/www/classes/class.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lms/www/classes/class.py b/lms/www/classes/class.py index fa854ae2..ab06a34e 100644 --- a/lms/www/classes/class.py +++ b/lms/www/classes/class.py @@ -21,6 +21,8 @@ def get_context(context): "description", "custom_component", "seat_count", + "start_time", + "end_time", ], as_dict=True, )