feat: evaluator unavailability
This commit is contained in:
@@ -298,3 +298,16 @@ def get_unsplash_photos(keyword=None):
|
||||
return get_by_keyword(keyword)
|
||||
|
||||
return frappe.cache().get_value("unsplash_photos", generator=get_list)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_evaluator_details(evaluator):
|
||||
frappe.only_for("Batch Evaluator")
|
||||
|
||||
if frappe.db.exists("Course Evaluator", {"evaluator": evaluator}):
|
||||
return frappe.get_doc("Course Evaluator", evaluator, as_dict=1)
|
||||
else:
|
||||
doc = frappe.new_doc("Course Evaluator")
|
||||
doc.evaluator = evaluator
|
||||
doc.insert()
|
||||
return doc.as_dict()
|
||||
|
||||
@@ -8,7 +8,11 @@
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"evaluator",
|
||||
"schedule"
|
||||
"schedule",
|
||||
"unavailability_section",
|
||||
"unavailable_from",
|
||||
"column_break_ahzi",
|
||||
"unavailable_to"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
@@ -23,11 +27,30 @@
|
||||
"fieldtype": "Table",
|
||||
"label": "Schedule",
|
||||
"options": "Evaluator Schedule"
|
||||
},
|
||||
{
|
||||
"fieldname": "unavailability_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Unavailability"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_ahzi",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "unavailable_from",
|
||||
"fieldtype": "Date",
|
||||
"label": "From"
|
||||
},
|
||||
{
|
||||
"fieldname": "unavailable_to",
|
||||
"fieldtype": "Date",
|
||||
"label": "To"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-04-15 11:21:52.182338",
|
||||
"modified": "2024-04-15 18:45:08.614466",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Course Evaluator",
|
||||
|
||||
@@ -6,6 +6,7 @@ from frappe import _
|
||||
from frappe.model.document import Document
|
||||
from lms.lms.utils import get_evaluator
|
||||
from datetime import datetime
|
||||
from frappe.utils import get_time
|
||||
|
||||
|
||||
class CourseEvaluator(Document):
|
||||
@@ -14,7 +15,7 @@ class CourseEvaluator(Document):
|
||||
|
||||
def validate_time_slots(self):
|
||||
for schedule in self.schedule:
|
||||
if schedule.start_time >= schedule.end_time:
|
||||
if get_time(schedule.start_time) >= get_time(schedule.end_time):
|
||||
frappe.throw(_("Start Time cannot be greater than End Time"))
|
||||
|
||||
self.validate_overlaps(schedule)
|
||||
@@ -26,11 +27,21 @@ class CourseEvaluator(Document):
|
||||
overlap = False
|
||||
|
||||
for slot in same_day_slots:
|
||||
if schedule.start_time <= slot.start_time < schedule.end_time:
|
||||
if (
|
||||
get_time(schedule.start_time)
|
||||
<= get_time(slot.start_time)
|
||||
< get_time(schedule.end_time)
|
||||
):
|
||||
overlap = True
|
||||
if schedule.start_time < slot.end_time <= schedule.end_time:
|
||||
if (
|
||||
get_time(schedule.start_time)
|
||||
< get_time(slot.end_time)
|
||||
<= get_time(schedule.end_time)
|
||||
):
|
||||
overlap = True
|
||||
if slot.start_time < schedule.start_time and schedule.end_time < slot.end_time:
|
||||
if get_time(slot.start_time) < get_time(schedule.start_time) and get_time(
|
||||
schedule.end_time
|
||||
) < get_time(slot.end_time):
|
||||
overlap = True
|
||||
|
||||
if overlap:
|
||||
|
||||
@@ -39,8 +39,6 @@
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fetch_from": "course.evaluator",
|
||||
"fetch_if_empty": 1,
|
||||
"fieldname": "evaluator",
|
||||
"fieldtype": "Link",
|
||||
"label": "Evaluator",
|
||||
@@ -109,7 +107,7 @@
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-04-15 11:23:03.933035",
|
||||
"modified": "2024-04-16 11:01:28.336807",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Certificate Request",
|
||||
|
||||
@@ -11,10 +11,35 @@ from lms.lms.utils import get_evaluator
|
||||
|
||||
class LMSCertificateRequest(Document):
|
||||
def validate(self):
|
||||
self.set_evaluator()
|
||||
self.validate_unavailability()
|
||||
self.validate_slot()
|
||||
self.validate_if_existing_requests()
|
||||
self.validate_evaluation_end_date()
|
||||
|
||||
def set_evaluator(self):
|
||||
if not self.evaluator:
|
||||
self.evaluator = get_evaluator(self.course, self.batch_name)
|
||||
|
||||
def validate_unavailability(self):
|
||||
unavailable = frappe.db.get_value(
|
||||
"Course Evaluator", self.evaluator, ["unavailable_from", "unavailable_to"], as_dict=1
|
||||
)
|
||||
if (
|
||||
unavailable.unavailable_from
|
||||
and unavailable.unavailable_to
|
||||
and getdate(self.date) >= unavailable.unavailable_from
|
||||
and getdate(self.date) <= unavailable.unavailable_to
|
||||
):
|
||||
frappe.throw(
|
||||
_(
|
||||
"Evaluator is unavailable from {0} to {1}. Please select a date after {1}"
|
||||
).format(
|
||||
format_date(unavailable.unavailable_from, "medium"),
|
||||
format_date(unavailable.unavailable_to, "medium"),
|
||||
)
|
||||
)
|
||||
|
||||
def validate_slot(self):
|
||||
if frappe.db.exists(
|
||||
"LMS Certificate Request",
|
||||
|
||||
@@ -1798,6 +1798,6 @@ def get_roles(name):
|
||||
return {
|
||||
"moderator": has_course_moderator_role(name),
|
||||
"course_creator": has_course_instructor_role(name),
|
||||
"class_evaluator": has_course_evaluator_role(name),
|
||||
"batch_evaluator": has_course_evaluator_role(name),
|
||||
"lms_student": has_student_role(name),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user