fix: calendar background and assignment text color

This commit is contained in:
Jannat Patel
2025-02-11 16:28:25 +05:30
47 changed files with 372 additions and 323 deletions

View File

@@ -25,7 +25,7 @@
"codemirror-editor-vue3": "^2.8.0", "codemirror-editor-vue3": "^2.8.0",
"dayjs": "^1.11.6", "dayjs": "^1.11.6",
"feather-icons": "^4.28.0", "feather-icons": "^4.28.0",
"frappe-ui": "^0.1.108", "frappe-ui": "^0.1.109",
"lucide-vue-next": "^0.383.0", "lucide-vue-next": "^0.383.0",
"markdown-it": "^14.0.0", "markdown-it": "^14.0.0",
"pinia": "^2.0.33", "pinia": "^2.0.33",

View File

@@ -6,7 +6,10 @@
<div class="text-lg leading-5 font-semibold mb-2 text-ink-gray-9"> <div class="text-lg leading-5 font-semibold mb-2 text-ink-gray-9">
{{ batch.title }} {{ batch.title }}
</div> </div>
<div v-if="batch.seat_count && batch.seats_left > 0" class="text-xs bg-green-200 text-green-800 self-start px-2 py-0.5 rounded-md"> <div
v-if="batch.seat_count && batch.seats_left > 0"
class="text-xs bg-green-200 text-green-800 self-start px-2 py-0.5 rounded-md"
>
{{ batch.seats_left }} {{ batch.seats_left }}
<span v-if="batch.seats_left > 1"> <span v-if="batch.seats_left > 1">
{{ __('Seats Left') }} {{ __('Seats Left') }}
@@ -15,7 +18,10 @@
{{ __('Seat Left') }} {{ __('Seat Left') }}
</span> </span>
</div> </div>
<div v-else-if="batch.seat_count && batch.seats_left <= 0" class="text-xs bg-red-200 text-red-900 self-start px-2 py-0.5 rounded-md"> <div
v-else-if="batch.seat_count && batch.seats_left <= 0"
class="text-xs bg-red-200 text-red-900 self-start px-2 py-0.5 rounded-md"
>
{{ __('Sold Out') }} {{ __('Sold Out') }}
</div> </div>
<div class="short-introduction text-sm text-ink-gray-7"> <div class="short-introduction text-sm text-ink-gray-7">

View File

@@ -341,7 +341,7 @@ const getChartData = () => {
}) })
Object.keys(student.assessments).forEach((assessment) => { Object.keys(student.assessments).forEach((assessment) => {
if (student.assessments[assessment] === 100) { if (student.assessments[assessment].result === 'Passed') {
categories[assessment].value += 1 categories[assessment].value += 1
} }
}) })

View File

@@ -1,7 +1,7 @@
<template> <template>
<div <div
v-if="course.title" v-if="course.title"
class="flex flex-col h-full rounded-md shadow-md border-2 overflow-auto" class="flex flex-col h-full rounded-md border-2 overflow-auto"
style="min-height: 350px" style="min-height: 350px"
> >
<div <div
@@ -15,7 +15,10 @@
<Badge v-if="course.featured" variant="subtle" theme="green" size="md"> <Badge v-if="course.featured" variant="subtle" theme="green" size="md">
{{ __('Featured') }} {{ __('Featured') }}
</Badge> </Badge>
<div v-for="tag in course.tags" class="text-xs bg-white text-gray-800 px-2 py-0.5 rounded-md"> <div
v-for="tag in course.tags"
class="text-xs bg-white text-gray-800 px-2 py-0.5 rounded-md"
>
{{ tag }} {{ tag }}
</div> </div>
</div> </div>

View File

@@ -16,7 +16,7 @@
</div> </div>
<div <div
:class="{ :class="{
'shadow rounded-md py-2 px-2': showOutline && outline.data?.length, 'border-2 rounded-md py-2 px-2': showOutline && outline.data?.length,
}" }"
> >
<Disclosure <Disclosure

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="space-y-5"> <div class="space-y-5 text-ink-gray-9">
<div class="space-y-2"> <div class="space-y-2">
<div class="flex items-center text-sm font-medium space-x-2"> <div class="flex items-center text-sm font-medium space-x-2">
<span> <span>

View File

