fix: scheduled the eval event creation
This commit is contained in:
10
lms/hooks.py
10
lms/hooks.py
@@ -103,11 +103,11 @@ doc_events = {
|
|||||||
|
|
||||||
# Scheduled Tasks
|
# Scheduled Tasks
|
||||||
# ---------------
|
# ---------------
|
||||||
# scheduler_events = {
|
scheduler_events = {
|
||||||
# "daily": [
|
"hourly": [
|
||||||
# "erpnext.stock.reorder_item.reorder_item"
|
"lms.lms.doctype.lms_certificate_request.lms_certificate_request.schedule_evals"
|
||||||
# ]
|
]
|
||||||
# }
|
}
|
||||||
|
|
||||||
fixtures = ["Custom Field", "Function", "Industry"]
|
fixtures = ["Custom Field", "Function", "Industry"]
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"section_break_lifi",
|
"section_break_lifi",
|
||||||
"date",
|
"date",
|
||||||
"day",
|
"day",
|
||||||
|
"google_meet_link",
|
||||||
"column_break_ddyh",
|
"column_break_ddyh",
|
||||||
"start_time",
|
"start_time",
|
||||||
"end_time"
|
"end_time"
|
||||||
@@ -90,11 +91,17 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "column_break_ddyh",
|
"fieldname": "column_break_ddyh",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "google_meet_link",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Google Meet Link",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-07-21 11:13:38.827783",
|
"modified": "2023-07-21 16:00:11.795521",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "LMS",
|
"module": "LMS",
|
||||||
"name": "LMS Certificate Request",
|
"name": "LMS Certificate Request",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
from frappe.utils import format_date, format_time, getdate
|
from frappe.utils import format_date, format_time, getdate, add_to_date, get_datetime
|
||||||
from lms.lms.utils import get_evaluator
|
from lms.lms.utils import get_evaluator
|
||||||
|
|
||||||
|
|
||||||
@@ -13,14 +13,10 @@ class LMSCertificateRequest(Document):
|
|||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_if_existing_requests()
|
self.validate_if_existing_requests()
|
||||||
|
|
||||||
def after_insert(self):
|
|
||||||
if frappe.db.get_single_value("LMS Settings", "send_calendar_invite_for_evaluations"):
|
|
||||||
self.create_event()
|
|
||||||
|
|
||||||
def validate_if_existing_requests(self):
|
def validate_if_existing_requests(self):
|
||||||
existing_requests = frappe.get_all(
|
existing_requests = frappe.get_all(
|
||||||
"LMS Certificate Request",
|
"LMS Certificate Request",
|
||||||
{"member": self.member, "course": self.course},
|
{"member": self.member, "course": self.course, "name": ["!=", self.name]},
|
||||||
["date", "start_time", "course"],
|
["date", "start_time", "course"],
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -35,47 +31,75 @@ class LMSCertificateRequest(Document):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def create_event(self):
|
|
||||||
calendar = frappe.db.get_value(
|
def schedule_evals():
|
||||||
"Google Calendar", {"user": self.evaluator, "enable": 1}, "name"
|
if frappe.db.get_single_value("LMS Settings", "send_calendar_invite_for_evaluations"):
|
||||||
|
one_hour_ago = add_to_date(get_datetime(), hours=-1)
|
||||||
|
evals = frappe.get_all(
|
||||||
|
"LMS Certificate Request",
|
||||||
|
{"creation": [">=", one_hour_ago], "google_meet_link": ["is", "not set"]},
|
||||||
|
["name", "member", "member_name", "evaluator", "date", "start_time", "end_time"],
|
||||||
)
|
)
|
||||||
|
for eval in evals:
|
||||||
|
setup_calendar_event(eval)
|
||||||
|
|
||||||
if calendar:
|
|
||||||
event = frappe.get_doc(
|
|
||||||
{
|
|
||||||
"doctype": "Event",
|
|
||||||
"subject": f"Evaluation of {self.member_name}",
|
|
||||||
"starts_on": f"{self.date} {self.start_time}",
|
|
||||||
"ends_on": f"{self.date} {self.end_time}",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
event.save()
|
|
||||||
|
|
||||||
participants = [self.member, self.evaluator]
|
def setup_calendar_event(eval):
|
||||||
for participant in participants:
|
calendar = frappe.db.get_value(
|
||||||
contact_name = frappe.db.get_value("Contact", {"email_id": participant}, "name")
|
"Google Calendar", {"user": eval.evaluator, "enable": 1}, "name"
|
||||||
frappe.get_doc(
|
)
|
||||||
{
|
|
||||||
"doctype": "Event Participants",
|
|
||||||
"reference_doctype": "Contact",
|
|
||||||
"reference_docname": contact_name,
|
|
||||||
"email": participant,
|
|
||||||
"parent": event.name,
|
|
||||||
"parenttype": "Event",
|
|
||||||
"parentfield": "event_participants",
|
|
||||||
}
|
|
||||||
).save()
|
|
||||||
|
|
||||||
event.reload()
|
if calendar:
|
||||||
event.update(
|
event = create_event(eval)
|
||||||
{
|
add_participants(eval, event)
|
||||||
"sync_with_google_calendar": 1,
|
update_meeting_details(eval, event, calendar)
|
||||||
"add_video_conferencing": 1,
|
|
||||||
"google_calendar": calendar,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
event.save()
|
|
||||||
|
def create_event(eval):
|
||||||
|
event = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Event",
|
||||||
|
"subject": f"Evaluation of {eval.member_name}",
|
||||||
|
"starts_on": f"{eval.date} {eval.start_time}",
|
||||||
|
"ends_on": f"{eval.date} {eval.end_time}",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
event.save()
|
||||||
|
return event
|
||||||
|
|
||||||
|
|
||||||
|
def add_participants(eval, event):
|
||||||
|
participants = [eval.member, eval.evaluator]
|
||||||
|
for participant in participants:
|
||||||
|
contact_name = frappe.db.get_value("Contact", {"email_id": participant}, "name")
|
||||||
|
frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Event Participants",
|
||||||
|
"reference_doctype": "Contact",
|
||||||
|
"reference_docname": contact_name,
|
||||||
|
"email": participant,
|
||||||
|
"parent": event.name,
|
||||||
|
"parenttype": "Event",
|
||||||
|
"parentfield": "event_participants",
|
||||||
|
}
|
||||||
|
).save()
|
||||||
|
|
||||||
|
|
||||||
|
def update_meeting_details(eval, event, calendar):
|
||||||
|
event.reload()
|
||||||
|
event.update(
|
||||||
|
{
|
||||||
|
"sync_with_google_calendar": 1,
|
||||||
|
"add_video_conferencing": 1,
|
||||||
|
"google_calendar": calendar,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
event.save()
|
||||||
|
event.reload()
|
||||||
|
frappe.db.set_value(
|
||||||
|
"LMS Certificate Request", eval.name, "google_meet_link", event.google_meet_link
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
|
|||||||
@@ -71,9 +71,17 @@
|
|||||||
<article class="cards-parent">
|
<article class="cards-parent">
|
||||||
{% for eval in upcoming_evals %}
|
{% for eval in upcoming_evals %}
|
||||||
<div class="common-card-style column-card">
|
<div class="common-card-style column-card">
|
||||||
<div class="bold-heading">
|
<div class="flex align-center justify-between">
|
||||||
{{ eval.course_title }}
|
<div class="bold-heading">
|
||||||
|
{{ eval.course_title }}
|
||||||
|
</div>
|
||||||
|
{% if eval.google_meet_link %}
|
||||||
|
<a class="btn btn-default btn-sm pull-right" href="{{ eval.google_meet_link }}">
|
||||||
|
{{ _("Join") }}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="vertically-center">
|
<div class="vertically-center">
|
||||||
<svg class="icon icon-sm mr-1">
|
<svg class="icon icon-sm mr-1">
|
||||||
<use href="#icon-calendar"></use>
|
<use href="#icon-calendar"></use>
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ const submit_evaluation_form = (values) => {
|
|||||||
frappe.throw(__("Please select a slot"));
|
frappe.throw(__("Please select a slot"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.eval_form.hide();
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: "lms.lms.doctype.lms_certificate_request.lms_certificate_request.create_certificate_request",
|
method: "lms.lms.doctype.lms_certificate_request.lms_certificate_request.create_certificate_request",
|
||||||
args: {
|
args: {
|
||||||
@@ -122,7 +123,6 @@ const submit_evaluation_form = (values) => {
|
|||||||
message: __("Evaluation scheduled successfully"),
|
message: __("Evaluation scheduled successfully"),
|
||||||
indicator: "green",
|
indicator: "green",
|
||||||
});
|
});
|
||||||
this.eval_form.hide();
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ def get_context(context):
|
|||||||
"course": ["in", context.courses],
|
"course": ["in", context.courses],
|
||||||
"date": [">=", frappe.utils.nowdate()],
|
"date": [">=", frappe.utils.nowdate()],
|
||||||
},
|
},
|
||||||
["date", "start_time", "course", "evaluator"],
|
["date", "start_time", "course", "evaluator", "google_meet_link"],
|
||||||
order_by="date",
|
order_by="date",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user