Merge pull request #1323 from pateljannat/batch-reminders
feat: batch start and live class reminder
This commit is contained in:
@@ -313,7 +313,7 @@ const tabs = computed(() => {
|
||||
})
|
||||
|
||||
const redirectToLogin = () => {
|
||||
window.location.href = `/login?redirect-to=/batches`
|
||||
window.location.href = `/login?redirect-to=/lms/batch/${props.batchName}`
|
||||
}
|
||||
|
||||
const openAnnouncementModal = () => {
|
||||
|
||||
@@ -116,6 +116,8 @@ scheduler_events = {
|
||||
"daily": [
|
||||
"lms.job.doctype.job_opportunity.job_opportunity.update_job_openings",
|
||||
"lms.lms.doctype.lms_payment.lms_payment.send_payment_reminder",
|
||||
"lms.lms.doctype.lms_batch.lms_batch.send_batch_start_reminder",
|
||||
"lms.lms.doctype.lms_live_class.lms_live_class.send_live_class_reminder",
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import json
|
||||
from frappe import _
|
||||
from datetime import timedelta
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils import cint, format_datetime, get_time
|
||||
from frappe.utils import cint, format_datetime, get_time, add_days, nowdate
|
||||
from lms.lms.utils import (
|
||||
get_lessons,
|
||||
get_lesson_index,
|
||||
@@ -405,3 +405,40 @@ def is_milestone_complete(idx, batch):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def send_batch_start_reminder():
|
||||
batches = frappe.get_all(
|
||||
"LMS Batch",
|
||||
{"start_date": add_days(nowdate(), 1), "published": 1},
|
||||
["name", "title", "start_date", "start_time", "medium"],
|
||||
)
|
||||
|
||||
for batch in batches:
|
||||
students = frappe.get_all(
|
||||
"LMS Batch Enrollment", {"batch": batch}, ["member", "member_name"]
|
||||
)
|
||||
for student in students:
|
||||
send_mail(batch, student)
|
||||
|
||||
|
||||
def send_mail(batch, student):
|
||||
subject = _("Batch Start Reminder")
|
||||
template = "batch_start_reminder"
|
||||
|
||||
args = {
|
||||
"student_name": student.member_name,
|
||||
"title": batch.title,
|
||||
"start_date": batch.start_date,
|
||||
"start_time": batch.start_time,
|
||||
"medium": batch.medium,
|
||||
"name": batch.name,
|
||||
}
|
||||
|
||||
frappe.sendmail(
|
||||
recipients=student.member,
|
||||
subject=subject,
|
||||
template=template,
|
||||
args=args,
|
||||
header=[_(f"Batch Start Reminder: {batch.title}"), "orange"],
|
||||
)
|
||||
|
||||
@@ -79,20 +79,13 @@ def send_mail(doc):
|
||||
batch = frappe.db.get_value(
|
||||
"LMS Batch",
|
||||
doc.batch,
|
||||
[
|
||||
"name",
|
||||
"title",
|
||||
"start_date",
|
||||
"start_time",
|
||||
"medium",
|
||||
"confirmation_email_template",
|
||||
],
|
||||
["name", "title", "start_date", "start_time", "medium"],
|
||||
as_dict=1,
|
||||
)
|
||||
|
||||
subject = _("Enrollment Confirmation for {0}").format(batch.title)
|
||||
template = "batch_confirmation"
|
||||
custom_template = batch.confirmation_email_template or frappe.db.get_single_value(
|
||||
custom_template = frappe.db.get_single_value(
|
||||
"LMS Settings", "batch_confirmation_template"
|
||||
)
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
from datetime import timedelta
|
||||
from frappe.utils import cint, get_datetime
|
||||
from frappe.utils import cint, get_datetime, format_date, nowdate, format_time
|
||||
|
||||
|
||||
class LMSLiveClass(Document):
|
||||
@@ -56,8 +57,48 @@ class LMSLiveClass(Document):
|
||||
{
|
||||
"sync_with_google_calendar": 1,
|
||||
"google_calendar": calendar,
|
||||
"description": f"A Live Class has been scheduled on {frappe.utils.format_date(self.date, 'medium')} at { frappe.utils.format_time(self.time, 'hh:mm a')}. Click on this link to join. {self.join_url}. {self.description}",
|
||||
"description": f"A Live Class has been scheduled on {format_date(self.date, 'medium')} at {format_time(self.time, 'hh:mm a')}. Click on this link to join. {self.join_url}. {self.description}",
|
||||
}
|
||||
)
|
||||
|
||||
event.save()
|
||||
|
||||
|
||||
def send_live_class_reminder():
|
||||
classes = frappe.get_all(
|
||||
"LMS Live Class",
|
||||
{
|
||||
"date": nowdate(),
|
||||
},
|
||||
["name", "batch_name", "title", "date", "time"],
|
||||
)
|
||||
|
||||
for live_class in classes:
|
||||
students = frappe.get_all(
|
||||
"LMS Batch Enrollment",
|
||||
{"batch": live_class.batch_name},
|
||||
["member", "member_name"],
|
||||
)
|
||||
for student in students:
|
||||
send_mail(live_class, student)
|
||||
|
||||
|
||||
def send_mail(live_class, student):
|
||||
subject = f"Your class on {live_class.title} is tomorrow"
|
||||
template = "live_class_reminder"
|
||||
|
||||
args = {
|
||||
"student_name": student.member_name,
|
||||
"title": live_class.title,
|
||||
"date": live_class.date,
|
||||
"time": live_class.time,
|
||||
"batch_name": live_class.batch_name,
|
||||
}
|
||||
|
||||
frappe.sendmail(
|
||||
recipients=student.member,
|
||||
subject=subject,
|
||||
template=template,
|
||||
args=args,
|
||||
header=[_(f"Class Reminder: {live_class.title}"), "orange"],
|
||||
)
|
||||
|
||||
35
lms/templates/emails/batch_start_reminder.html
Normal file
35
lms/templates/emails/batch_start_reminder.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<p>
|
||||
{{ _("Dear ") }} {{ student_name }},
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
{{ _("The batch you have enrolled for is starting tomorrow. Please be prepared and be on time for the session.") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Batch:") }}</b> {{ title }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Start Date:") }}</b> {{ frappe.utils.format_date(start_date, "medium") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Timings:") }}</b> {{ frappe.utils.format_time(start_time, "hh:mm a") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Medium:") }}</b> {{ medium }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
{{ _("Visit the following link to view your ") }}
|
||||
<a href="/lms/batches/{{ name }}">{{ _("Batch Details") }}</a>
|
||||
</p>
|
||||
<p>
|
||||
{{ _("If you have any questions or require assistance, feel free to contact us.") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
{{ _("Best Regards") }}
|
||||
</p>
|
||||
31
lms/templates/emails/live_class_reminder.html
Normal file
31
lms/templates/emails/live_class_reminder.html
Normal file
@@ -0,0 +1,31 @@
|
||||
<p>
|
||||
{{ _("Dear ") }} {{ student_name }},
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
{{ _("You have a live class scheduled tomorrow. Please be prepared and be on time for the session.") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Class:") }}</b> {{ title }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Date:") }}</b> {{ frappe.utils.format_date(date, "medium") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<b>{{ _("Timings:") }}</b> {{ frappe.utils.format_time(time, "hh:mm a") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
{{ _("Visit the following link to view your ") }}
|
||||
<a href="/lms/live_classes/{{ batch_name }}">{{ _("Batch Details") }}</a>
|
||||
</p>
|
||||
<p>
|
||||
{{ _("If you have any questions or require assistance, feel free to contact us.") }}
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
{{ _("Best Regards") }}
|
||||
</p>
|
||||
Reference in New Issue
Block a user