@@ -316,6 +316,9 @@ const quiz = createResource({
}, },
cache: ['quiz', props.quizName], cache: ['quiz', props.quizName],
auto: true, auto: true,
transform(data) {
data.duration = parseInt(data.duration)
},
onSuccess(data) { onSuccess(data) {
populateQuestions() populateQuestions()
setupTimer() setupTimer()

View File

@@ -188,4 +188,4 @@ const assignmentOptions = computed(() => {
{ label: 'URL', value: 'URL' }, { label: 'URL', value: 'URL' },
] ]
}) })
</script> </script>

View File

@@ -123,7 +123,7 @@
<div <div
v-if="course.tags" v-if="course.tags"
v-for="tag in course.tags?.split(', ')" v-for="tag in course.tags?.split(', ')"
class="flex items-center bg-surface-gray-2 p-2 rounded-md mr-2" class="flex items-center bg-surface-gray-2 text-ink-gray-7 p-2 rounded-md mr-2"
> >
{{ tag }} {{ tag }}
<X <X

View File

@@ -44,7 +44,7 @@ const certificates = createListResource({
filters: { filters: {
member: props.profile.data?.name, member: props.profile.data?.name,
}, },
fields: ['name', 'course_title', 'batch_title', 'issue_date'], fields: ['name', 'course_title', 'batch_title', 'issue_date', 'template'],
cache: ['certificates', props.profile.data?.name], cache: ['certificates', props.profile.data?.name],
}) })

View File

@@ -113,7 +113,10 @@ scheduler_events = {
"lms.lms.doctype.lms_certificate_request.lms_certificate_request.schedule_evals", "lms.lms.doctype.lms_certificate_request.lms_certificate_request.schedule_evals",
"lms.lms.api.update_course_statistics", "lms.lms.api.update_course_statistics",
], ],
"daily": ["lms.job.doctype.job_opportunity.job_opportunity.update_job_openings"], "daily": [
"lms.job.doctype.job_opportunity.job_opportunity.update_job_openings",
"lms.lms.doctype.lms_payment.lms_payment.send_payment_reminder",
],
} }
fixtures = ["Custom Field", "Function", "Industry", "LMS Category"] fixtures = ["Custom Field", "Function", "Industry", "LMS Category"]

View File

@@ -1,7 +0,0 @@
// Copyright (c) 2022, Frappe and contributors
// For license information, please see license.txt
frappe.ui.form.on("Batch Student", {
// refresh: function(frm) {
// }
});

View File

