fix: calendar background and assignment text color
This commit is contained in:
Submodule frappe-ui updated: 1c97498fb2...70bc4760e4
@@ -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",
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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) {
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -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": []
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
# Copyright (c) 2022, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
from frappe.tests import UnitTestCase
|
|
||||||
|
|
||||||
|
|
||||||
class TestBatchStudent(UnitTestCase):
|
|
||||||
pass
|
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
@@ -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,
|
||||||
|
)
|
||||||
|
|||||||
@@ -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": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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,
|
||||||
|
)
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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 didn’t complete your payment.</p>
|
|
||||||
<p>We have a limited number of seats, and they won't be available for long!</p>
|
|
||||||
<p>Don’t 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>
|
|
||||||
@@ -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!"
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<p>Add your message here</p>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def get_context(context):
|
|
||||||
# do your magic here
|
|
||||||
pass
|
|
||||||
@@ -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 didn’t complete your payment. We have limited number of seats and they won't be empty for long.
|
|
||||||
|
|
||||||
Don’t 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!
|
|
||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -99,3 +99,4 @@ 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
|
||||||
6
lms/patches/v2_0/delete_old_enrollment_doctypes.py
Normal file
6
lms/patches/v2_0/delete_old_enrollment_doctypes.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.delete_doc("DocType", "Batch Student")
|
||||||
|
frappe.delete_doc("Notification", "Payment Completion Reminder")
|
||||||
19
lms/templates/emails/payment_reminder.html
Normal file
19
lms/templates/emails/payment_reminder.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<div>
|
||||||
|
<p>{{ _('Hi') }} {{ billing_name }},</p>
|
||||||
|
<p>{{ _('We noticed that you started enrolling in the') }} {{ type }} {{ title }} {{ _('but didn’t complete your payment') }}.</p>
|
||||||
|
<p>
|
||||||
|
{{ _("We have a limited number of seats, and they won't be available for long!")}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ _("Don’t 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>
|
||||||
@@ -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"
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user