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
|
||||
# ---------------
|
||||
# scheduler_events = {
|
||||
# "daily": [
|
||||
# "erpnext.stock.reorder_item.reorder_item"
|
||||
# ]
|
||||
# }
|
||||
scheduler_events = {
|
||||
"hourly": [
|
||||
"lms.lms.doctype.lms_certificate_request.lms_certificate_request.schedule_evals"
|
||||
]
|
||||
}
|
||||
|
||||
fixtures = ["Custom Field", "Function", "Industry"]
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"section_break_lifi",
|
||||
"date",
|
||||
"day",
|
||||
"google_meet_link",
|
||||
"column_break_ddyh",
|
||||
"start_time",
|
||||
"end_time"
|
||||
@@ -90,11 +91,17 @@
|
||||
{
|
||||
"fieldname": "column_break_ddyh",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "google_meet_link",
|
||||
"fieldtype": "Data",
|
||||
"label": "Google Meet Link",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2023-07-21 11:13:38.827783",
|
||||
"modified": "2023-07-21 16:00:11.795521",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Certificate Request",
|
||||
|
||||
@@ -5,7 +5,7 @@ import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
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
|
||||
|
||||
|
||||
@@ -13,14 +13,10 @@ class LMSCertificateRequest(Document):
|
||||
def validate(self):
|
||||
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):
|
||||
existing_requests = frappe.get_all(
|
||||
"LMS Certificate Request",
|
||||
{"member": self.member, "course": self.course},
|
||||
{"member": self.member, "course": self.course, "name": ["!=", self.name]},
|
||||
["date", "start_time", "course"],
|
||||
)
|
||||
|
||||
@@ -35,47 +31,75 @@ class LMSCertificateRequest(Document):
|
||||
)
|
||||
)
|
||||
|
||||
def create_event(self):
|
||||
calendar = frappe.db.get_value(
|
||||
"Google Calendar", {"user": self.evaluator, "enable": 1}, "name"
|
||||
|
||||
def schedule_evals():
|
||||
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]
|
||||
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 setup_calendar_event(eval):
|
||||
calendar = frappe.db.get_value(
|
||||
"Google Calendar", {"user": eval.evaluator, "enable": 1}, "name"
|
||||
)
|
||||
|
||||
event.reload()
|
||||
event.update(
|
||||
{
|
||||
"sync_with_google_calendar": 1,
|
||||
"add_video_conferencing": 1,
|
||||
"google_calendar": calendar,
|
||||
}
|
||||
)
|
||||
if calendar:
|
||||
event = create_event(eval)
|
||||
add_participants(eval, event)
|
||||
update_meeting_details(eval, event, 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()
|
||||
|
||||
@@ -71,9 +71,17 @@
|
||||
<article class="cards-parent">
|
||||
{% for eval in upcoming_evals %}
|
||||
<div class="common-card-style column-card">
|
||||
<div class="bold-heading">
|
||||
{{ eval.course_title }}
|
||||
<div class="flex align-center justify-between">
|
||||
<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 class="vertically-center">
|
||||
<svg class="icon icon-sm mr-1">
|
||||
<use href="#icon-calendar"></use>
|
||||
|
||||
@@ -107,6 +107,7 @@ const submit_evaluation_form = (values) => {
|
||||
frappe.throw(__("Please select a slot"));
|
||||
}
|
||||
|
||||
this.eval_form.hide();
|
||||
frappe.call({
|
||||
method: "lms.lms.doctype.lms_certificate_request.lms_certificate_request.create_certificate_request",
|
||||
args: {
|
||||
@@ -122,7 +123,6 @@ const submit_evaluation_form = (values) => {
|
||||
message: __("Evaluation scheduled successfully"),
|
||||
indicator: "green",
|
||||
});
|
||||
this.eval_form.hide();
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 1000);
|
||||
|
||||
@@ -42,7 +42,7 @@ def get_context(context):
|
||||
"course": ["in", context.courses],
|
||||
"date": [">=", frappe.utils.nowdate()],
|
||||
},
|
||||
["date", "start_time", "course", "evaluator"],
|
||||
["date", "start_time", "course", "evaluator", "google_meet_link"],
|
||||
order_by="date",
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user