From 5ab9131629f39c6b1f59235dd8d92fc9d4db7225 Mon Sep 17 00:00:00 2001
From: Jannat Patel
Date: Thu, 13 Feb 2025 16:57:21 +0530
Subject: [PATCH] fix: misc batch issues
---
frontend/src/components/BatchFeedback.vue | 4 +--
frontend/src/components/BatchStudents.vue | 4 +--
.../components/Modals/AnnouncementModal.vue | 7 ++--
.../Modals/BatchStudentProgress.vue | 33 +++++++++++++++----
frontend/src/pages/BatchDetail.vue | 5 +++
lms/lms/api.py | 29 +++++-----------
.../lms_batch_enrollment.py | 14 ++++----
lms/lms/utils.py | 21 ++++++++----
lms/templates/emails/batch_confirmation.html | 8 +----
lms/templates/emails/payment_reminder.html | 8 ++++-
10 files changed, 80 insertions(+), 53 deletions(-)
diff --git a/frontend/src/components/BatchFeedback.vue b/frontend/src/components/BatchFeedback.vue
index 5a7e0204..fb2cb3ca 100644
--- a/frontend/src/components/BatchFeedback.vue
+++ b/frontend/src/components/BatchFeedback.vue
@@ -78,7 +78,7 @@
{
diff --git a/frontend/src/components/BatchStudents.vue b/frontend/src/components/BatchStudents.vue
index fd3f8ff3..dc21e311 100644
--- a/frontend/src/components/BatchStudents.vue
+++ b/frontend/src/components/BatchStudents.vue
@@ -78,7 +78,7 @@
:options="chartOptions"
:series="chartData"
type="bar"
- height="200"
+ :height="chartData[0].data.length * 30 + 100"
/>
{
})
Object.keys(student.assessments).forEach((assessment) => {
- if (student.assessments[assessment].result === 'Passed') {
+ if (student.assessments[assessment].result === 'Pass') {
categories[assessment].value += 1
}
})
diff --git a/frontend/src/components/Modals/AnnouncementModal.vue b/frontend/src/components/Modals/AnnouncementModal.vue
index 5f07d866..bcb9f30e 100644
--- a/frontend/src/components/Modals/AnnouncementModal.vue
+++ b/frontend/src/components/Modals/AnnouncementModal.vue
@@ -67,13 +67,16 @@ const announcement = reactive({
})
const announcementResource = createResource({
- url: 'lms.lms.api.make_announcement',
+ url: 'frappe.core.doctype.communication.email.make',
makeParams(values) {
return {
- students: props.students,
+ recipients: props.students.join(', '),
cc: announcement.replyTo,
subject: announcement.subject,
content: announcement.announcement,
+ doctype: 'LMS Batch',
+ name: props.batch,
+ send_email: 1,
}
},
})
diff --git a/frontend/src/components/Modals/BatchStudentProgress.vue b/frontend/src/components/Modals/BatchStudentProgress.vue
index 7896f42a..e2bf3add 100644
--- a/frontend/src/components/Modals/BatchStudentProgress.vue
+++ b/frontend/src/components/Modals/BatchStudentProgress.vue
@@ -32,25 +32,44 @@
{{ __('Assessment') }}
- {{ __('Progress') }}
+ {{ __('Percentage/Status') }}
-
{{ assessment }}
-
-
- {{ student.assessments[assessment] }}
+
+
+ {{ student.assessments[assessment].status }}
- {{ student.assessments[assessment] }}
+ {{ student.assessments[assessment].status }}
-
+
diff --git a/frontend/src/pages/BatchDetail.vue b/frontend/src/pages/BatchDetail.vue
index 8c7b447c..24d243ec 100644
--- a/frontend/src/pages/BatchDetail.vue
+++ b/frontend/src/pages/BatchDetail.vue
@@ -127,6 +127,11 @@ const batch = createResource({
batch: props.batchName,
},
auto: true,
+ onSuccess: (data) => {
+ if (!data) {
+ router.push({ name: 'Batches' })
+ }
+ },
})
const courses = createResource({
diff --git a/lms/lms/api.py b/lms/lms/api.py
index 9fe46a43..afae3e15 100644
--- a/lms/lms/api.py
+++ b/lms/lms/api.py
@@ -7,15 +7,10 @@ import zipfile
import os
import re
import shutil
-import requests
import xml.etree.ElementTree as ET
from frappe.translate import get_all_translations
from frappe import _
-from frappe.query_builder import DocType
-from frappe.query_builder.functions import Count
from frappe.utils import (
- time_diff,
- now_datetime,
get_datetime,
cint,
flt,
@@ -24,10 +19,10 @@ from frappe.utils import (
format_date,
date_diff,
)
-from typing import Optional
from lms.lms.utils import get_average_rating, get_lesson_count
from xml.dom.minidom import parseString
from lms.lms.doctype.course_lesson.course_lesson import save_progress
+from frappe.core.doctype.communication.email import make
@frappe.whitelist()
@@ -845,7 +840,7 @@ def update_course_statistics():
@frappe.whitelist()
def get_announcements(batch):
- return frappe.get_all(
+ communications = frappe.get_all(
"Communication",
filters={
"reference_doctype": "LMS Batch",
@@ -863,6 +858,13 @@ def get_announcements(batch):
order_by="communication_date desc",
)
+ for communication in communications:
+ communication.image = frappe.get_cached_value(
+ "User", communication.sender, "user_image"
+ )
+
+ return communications
+
@frappe.whitelist()
def delete_course(course):
@@ -1225,16 +1227,3 @@ def get_notifications(filters):
@frappe.whitelist(allow_guest=True)
def is_guest_allowed():
return frappe.get_cached_value("LMS Settings", None, "allow_guest_access")
-
-
-@frappe.whitelist()
-def make_announcement(students, cc, subject, content):
- for student in students:
- frappe.sendmail(
- recipients=student,
- cc=cc,
- subject=subject,
- message=content,
- header=[subject, "green"],
- retry=3,
- )
diff --git a/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py b/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py
index bab1ee6a..8fd3124c 100644
--- a/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py
+++ b/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py
@@ -76,17 +76,19 @@ def send_confirmation_email(doc):
def send_mail(doc):
- subject = _("Enrollment Confirmation for the Next Training Batch")
- template = "batch_confirmation"
- custom_template = frappe.db.get_single_value(
- "LMS Settings", "batch_confirmation_template"
- )
batch = frappe.db.get_value(
"LMS Batch",
doc.batch,
["name", "title", "start_date", "start_time", "medium"],
as_dict=1,
)
+
+ subject = _("Enrollment Confirmation for {0}").format(batch.title)
+ template = "batch_confirmation"
+ custom_template = frappe.db.get_single_value(
+ "LMS Settings", "batch_confirmation_template"
+ )
+
args = {
"title": batch.title,
"student_name": doc.member_name,
@@ -107,6 +109,6 @@ def send_mail(doc):
template=template if not custom_template else None,
content=content if custom_template else None,
args=args,
- header=[subject, "green"],
+ header=[_(batch.title), "green"],
retry=3,
)
diff --git a/lms/lms/utils.py b/lms/lms/utils.py
index c7a82860..5dcccd16 100644
--- a/lms/lms/utils.py
+++ b/lms/lms/utils.py
@@ -1194,6 +1194,9 @@ def get_neighbour_lesson(course, chapter, lesson):
@frappe.whitelist(allow_guest=True)
def get_batch_details(batch):
+ if not frappe.db.get_value("LMS Batch", batch, "published") and has_student_role():
+ return
+
batch_details = frappe.db.get_value(
"LMS Batch",
batch,
@@ -1450,7 +1453,7 @@ def get_batch_students(batch):
)
detail.assessments[title] = assessment_info
- if assessment_info.result == "Passed":
+ if assessment_info.result == "Pass":
assessments_completed += 1
detail.courses_completed = courses_completed
@@ -1493,20 +1496,26 @@ def has_submitted_assessment(assessment, assessment_type, member=None):
attempt = frappe.db.exists(doctype, filters)
if attempt:
- attempt_details = frappe.db.get_value(doctype, filters, fields)
+ fields.append("name")
+ attempt_details = frappe.db.get_value(doctype, filters, fields, as_dict=1)
if assessment_type == "LMS Quiz":
result = "Failed"
passing_percentage = frappe.db.get_value(
"LMS Quiz", assessment, "passing_percentage"
)
- if attempt_details >= passing_percentage:
- result = "Passed"
+ if attempt_details.percentage >= passing_percentage:
+ result = "Pass"
else:
- result = attempt_details
+ result = attempt_details.status
return frappe._dict(
{
- "status": attempt_details,
+ "status": attempt_details.percentage
+ if assessment_type == "LMS Quiz"
+ else attempt_details.status,
"result": result,
+ "assessment": assessment,
+ "type": assessment_type,
+ "submission": attempt_details.name,
}
)
else:
diff --git a/lms/templates/emails/batch_confirmation.html b/lms/templates/emails/batch_confirmation.html
index b74d5a3d..4856ce39 100644
--- a/lms/templates/emails/batch_confirmation.html
+++ b/lms/templates/emails/batch_confirmation.html
@@ -6,12 +6,6 @@
{{ _("We are pleased to inform you that you have been enrolled in our upcoming batch. Congratulations!") }}
-
-
- {{ title }}
-
-
-
{{ _("Batch Start Date:") }} {{ frappe.utils.format_date(start_date, "medium") }}
@@ -27,7 +21,7 @@
{{ _("Visit the following link to view your ") }}
- {{ _("Batch Details") }}
+ {{ _("Batch Details") }}
{{ _("If you have any questions or require assistance, feel free to contact us.") }}
diff --git a/lms/templates/emails/payment_reminder.html b/lms/templates/emails/payment_reminder.html
index dd2847be..c7e70561 100644
--- a/lms/templates/emails/payment_reminder.html
+++ b/lms/templates/emails/payment_reminder.html
@@ -1,18 +1,24 @@
{{ _('Hi') }} {{ billing_name }},
+
{{ _('We noticed that you started enrolling in the') }} {{ type }} {{ title }} {{ _('but didn’t complete your payment') }}.
+
{{ _("We have a limited number of seats, and they won't be available for long!")}}
+
{{ _("Don’t miss this opportunity to enhance your skills. Click below to complete your enrollment") }}:
+
- 👉 Complete Your Enrollment
+ 👉 {{ _("Complete Your Enrollment") }}
+
{{ _("If you have any questions or need assistance, feel free to reach out to our support team.") }}
+
{{ __("Looking forward to seeing you enrolled!") }}