@@ -1,83 +0,0 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2022-11-09 16:20:44.602545",
"default_view": "List",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"student_details_section",
"student",
"student_name",
"username",
"column_break_oduu",
"payment",
"source",
"confirmation_email_sent"
],
"fields": [
{
"fieldname": "student",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Student",
"options": "User",
"reqd": 1
},
{
"fetch_from": "student.full_name",
"fieldname": "student_name",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Student Name",
"read_only": 1
},
{
"fetch_from": "student.username",
"fieldname": "username",
"fieldtype": "Data",
"label": "Username",
"read_only": 1
},
{
"fieldname": "student_details_section",
"fieldtype": "Section Break",
"label": "Student Details"
},
{
"fieldname": "column_break_oduu",
"fieldtype": "Column Break"
},
{
"fieldname": "payment",
"fieldtype": "Link",
"label": "Payment",
"options": "LMS Payment"
},
{
"default": "0",
"fieldname": "confirmation_email_sent",
"fieldtype": "Check",
"label": "Confirmation Email Sent"
},
{
"fieldname": "source",
"fieldtype": "Link",
"label": "Source",
"options": "LMS Source"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2023-10-26 16:52:04.266694",
"modified_by": "Administrator",
"module": "LMS",
"name": "Batch Student",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2022, Frappe and contributors
# For license information, please see license.txt
import frappe
from frappe.model.document import Document
class BatchStudent(Document):
pass

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2022, Frappe and Contributors
# See license.txt
# import frappe
from frappe.tests import UnitTestCase
class TestBatchStudent(UnitTestCase):
pass

View File

@@ -41,16 +41,6 @@ class LMSBatch(Document):
if self.end_date < self.start_date: if self.end_date < self.start_date:
frappe.throw(_("Batch end date cannot be before the batch start date")) frappe.throw(_("Batch end date cannot be before the batch start date"))
def validate_duplicate_students(self):
students = [row.student for row in self.students]
duplicates = {student for student in students if students.count(student) > 1}
if len(duplicates):
frappe.throw(
_("Student {0} has already been added to this batch.").format(
frappe.bold(next(iter(duplicates)))
)
)
def validate_duplicate_courses(self): def validate_duplicate_courses(self):
courses = [row.course for row in self.courses] courses = [row.course for row in self.courses]
duplicates = {course for course in courses if courses.count(course) > 1} duplicates = {course for course in courses if courses.count(course) > 1}
@@ -88,9 +78,7 @@ class LMSBatch(Document):
frappe.throw(_("Evaluation end date cannot be less than the batch end date.")) frappe.throw(_("Evaluation end date cannot be less than the batch end date."))
def validate_membership(self): def validate_membership(self):
members = frappe.get_all( members = frappe.get_all("LMS Batch Enrollment", {"batch": self.name}, pluck="member")
"LMS Batch Enrollment", filters={"batch": self.name}, pluck=["member"]
)
for course in self.courses: for course in self.courses:
for member in members: for member in members:
if not frappe.db.exists( if not frappe.db.exists(
@@ -102,7 +90,8 @@ class LMSBatch(Document):
enrollment.save() enrollment.save()
def validate_seats_left(self): def validate_seats_left(self):
if cint(self.seat_count) < len(self.students): students = frappe.db.count("LMS Batch Enrollment", {"batch": self.name})
if cint(self.seat_count) < students:
frappe.throw(_("There are no seats available in this batch.")) frappe.throw(_("There are no seats available in this batch."))
def validate_timetable(self): def validate_timetable(self):

View File

@@ -1,8 +1,20 @@
// Copyright (c) 2025, Frappe and contributors // Copyright (c) 2025, Frappe and contributors
// For license information, please see license.txt // For license information, please see license.txt
// frappe.ui.form.on("LMS Batch Enrollment", { frappe.ui.form.on("LMS Batch Enrollment", {
// refresh(frm) { refresh(frm) {
if (!frm.doc.confirmation_email_sent) {
// }, frm.add_custom_button(__("Send Confirmation Email"), function () {
// }); frappe.call({
method: "lms.lms.doctype.lms_batch_enrollment.lms_batch_enrollment.send_confirmation_email",
args: {
doc: frm.doc,
},
callback: function (r) {
frm.refresh();
},
});
});
}
},
});

View File

@@ -2,6 +2,7 @@
# For license information, please see license.txt # For license information, please see license.txt
import frappe import frappe
import json
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe.email.doctype.email_template.email_template import get_email_template from frappe.email.doctype.email_template.email_template import get_email_template
@@ -9,7 +10,7 @@ from frappe.email.doctype.email_template.email_template import get_email_templat
class LMSBatchEnrollment(Document): class LMSBatchEnrollment(Document):
def after_insert(self): def after_insert(self):
self.send_confirmation_email() send_confirmation_email(self)
self.add_member_to_live_class() self.add_member_to_live_class()
def validate(self): def validate(self):
@@ -37,53 +38,6 @@ class LMSBatchEnrollment(Document):
enrollment.member = self.member enrollment.member = self.member
enrollment.save() enrollment.save()
def send_confirmation_email(self):
if not self.confirmation_email_sent:
outgoing_email_account = frappe.get_cached_value(
"Email Account", {"default_outgoing": 1, "enable_outgoing": 1}, "name"
)
if not self.confirmation_email_sent and (
outgoing_email_account or frappe.conf.get("mail_login")
):
self.send_mail()
self.db_set("confirmation_email_sent", 1)
def send_mail(self):
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",
self.batch,
["name", "title", "start_date", "start_time", "medium"],
as_dict=1,
)
args = {
"title": batch.title,
"student_name": self.member_name,
"start_time": batch.start_time,
"start_date": batch.start_date,
"medium": batch.medium,
"name": batch.name,
}
if custom_template:
email_template = get_email_template(custom_template, args)
subject = email_template.get("subject")
content = email_template.get("message")
frappe.sendmail(
recipients=self.member,
subject=subject,
template=template if not custom_template else None,
content=content if custom_template else None,
args=args,
header=[subject, "green"],
retry=3,
)
def add_member_to_live_class(self): def add_member_to_live_class(self):
live_classes = frappe.get_all( live_classes = frappe.get_all(
"LMS Live Class", {"batch_name": self.batch}, ["name", "event"] "LMS Live Class", {"batch_name": self.batch}, ["name", "event"]
@@ -102,3 +56,56 @@ class LMSBatchEnrollment(Document):
"parentfield": "event_participants", "parentfield": "event_participants",
} }
).save() ).save()
@frappe.whitelist()
def send_confirmation_email(doc):
if isinstance(doc, str):
doc = frappe._dict(json.loads(doc))
if not doc.confirmation_email_sent:
outgoing_email_account = frappe.get_cached_value(
"Email Account", {"default_outgoing": 1, "enable_outgoing": 1}, "name"
)
if not doc.confirmation_email_sent and (
outgoing_email_account or frappe.conf.get("mail_login")
):
doc.send_mail()
doc.db_set("confirmation_email_sent", 1)
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,
)
args = {
"title": batch.title,
"student_name": doc.member_name,
"start_time": batch.start_time,
"start_date": batch.start_date,
"medium": batch.medium,
"name": batch.name,
}
if custom_template:
email_template = get_email_template(custom_template, args)
subject = email_template.get("subject")
content = email_template.get("message")
frappe.sendmail(
recipients=doc.member,
subject=subject,
template=template if not custom_template else None,
content=content if custom_template else None,
args=args,
header=[subject, "green"],
retry=3,
)

