Merge pull request #507 from pateljannat/class-seat-count
feat: Class seat count, start time and end time
This commit is contained in:
@@ -12,8 +12,11 @@
|
|||||||
"start_date",
|
"start_date",
|
||||||
"end_date",
|
"end_date",
|
||||||
"column_break_4",
|
"column_break_4",
|
||||||
"description",
|
"seat_count",
|
||||||
|
"start_time",
|
||||||
|
"end_time",
|
||||||
"section_break_6",
|
"section_break_6",
|
||||||
|
"description",
|
||||||
"students",
|
"students",
|
||||||
"courses",
|
"courses",
|
||||||
"custom_component"
|
"custom_component"
|
||||||
@@ -71,11 +74,26 @@
|
|||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"label": "Custom Component",
|
"label": "Custom Component",
|
||||||
"options": "HTML"
|
"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,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-03-02 22:47:13.139289",
|
"modified": "2023-05-03 23:07:06.725720",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "LMS",
|
"module": "LMS",
|
||||||
"name": "LMS Class",
|
"name": "LMS Class",
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import json
|
|||||||
|
|
||||||
class LMSClass(Document):
|
class LMSClass(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
if self.seat_count:
|
||||||
|
self.validate_seats_left()
|
||||||
self.validate_duplicate_students()
|
self.validate_duplicate_students()
|
||||||
self.validate_membership()
|
self.validate_membership()
|
||||||
|
|
||||||
@@ -36,6 +38,10 @@ class LMSClass(Document):
|
|||||||
if not frappe.db.exists(filters):
|
if not frappe.db.exists(filters):
|
||||||
frappe.get_doc(filters).save()
|
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()
|
@frappe.whitelist()
|
||||||
def add_student(email, class_name):
|
def add_student(email, class_name):
|
||||||
@@ -160,7 +166,16 @@ def authenticate():
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@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:
|
if name:
|
||||||
class_details = frappe.get_doc("LMS Class", name)
|
class_details = frappe.get_doc("LMS Class", name)
|
||||||
else:
|
else:
|
||||||
@@ -172,6 +187,9 @@ def create_class(title, start_date, end_date, description=None, name=None):
|
|||||||
"start_date": start_date,
|
"start_date": start_date,
|
||||||
"end_date": end_date,
|
"end_date": end_date,
|
||||||
"description": description,
|
"description": description,
|
||||||
|
"seat_count": seat_count,
|
||||||
|
"start_time": start_time,
|
||||||
|
"end_time": end_time,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
class_details.save()
|
class_details.save()
|
||||||
|
|||||||
@@ -415,6 +415,30 @@ const open_class_dialog = (e) => {
|
|||||||
reqd: 1,
|
reqd: 1,
|
||||||
default: class_info && class_info.end_date,
|
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",
|
fieldtype: "Small Text",
|
||||||
label: __("Description"),
|
label: __("Description"),
|
||||||
@@ -438,6 +462,9 @@ const create_class = (values) => {
|
|||||||
start_date: values.start_date,
|
start_date: values.start_date,
|
||||||
end_date: values.end_date,
|
end_date: values.end_date,
|
||||||
description: values.description,
|
description: values.description,
|
||||||
|
seat_count: values.seat_count,
|
||||||
|
start_time: values.start_time,
|
||||||
|
end_time: values.end_time,
|
||||||
name: class_info && class_info.name,
|
name: class_info && class_info.name,
|
||||||
},
|
},
|
||||||
callback: (r) => {
|
callback: (r) => {
|
||||||
|
|||||||
@@ -13,7 +13,17 @@ def get_context(context):
|
|||||||
context.class_info = frappe.db.get_value(
|
context.class_info = frappe.db.get_value(
|
||||||
"LMS Class",
|
"LMS Class",
|
||||||
class_name,
|
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,
|
as_dict=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user