fix: scheduled the eval event creation

This commit is contained in:
Jannat Patel
2023-07-24 17:10:03 +05:30
parent 7990675c5c
commit bc8827547e
6 changed files with 91 additions and 52 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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