View File

@@ -1,19 +1,18 @@
{ {
"actions": [], "actions": [],
"allow_rename": 1, "allow_rename": 1,
"autoname": "format:PAY-{#####}",
"creation": "2023-08-24 17:46:52.065763", "creation": "2023-08-24 17:46:52.065763",
"default_view": "List", "default_view": "List",
"doctype": "DocType", "doctype": "DocType",
"editable_grid": 1, "editable_grid": 1,
"engine": "InnoDB", "engine": "InnoDB",
"field_order": [ "field_order": [
"payment_for_document_type",
"member", "member",
"billing_name",
"source", "source",
"column_break_rqkd", "column_break_rqkd",
"payment_for_document_type",
"payment_for_document", "payment_for_document",
"billing_name",
"payment_received", "payment_received",
"payment_details_section", "payment_details_section",
"currency", "currency",
@@ -141,11 +140,10 @@
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2024-10-31 15:33:39.420366", "modified": "2025-02-11 14:48:27.801895",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Payment", "name": "LMS Payment",
"naming_rule": "Expression",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [
{ {

View File

@@ -1,9 +1,78 @@
# Copyright (c) 2023, Frappe and contributors # Copyright (c) 2023, Frappe and contributors
# For license information, please see license.txt # For license information, please see license.txt
# import frappe import frappe
from frappe import _
from frappe.utils import add_days, nowdate
from frappe.email.doctype.email_template.email_template import get_email_template
from frappe.model.document import Document from frappe.model.document import Document
class LMSPayment(Document): class LMSPayment(Document):
pass pass
def send_payment_reminder():
outgoing_email_account = frappe.get_cached_value(
"Email Account", {"default_outgoing": 1, "enable_outgoing": 1}, "name"
)
if not (outgoing_email_account or frappe.conf.get("mail_login")):
return
incomplete_payments = frappe.get_all(
"LMS Payment",
{"payment_received": 0, "creation": [">", add_days(nowdate(), -1)]},
fields=[
"name",
"member",
"payment_for_document",
"payment_for_document_type",
"billing_name",
],
)
for payment in incomplete_payments:
send_mail(payment)
def send_mail(payment):
subject = _("Complete Your Enrollment - Don't miss out!")
template = "payment_reminder"
custom_template = frappe.db.get_single_value(
"LMS Settings", "payment_reminder_template"
)
args = {
"billing_name": payment.billing_name,
"type": payment.payment_for_document_type.split(" ")[-1].lower(),
"title": frappe.db.get_value(
payment.payment_for_document_type, payment.payment_for_document, "title"
),
"link": f"/lms/billing/{ payment.payment_for_document_type.split(' ')[-1].lower() }/{ payment.payment_for_document }",
}
if custom_template:
email_template = get_email_template(custom_template, args)
subject = email_template.get("subject")
content = email_template.get("message")
instructors = frappe.get_all(
"Course Instructor",
{
"parenttype": payment.payment_for_document_type,
"parent": payment.payment_for_document,
},
pluck="instructor",
)
frappe.sendmail(
recipients=payment.member,
cc=instructors,
subject=subject,
template=template if not custom_template else None,
content=content if custom_template else None,
args=args,
header=[subject, "green"],
retry=3,
)

View File

@@ -58,7 +58,8 @@
"certification_template", "certification_template",
"batch_confirmation_template", "batch_confirmation_template",
"column_break_uwsp", "column_break_uwsp",
"assignment_submission_template" "assignment_submission_template",
"payment_reminder_template"
], ],
"fields": [ "fields": [
{ {
@@ -358,12 +359,18 @@
"fieldname": "allow_guest_access", "fieldname": "allow_guest_access",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Allow Guest Access" "label": "Allow Guest Access"
},
{
"fieldname": "payment_reminder_template",
"fieldtype": "Link",
"label": "Payment Reminder Template",
"options": "Email Template"
} }
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"issingle": 1, "issingle": 1,
"links": [], "links": [],
"modified": "2025-02-06 11:42:29.803207", "modified": "2025-02-11 11:29:43.412897",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Settings", "name": "LMS Settings",

View File

@@ -1,11 +0,0 @@
<div>
<p>Hi {{ doc.billing_name }},</p>
<p>We noticed that you started enrolling in the {{ doc.payment_for_document_type.split(" ")[-1] }} {{ frappe.db.get_value(doc.payment_for_document_type, doc.payment_for_document, "title") }} but didnt complete your payment.</p>
<p>We have a limited number of seats, and they won't be available for long!</p>
<p>Dont miss this opportunity to enhance your skills. Click below to complete your enrollment:</p>
<p>
<a href="/lms/billing/{{ doc.payment_for_document_type.split(' ')[-1].lower() }}/{{ doc.payment_for_document }}">👉 Complete Your Enrollment</a>
</p>
<p>If you have any questions or need assistance, feel free to reach out to our support team.</p>
<p>Looking forward to seeing you enrolled!</p>
</div>

View File

@@ -1,35 +0,0 @@
{
"attach_print": 0,
"channel": "Email",
"condition": "doc.payment_received == 0",
"creation": "2025-02-03 15:52:32.508093",
"date_changed": "creation",
"days_in_advance": 1,
"docstatus": 0,
"doctype": "Notification",
"document_type": "LMS Payment",
"enabled": 1,
"event": "Days After",
"idx": 0,
"is_standard": 1,
"message": "<div>\n <p>Hi {{ doc.billing_name }},</p>\n <p>We noticed that you started enrolling in the {{ doc.payment_for_document_type.split(\" \")[-1] }} {{ frappe.db.get_value(doc.payment_for_document_type, doc.payment_for_document, \"title\") }} but didn\u2019t complete your payment.</p>\n <p>We have a limited number of seats, and they won't be available for long!</p>\n <p>Don\u2019t miss this opportunity to enhance your skills. Click below to complete your enrollment:</p>\n <p>\n <a href=\"/lms/billing/{{ doc.payment_for_document_type.split(' ')[-1].lower() }}/{{ doc.payment_for_document }}\">\ud83d\udc49 Complete Your Enrollment</a>\n </p>\n <p>If you have any questions or need assistance, feel free to reach out to our support team.</p>\n <p>Looking forward to seeing you enrolled!</p>\n</div>",
"message_type": "HTML",
"minutes_offset": 0,
"modified": "2025-02-11 10:36:05.671626",
"modified_by": "sayali@frappe.io",
"module": "LMS",
"name": "Payment Completion Reminder",
"owner": "sayali@frappe.io",
"recipients": [
{
"receiver_by_document_field": "member"
},
{
"cc": "",
"receiver_by_role": "Moderator"
}
],
"send_system_notification": 0,
"send_to_all_assignees": 0,
"subject": " Complete Your Enrollment - Don't miss out!"
}

View File

@@ -1 +0,0 @@
<p>Add your message here</p>

View File

@@ -1,6 +0,0 @@
import frappe
def get_context(context):
# do your magic here
pass

View File

@@ -1,11 +0,0 @@
Hi {{ doc.member_name }},
We noticed that you started enrolling in the {{ doc.payment_for_document_type.split(" ")[-1] }} {{ frappe.db.get_value(doc.payment_for_document_type, doc.payment_for_document, "title") }} but didnt complete your payment. We have limited number of seats and they won't be empty for long.
Dont miss this opportunity to enhance your skills. Click below to complete your enrollment now:
[👉 Complete Your Enrollment](/lms/billing/{{ doc.payment_for_document_type.split(" ")[-1].lower()/doc.payment_for_document }})
If you have any questions or need assistance, feel free to reach out to our support team.
Looking forward to seeing you enrolled!

View File

@@ -1434,7 +1434,7 @@ def get_batch_students(batch):
""" Iterate through courses and track their progress """ """ Iterate through courses and track their progress """
for course in batch_courses: for course in batch_courses:
progress = frappe.db.get_value( progress = frappe.db.get_value(
"LMS Enrollment", {"course": course.course, "member": student.student}, "progress" "LMS Enrollment", {"course": course.course, "member": student.member}, "progress"
) )
detail.courses[course.title] = progress detail.courses[course.title] = progress
if progress == 100: if progress == 100:
@@ -1445,11 +1445,12 @@ def get_batch_students(batch):
title = frappe.db.get_value( title = frappe.db.get_value(
assessment.assessment_type, assessment.assessment_name, "title" assessment.assessment_type, assessment.assessment_name, "title"
) )
status = has_submitted_assessment( assessment_info = has_submitted_assessment(
assessment.assessment_name, assessment.assessment_type, student.student assessment.assessment_name, assessment.assessment_type, student.member
) )
detail.assessments[title] = status detail.assessments[title] = assessment_info
if status not in ["Not Attempted", 0]:
if assessment_info.result == "Passed":
assessments_completed += 1 assessments_completed += 1
detail.courses_completed = courses_completed detail.courses_completed = courses_completed
@@ -1493,9 +1494,28 @@ def has_submitted_assessment(assessment, assessment_type, member=None):
attempt = frappe.db.exists(doctype, filters) attempt = frappe.db.exists(doctype, filters)
if attempt: if attempt:
attempt_details = frappe.db.get_value(doctype, filters, fields) attempt_details = frappe.db.get_value(doctype, filters, fields)
return attempt_details 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"
else:
result = attempt_details
return frappe._dict(
{
"status": attempt_details,
"result": result,
}
)
else: else:
return not_attempted return frappe._dict(
{
"status": not_attempted,
"result": "Failed",
}
)
@frappe.whitelist() @frappe.whitelist()

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:08\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr ""
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "" msgstr ""
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr ""
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr ""
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "" msgstr ""
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-02-09 16:12\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Bosnian\n" "Language-Team: Bosnian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Svi podnesci"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "" msgstr ""
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr ""
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr ""
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "" msgstr ""
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "Kursevi su uspješno izbrisani" msgstr "Kursevi su uspješno izbrisani"
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165
@@ -5193,7 +5199,7 @@ msgstr ""
#: lms/lms/doctype/evaluator_schedule/evaluator_schedule.json #: lms/lms/doctype/evaluator_schedule/evaluator_schedule.json
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json #: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
msgid "Thursday" msgid "Thursday"
msgstr "" msgstr "Četvrtak"
#. Label of the time (Time) field in DocType 'LMS Live Class' #. Label of the time (Time) field in DocType 'LMS Live Class'
#: frontend/src/components/Modals/Event.vue:48 #: frontend/src/components/Modals/Event.vue:48

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: German\n" "Language-Team: German\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Alle Einsendungen"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "Alle Fragen sollten die gleiche Punktzahl haben, wenn das Limit festgelegt ist." msgstr "Alle Fragen sollten die gleiche Punktzahl haben, wenn das Limit festgelegt ist."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "Kursinhalt"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "Abgeschlossene Kurse"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "Betreute Kurse" msgstr "Betreute Kurse"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Esperanto\n" "Language-Team: Esperanto\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "crwdns149254:0crwdne149254:0"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "crwdns149256:0crwdne149256:0" msgstr "crwdns149256:0crwdne149256:0"
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr "crwdns152392:0crwdne152392:0"
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "crwdns149562:0crwdne149562:0"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "crwdns149600:0crwdne149600:0"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "crwdns149602:0crwdne149602:0" msgstr "crwdns149602:0crwdne149602:0"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "crwdns149604:0crwdne149604:0" msgstr "crwdns149604:0crwdne149604:0"
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "crwdns150766:0{0}crwdne150766:0" msgstr "crwdns150766:0{0}crwdne150766:0"
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:08\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Todas las entregas"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "Todas las preguntas deberían tener las mismas marcas si el límite está establecido." msgstr "Todas las preguntas deberían tener las mismas marcas si el límite está establecido."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "Contenido del curso"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "Cursos completados"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "Cursos Mentorados" msgstr "Cursos Mentorados"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "Cursos eliminados correctamente" msgstr "Cursos eliminados correctamente"
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "Enviado {0}" msgstr "Enviado {0}"
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-02-08 16:11\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Persian\n" "Language-Team: Persian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "همه موارد ارسالی"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "در صورت تعیین حد مجاز، همه سؤالات باید نمرات یکسانی داشته باشند." msgstr "در صورت تعیین حد مجاز، همه سؤالات باید نمرات یکسانی داشته باشند."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "محتوای دوره"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "دوره‌های گذرانده شده"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "" msgstr ""
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:08\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: French\n" "Language-Team: French\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Tous les envois"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "Toutes les questions doivent avoir les mêmes notes si la limite est fixée." msgstr "Toutes les questions doivent avoir les mêmes notes si la limite est fixée."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "Contenu du cours"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "Cours terminés"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "Cours encadrés" msgstr "Cours encadrés"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Hungarian\n" "Language-Team: Hungarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr ""
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "" msgstr ""
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr ""
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr ""
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "" msgstr ""
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr ""
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "" msgstr ""
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr ""
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr ""
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "" msgstr ""
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Russian\n" "Language-Team: Russian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Все заявки"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "Если установлен лимит, все вопросы должны иметь одинаковые баллы." msgstr "Если установлен лимит, все вопросы должны иметь одинаковые баллы."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "Содержание курса"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "Курсов завершено"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "Курсы с наставником" msgstr "Курсы с наставником"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "Отправлено {0}" msgstr "Отправлено {0}"
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-02-09 16:12\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Swedish\n" "Language-Team: Swedish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Alla Godkännande"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "Alla frågor ska ha samma märken om gräns är angiven." msgstr "Alla frågor ska ha samma märken om gräns är angiven."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr "Tillåt Gäst Åtkomst"
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr "Kursinnehåll"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "Klara Kurser"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "Kurser Mentorerade" msgstr "Kurser Mentorerade"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "Kurser borttagna" msgstr "Kurser borttagna"
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "Inskickad {0}" msgstr "Inskickad {0}"
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Turkish\n" "Language-Team: Turkish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr "Tüm Gönderiler"
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "Eğer bir sınır konulmuşsa tüm soruların puanları aynı olmalıdır." msgstr "Eğer bir sınır konulmuşsa tüm soruların puanları aynı olmalıdır."
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -523,7 +528,7 @@ msgstr "Rozet Resmi"
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json #: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
#: lms/lms/doctype/lms_live_class/lms_live_class.json #: lms/lms/doctype/lms_live_class/lms_live_class.json
msgid "Batch" msgid "Batch"
msgstr "Toplu İşlem" msgstr "Parti"
#. Label of the batch_confirmation_template (Link) field in DocType 'LMS #. Label of the batch_confirmation_template (Link) field in DocType 'LMS
#. Settings' #. Settings'
@@ -1214,6 +1219,7 @@ msgstr "Kurs İçeriği"
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr "Tamamlanan Kurslar"
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "Mentorluk Yapılan Kurslar" msgstr "Mentorluk Yapılan Kurslar"
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "Kurslar başarıyla silindi" msgstr "Kurslar başarıyla silindi"
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "Kaydedildi {0}" msgstr "Kaydedildi {0}"
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: jannat@frappe.io\n" "Report-Msgid-Bugs-To: jannat@frappe.io\n"
"POT-Creation-Date: 2025-01-24 16:04+0000\n" "POT-Creation-Date: 2025-02-07 16:03+0000\n"
"PO-Revision-Date: 2025-01-28 12:17\n" "PO-Revision-Date: 2025-02-10 16:09\n"
"Last-Translator: jannat@frappe.io\n" "Last-Translator: jannat@frappe.io\n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -240,6 +240,11 @@ msgstr ""
msgid "All questions should have the same marks if the limit is set." msgid "All questions should have the same marks if the limit is set."
msgstr "" msgstr ""
#. Label of the allow_guest_access (Check) field in DocType 'LMS Settings'
#: lms/lms/doctype/lms_settings/lms_settings.json
msgid "Allow Guest Access"
msgstr ""
#. Label of the allow_posting (Check) field in DocType 'Job Settings' #. Label of the allow_posting (Check) field in DocType 'Job Settings'
#: lms/job/doctype/job_settings/job_settings.json #: lms/job/doctype/job_settings/job_settings.json
msgid "Allow Job Posting From Website" msgid "Allow Job Posting From Website"
@@ -1214,6 +1219,7 @@ msgstr ""
#. Name of a role #. Name of a role
#: frontend/src/pages/ProfileRoles.vue:16 #: frontend/src/pages/ProfileRoles.vue:16
#: lms/lms/doctype/course_chapter/course_chapter.json
#: lms/lms/doctype/lms_course/lms_course.json #: lms/lms/doctype/lms_course/lms_course.json
#: lms/lms/doctype/lms_program/lms_program.json #: lms/lms/doctype/lms_program/lms_program.json
#: lms/lms/doctype/lms_question/lms_question.json #: lms/lms/doctype/lms_question/lms_question.json
@@ -1340,7 +1346,7 @@ msgstr ""
msgid "Courses Mentored" msgid "Courses Mentored"
msgstr "" msgstr ""
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
msgid "Courses deleted successfully" msgid "Courses deleted successfully"
msgstr "" msgstr ""
@@ -4917,7 +4923,7 @@ msgid "Submitted {0}"
msgstr "" msgstr ""
#: frontend/src/components/Assignment.vue:316 #: frontend/src/components/Assignment.vue:316
#: frontend/src/components/BatchCourses.vue:150 #: frontend/src/components/BatchCourses.vue:151
#: frontend/src/components/BatchOverlay.vue:135 #: frontend/src/components/BatchOverlay.vue:135
#: frontend/src/components/BatchStudents.vue:302 #: frontend/src/components/BatchStudents.vue:302
#: frontend/src/components/CourseCardOverlay.vue:165 #: frontend/src/components/CourseCardOverlay.vue:165

View File

@@ -98,4 +98,5 @@ lms.patches.v2_0.update_desk_access_for_lms_roles
lms.patches.v2_0.update_quiz_submission_data lms.patches.v2_0.update_quiz_submission_data
lms.patches.v2_0.convert_quiz_duration_to_minutes lms.patches.v2_0.convert_quiz_duration_to_minutes
lms.patches.v2_0.allow_guest_access #05-02-2025 lms.patches.v2_0.allow_guest_access #05-02-2025
lms.patches.v2_0.migrate_batch_student_data #10-02-2025 lms.patches.v2_0.migrate_batch_student_data #10-02-2025
lms.patches.v2_0.delete_old_enrollment_doctypes

View File

@@ -0,0 +1,6 @@
import frappe
def execute():
frappe.delete_doc("DocType", "Batch Student")
frappe.delete_doc("Notification", "Payment Completion Reminder")

View File

@@ -0,0 +1,19 @@
<div>
<p>{{ _('Hi') }} {{ billing_name }},</p>
<p>{{ _('We noticed that you started enrolling in the') }} {{ type }} {{ title }} {{ _('but didnt complete your payment') }}.</p>
<p>
{{ _("We have a limited number of seats, and they won't be available for long!")}}
</p>
<p>
{{ _("Dont miss this opportunity to enhance your skills. Click below to complete your enrollment") }}:
</p>
<p>
<a href="{{ link }}">👉 Complete Your Enrollment</a>
</p>
<p>
{{ _("If you have any questions or need assistance, feel free to reach out to our support team.") }}
</p>
<p>
{{ __("Looking forward to seeing you enrolled!") }}
</p>
</div>

View File

@@ -2,7 +2,7 @@
"name": "frappe_lms", "name": "frappe_lms",
"version": "1.0.0", "version": "1.0.0",
"description": "Easy to use, open-source, Learning Management System", "description": "Easy to use, open-source, Learning Management System",
"workspaces": [ "workspaces1": [
"frappe-ui", "frappe-ui",
"frontend" "frontend"
], ],