feat: evaluator unavailability

This commit is contained in:
Jannat Patel
2024-04-16 11:08:30 +05:30
parent 39bc141133
commit 719e471678
12 changed files with 371 additions and 25 deletions

View File

@@ -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()

View File

@@ -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",

View File

@@ -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:

View File

@@ -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",

View File

@@ -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",

View File

@@ -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),
}