From bc8827547e4f883ef8386283ff7f000ce301058c Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Mon, 24 Jul 2023 17:10:03 +0530 Subject: [PATCH] fix: scheduled the eval event creation --- lms/hooks.py | 10 +- .../lms_certificate_request.json | 9 +- .../lms_certificate_request.py | 108 +++++++++++------- lms/www/classes/progress.html | 12 +- lms/www/classes/progress.js | 2 +- lms/www/classes/progress.py | 2 +- 6 files changed, 91 insertions(+), 52 deletions(-) diff --git a/lms/hooks.py b/lms/hooks.py index b0e04048..1bb0f1f0 100644 --- a/lms/hooks.py +++ b/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"] diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json index 2de888cf..deb300ce 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json @@ -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", diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py index b890cc40..475643f1 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -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() diff --git a/lms/www/classes/progress.html b/lms/www/classes/progress.html index 94bc597c..2639eda7 100644 --- a/lms/www/classes/progress.html +++ b/lms/www/classes/progress.html @@ -71,9 +71,17 @@
{% for eval in upcoming_evals %}
-
- {{ eval.course_title }} +
+
+ {{ eval.course_title }} +
+ {% if eval.google_meet_link %} + + {{ _("Join") }} + + {% endif %}
+
diff --git a/lms/www/classes/progress.js b/lms/www/classes/progress.js index 25bb3047..44c4268b 100644 --- a/lms/www/classes/progress.js +++ b/lms/www/classes/progress.js @@ -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); diff --git a/lms/www/classes/progress.py b/lms/www/classes/progress.py index 5803ed42..eef9cbee 100644 --- a/lms/www/classes/progress.py +++ b/lms/www/classes/progress.py @@ -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", )