chore: resolved conflicts
This commit is contained in:
@@ -291,7 +291,7 @@ const deleteStudents = createResource({
|
||||
url: 'lms.lms.api.delete_documents',
|
||||
makeParams(values) {
|
||||
return {
|
||||
doctype: 'Batch Student',
|
||||
doctype: 'LMS Batch Enrollment',
|
||||
documents: values.students,
|
||||
}
|
||||
},
|
||||
|
||||
@@ -46,11 +46,9 @@ const studentResource = createResource({
|
||||
makeParams(values) {
|
||||
return {
|
||||
doc: {
|
||||
doctype: 'Batch Student',
|
||||
parent: props.batch,
|
||||
parenttype: 'LMS Batch',
|
||||
parentfield: 'students',
|
||||
student: student.value,
|
||||
doctype: 'LMS Batch Enrollment',
|
||||
batch: props.batch,
|
||||
member: student.value,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<div class="border-r">
|
||||
<Tabs
|
||||
v-model="tabIndex"
|
||||
as="div"
|
||||
:tabs="tabs"
|
||||
tablistClass="overflow-y-hidden bg-surface-white"
|
||||
>
|
||||
@@ -54,7 +55,7 @@
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ tab }">
|
||||
<template #tab-panel="{ tab }">
|
||||
<div class="pt-5 px-5 pb-10">
|
||||
<div v-if="tab.label == 'Courses'">
|
||||
<BatchCourses :batch="batch.data.name" />
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
<div class="">
|
||||
<Tabs
|
||||
v-if="hasCourses"
|
||||
as="div"
|
||||
v-model="tabIndex"
|
||||
tablistClass="overflow-x-visible flex-wrap !gap-3 md:flex-nowrap"
|
||||
:tabs="makeTabs"
|
||||
@@ -71,7 +72,7 @@
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ tab }">
|
||||
<template #tab-panel="{ tab }">
|
||||
<div
|
||||
v-if="tab.courses && tab.courses.value.length"
|
||||
class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 gap-7 my-5 mx-5"
|
||||
|
||||
@@ -14,6 +14,9 @@ export default defineConfig({
|
||||
},
|
||||
}),
|
||||
],
|
||||
server: {
|
||||
allowedHosts: ['fs'],
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': path.resolve(__dirname, 'src'),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -220,7 +220,7 @@ def validate_billing_access(type, name):
|
||||
|
||||
else:
|
||||
membership = frappe.db.exists(
|
||||
"Batch Student", {"student": frappe.session.user, "parent": name}
|
||||
"LMS Batch Enrollment", {"member": frappe.session.user, "batch": name}
|
||||
)
|
||||
if membership:
|
||||
access = False
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2023-10-26 16:52:04.266693",
|
||||
"modified": "2023-10-26 16:52:04.266694",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Batch Student",
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
"batch_details",
|
||||
"batch_details_raw",
|
||||
"section_break_jgji",
|
||||
"students",
|
||||
"courses",
|
||||
"assessment_tab",
|
||||
"assessment",
|
||||
@@ -86,12 +85,6 @@
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "students",
|
||||
"fieldtype": "Table",
|
||||
"label": "Students",
|
||||
"options": "Batch Student"
|
||||
},
|
||||
{
|
||||
"fieldname": "courses",
|
||||
"fieldtype": "Table",
|
||||
@@ -328,8 +321,13 @@
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2025-01-17 10:23:10.580311",
|
||||
"links": [
|
||||
{
|
||||
"link_doctype": "LMS Batch Enrollment",
|
||||
"link_fieldname": "batch"
|
||||
}
|
||||
],
|
||||
"modified": "2025-02-10 12:01:22.476325",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Batch",
|
||||
|
||||
@@ -8,7 +8,7 @@ import json
|
||||
from frappe import _
|
||||
from datetime import timedelta
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils import cint, format_date, format_datetime, get_time, getdate, add_days
|
||||
from frappe.utils import cint, format_datetime, get_time
|
||||
from lms.lms.utils import (
|
||||
get_lessons,
|
||||
get_lesson_index,
|
||||
@@ -18,7 +18,6 @@ from lms.lms.utils import (
|
||||
update_payment_record,
|
||||
generate_slug,
|
||||
)
|
||||
from frappe.email.doctype.email_template.email_template import get_email_template
|
||||
|
||||
|
||||
class LMSBatch(Document):
|
||||
@@ -27,15 +26,12 @@ class LMSBatch(Document):
|
||||
self.validate_seats_left()
|
||||
self.validate_batch_end_date()
|
||||
self.validate_duplicate_courses()
|
||||
self.validate_duplicate_students()
|
||||
self.validate_payments_app()
|
||||
self.validate_amount_and_currency()
|
||||
self.validate_duplicate_assessments()
|
||||
self.validate_membership()
|
||||
self.validate_timetable()
|
||||
self.send_confirmation_mail()
|
||||
self.validate_evaluation_end_date()
|
||||
self.add_students_to_live_class()
|
||||
|
||||
def autoname(self):
|
||||
if not self.name:
|
||||
@@ -91,86 +87,24 @@ class LMSBatch(Document):
|
||||
if self.evaluation_end_date and self.evaluation_end_date < self.end_date:
|
||||
frappe.throw(_("Evaluation end date cannot be less than the batch end date."))
|
||||
|
||||
def send_confirmation_mail(self):
|
||||
for student in self.students:
|
||||
outgoing_email_account = frappe.get_cached_value(
|
||||
"Email Account", {"default_outgoing": 1, "enable_outgoing": 1}, "name"
|
||||
)
|
||||
if (
|
||||
not student.confirmation_email_sent
|
||||
and getdate(student.creation) >= add_days(getdate(), -2)
|
||||
and (outgoing_email_account or frappe.conf.get("mail_login"))
|
||||
):
|
||||
self.send_mail(student)
|
||||
student.confirmation_email_sent = 1
|
||||
|
||||
def send_mail(self, student):
|
||||
subject = _("Enrollment Confirmation for the Next Training Batch")
|
||||
template = "batch_confirmation"
|
||||
custom_template = frappe.db.get_single_value(
|
||||
"LMS Settings", "batch_confirmation_template"
|
||||
)
|
||||
|
||||
args = {
|
||||
"title": self.title,
|
||||
"student_name": student.student_name,
|
||||
"start_time": self.start_time,
|
||||
"start_date": self.start_date,
|
||||
"medium": self.medium,
|
||||
"name": self.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=student.student,
|
||||
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 validate_membership(self):
|
||||
members = frappe.get_all(
|
||||
"LMS Batch Enrollment", filters={"batch": self.name}, pluck=["member"]
|
||||
)
|
||||
for course in self.courses:
|
||||
for student in self.students:
|
||||
filters = {
|
||||
"doctype": "LMS Enrollment",
|
||||
"member": student.student,
|
||||
"course": course.course,
|
||||
}
|
||||
if not frappe.db.exists(filters):
|
||||
frappe.get_doc(filters).save()
|
||||
for member in members:
|
||||
if not frappe.db.exists(
|
||||
"LMS Enrollment", {"course": course.course, "member": member}
|
||||
):
|
||||
enrollment = frappe.new_doc("LMS Enrollment")
|
||||
enrollment.course = course.course
|
||||
enrollment.member = member
|
||||
enrollment.save()
|
||||
|
||||
def validate_seats_left(self):
|
||||
if cint(self.seat_count) < len(self.students):
|
||||
frappe.throw(_("There are no seats available in this batch."))
|
||||
|
||||
def add_students_to_live_class(self):
|
||||
for student in self.students:
|
||||
if student.is_new():
|
||||
live_classes = frappe.get_all(
|
||||
"LMS Live Class", {"batch_name": self.name}, ["name", "event"]
|
||||
)
|
||||
|
||||
for live_class in live_classes:
|
||||
if live_class.event:
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "Event Participants",
|
||||
"reference_doctype": "User",
|
||||
"reference_docname": student.student,
|
||||
"email": student.student,
|
||||
"parent": live_class.event,
|
||||
"parenttype": "Event",
|
||||
"parentfield": "event_participants",
|
||||
}
|
||||
).save()
|
||||
|
||||
def validate_timetable(self):
|
||||
for schedule in self.timetable:
|
||||
if schedule.start_time and schedule.end_time:
|
||||
|
||||
0
lms/lms/doctype/lms_batch_enrollment/__init__.py
Normal file
0
lms/lms/doctype/lms_batch_enrollment/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2025, Frappe and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("LMS Batch Enrollment", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
||||
121
lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.json
Normal file
121
lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.json
Normal file
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2025-02-10 11:17:12.462368",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"member",
|
||||
"member_name",
|
||||
"member_username",
|
||||
"column_break_sjzm",
|
||||
"batch",
|
||||
"payment",
|
||||
"source",
|
||||
"confirmation_email_sent"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "member",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Member",
|
||||
"options": "User",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fetch_from": "member.full_name",
|
||||
"fieldname": "member_name",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Member Name"
|
||||
},
|
||||
{
|
||||
"fetch_from": "member.username",
|
||||
"fieldname": "member_username",
|
||||
"fieldtype": "Data",
|
||||
"label": "Member Username"
|
||||
},
|
||||
{
|
||||
"fieldname": "payment",
|
||||
"fieldtype": "Link",
|
||||
"in_standard_filter": 1,
|
||||
"label": "Payment",
|
||||
"options": "LMS Payment"
|
||||
},
|
||||
{
|
||||
"fieldname": "source",
|
||||
"fieldtype": "Link",
|
||||
"in_standard_filter": 1,
|
||||
"label": "Source",
|
||||
"options": "LMS Source"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "confirmation_email_sent",
|
||||
"fieldtype": "Check",
|
||||
"label": "Confirmation Email Sent"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_sjzm",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "batch",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Batch",
|
||||
"options": "LMS Batch",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2025-02-10 16:06:48.720780",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Batch Enrollment",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Moderator",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "LMS Student",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
104
lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py
Normal file
104
lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.py
Normal file
@@ -0,0 +1,104 @@
|
||||
# Copyright (c) 2025, Frappe and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
from frappe.email.doctype.email_template.email_template import get_email_template
|
||||
|
||||
|
||||
class LMSBatchEnrollment(Document):
|
||||
def after_insert(self):
|
||||
self.send_confirmation_email()
|
||||
self.add_member_to_live_class()
|
||||
|
||||
def validate(self):
|
||||
self.validate_duplicate_members()
|
||||
self.validate_course_enrollment()
|
||||
|
||||
def validate_duplicate_members(self):
|
||||
if frappe.db.exists(
|
||||
"LMS Batch Enrollment", {"batch": self.batch, "member": self.member}
|
||||
):
|
||||
frappe.throw(_("Member already enrolled in this batch"))
|
||||
|
||||
def validate_course_enrollment(self):
|
||||
courses = frappe.get_all(
|
||||
"Batch Course", filters={"parent": self.batch}, fields=["course"]
|
||||
)
|
||||
|
||||
for course in courses:
|
||||
if not frappe.db.exists(
|
||||
"LMS Enrollment",
|
||||
{"course": course.course, "member": self.member},
|
||||
):
|
||||
enrollment = frappe.new_doc("LMS Enrollment")
|
||||
enrollment.course = course.course
|
||||
enrollment.member = self.member
|
||||
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):
|
||||
live_classes = frappe.get_all(
|
||||
"LMS Live Class", {"batch_name": self.batch}, ["name", "event"]
|
||||
)
|
||||
|
||||
for live_class in live_classes:
|
||||
if live_class.event:
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "Event Participants",
|
||||
"reference_doctype": "User",
|
||||
"reference_docname": self.member,
|
||||
"email": self.member,
|
||||
"parent": live_class.event,
|
||||
"parenttype": "Event",
|
||||
"parentfield": "event_participants",
|
||||
}
|
||||
).save()
|
||||
@@ -0,0 +1,30 @@
|
||||
# Copyright (c) 2025, Frappe and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests import IntegrationTestCase, UnitTestCase
|
||||
|
||||
|
||||
# On IntegrationTestCase, the doctype test records and all
|
||||
# link-field test record dependencies are recursively loaded
|
||||
# Use these module variables to add/remove to/from that list
|
||||
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
|
||||
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
|
||||
|
||||
|
||||
class UnitTestLMSBatchEnrollment(UnitTestCase):
|
||||
"""
|
||||
Unit tests for LMSBatchEnrollment.
|
||||
Use this class for testing individual functions and methods.
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class IntegrationTestLMSBatchEnrollment(IntegrationTestCase):
|
||||
"""
|
||||
Integration tests for LMSBatchEnrollment.
|
||||
Use this class for testing interactions between multiple components.
|
||||
"""
|
||||
|
||||
pass
|
||||
@@ -30,12 +30,11 @@ class LMSLiveClass(Document):
|
||||
}
|
||||
)
|
||||
event.save()
|
||||
|
||||
return event
|
||||
|
||||
def add_event_participants(self, event, calendar):
|
||||
participants = frappe.get_all(
|
||||
"Batch Student", {"parent": self.batch_name}, pluck="student"
|
||||
"LMS Batch Enrollment", {"batch": self.batch_name}, pluck="member"
|
||||
)
|
||||
|
||||
participants.append(frappe.session.user)
|
||||
|
||||
@@ -1227,8 +1227,9 @@ def get_batch_details(batch):
|
||||
"Batch Course", filters={"parent": batch}, fields=["course", "title", "evaluator"]
|
||||
)
|
||||
batch_details.students = frappe.get_all(
|
||||
"Batch Student", {"parent": batch}, pluck="student"
|
||||
"LMS Batch Enrollment", {"batch": batch}, pluck="member"
|
||||
)
|
||||
|
||||
if batch_details.paid_batch and batch_details.start_date >= getdate():
|
||||
batch_details.amount, batch_details.currency = check_multicurrency(
|
||||
batch_details.amount, batch_details.currency, None, batch_details.amount_usd
|
||||
@@ -1258,7 +1259,7 @@ def categorize_batches(batches):
|
||||
|
||||
if frappe.session.user != "Guest":
|
||||
if frappe.db.exists(
|
||||
"Batch Student", {"student": frappe.session.user, "parent": batch.name}
|
||||
"LMS Batch Enrollment", {"member": frappe.session.user, "batch": batch.name}
|
||||
):
|
||||
enrolled.append(batch)
|
||||
|
||||
@@ -1406,7 +1407,7 @@ def get_quiz_details(assessment, member):
|
||||
def get_batch_students(batch):
|
||||
students = []
|
||||
students_list = frappe.get_all(
|
||||
"Batch Student", filters={"parent": batch}, fields=["student", "name"]
|
||||
"LMS Batch Enrollment", filters={"batch": batch}, fields=["member", "name"]
|
||||
)
|
||||
|
||||
batch_courses = frappe.get_all("Batch Course", {"parent": batch}, ["course", "title"])
|
||||
@@ -1421,7 +1422,7 @@ def get_batch_students(batch):
|
||||
assessments_completed = 0
|
||||
detail = frappe.db.get_value(
|
||||
"User",
|
||||
student.student,
|
||||
student.member,
|
||||
["full_name", "email", "username", "last_active", "user_image"],
|
||||
as_dict=True,
|
||||
)
|
||||
@@ -1715,19 +1716,22 @@ def enroll_in_course(payment_name, course):
|
||||
@frappe.whitelist()
|
||||
def enroll_in_batch(batch, payment_name=None):
|
||||
if not frappe.db.exists(
|
||||
"Batch Student", {"parent": batch, "student": frappe.session.user}
|
||||
"LMS Batch Enrollment", {"batch": batch, "member": frappe.session.user}
|
||||
):
|
||||
batch_doc = frappe.get_doc("LMS Batch", batch)
|
||||
if batch_doc.seat_count and len(batch_doc.students) >= batch_doc.seat_count:
|
||||
batch_doc = frappe.db.get_value(
|
||||
"LMS Batch", batch, ["name", "seat_count"], as_dict=True
|
||||
)
|
||||
students = frappe.db.count("LMS Batch Enrollment", {"batch": batch})
|
||||
if batch_doc.seat_count and students >= batch_doc.seat_count:
|
||||
frappe.throw(_("The batch is full. Please contact the Administrator."))
|
||||
|
||||
new_student = {
|
||||
"student": frappe.session.user,
|
||||
"parent": batch,
|
||||
"parenttype": "LMS Batch",
|
||||
"parentfield": "students",
|
||||
"idx": len(batch_doc.students) + 1,
|
||||
}
|
||||
new_student = frappe.new_doc("LMS Batch Enrollment")
|
||||
new_student.update(
|
||||
{
|
||||
"member": frappe.session.user,
|
||||
"batch": batch,
|
||||
}
|
||||
)
|
||||
|
||||
if payment_name:
|
||||
payment = frappe.db.get_value(
|
||||
@@ -1739,9 +1743,7 @@ def enroll_in_batch(batch, payment_name=None):
|
||||
"source": payment.source,
|
||||
}
|
||||
)
|
||||
|
||||
batch_doc.append("students", new_student)
|
||||
batch_doc.save(ignore_permissions=True)
|
||||
new_student.save()
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@@ -1839,7 +1841,7 @@ def get_batches(filters=None, start=0, page_length=20, order_by="start_date"):
|
||||
|
||||
if filters.get("enrolled"):
|
||||
enrolled_batches = frappe.get_all(
|
||||
"Batch Student", {"student": frappe.session.user}, pluck="parent"
|
||||
"LMS Batch Enrollment", {"member": frappe.session.user}, pluck="batch"
|
||||
)
|
||||
filters.update({"name": ["in", enrolled_batches]})
|
||||
del filters["enrolled"]
|
||||
@@ -1911,7 +1913,7 @@ def get_batch_type(filters):
|
||||
def get_batch_card_details(batches):
|
||||
for batch in batches:
|
||||
batch.instructors = get_instructors(batch.name)
|
||||
students_count = frappe.db.count("Batch Student", {"parent": batch.name})
|
||||
students_count = frappe.db.count("LMS Batch Enrollment", {"batch": batch.name})
|
||||
|
||||
if batch.seat_count:
|
||||
batch.seats_left = batch.seat_count - students_count
|
||||
|
||||
184
lms/locale/bs.po
184
lms/locale/bs.po
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2025-01-24 16:04+0000\n"
|
||||
"PO-Revision-Date: 2025-02-05 15:57\n"
|
||||
"PO-Revision-Date: 2025-02-09 16:12\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Bosnian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -77,7 +77,7 @@ msgstr "O"
|
||||
|
||||
#: frontend/src/pages/Batch.vue:96
|
||||
msgid "About this batch"
|
||||
msgstr ""
|
||||
msgstr "O ovoj Grupi"
|
||||
|
||||
#. Label of the verify_terms (Check) field in DocType 'User'
|
||||
#: lms/fixtures/custom_field.json
|
||||
@@ -145,7 +145,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/BatchCourseModal.vue:5
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
msgstr "Doda Kurs"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
@@ -230,7 +230,7 @@ msgstr "Svi Kursevi"
|
||||
|
||||
#: frontend/src/components/BatchFeedback.vue:51
|
||||
msgid "All Feedback"
|
||||
msgstr ""
|
||||
msgstr "Sve Povratne Informacije"
|
||||
|
||||
#: lms/templates/quiz/quiz.html:141
|
||||
msgid "All Submissions"
|
||||
@@ -248,16 +248,16 @@ msgstr ""
|
||||
#. Label of the allow_self_enrollment (Check) field in DocType 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
msgid "Allow Self Enrollment"
|
||||
msgstr ""
|
||||
msgstr "Dozvoli Samostalnu Registraciju"
|
||||
|
||||
#. Label of the allow_future (Check) field in DocType 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
msgid "Allow accessing future dates"
|
||||
msgstr ""
|
||||
msgstr "Dozvoli Pristup Budućim Datumima"
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:33
|
||||
msgid "Allow self enrollment"
|
||||
msgstr ""
|
||||
msgstr "Dozvoli Samostalnu Registraciju"
|
||||
|
||||
#: lms/overrides/user.py:199
|
||||
msgid "Already Registered"
|
||||
@@ -293,7 +293,7 @@ msgstr "Polje Iznosa"
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:75
|
||||
msgid "Amount and currency are required for paid batches."
|
||||
msgstr ""
|
||||
msgstr "Iznos i Valuta su obavezni za plaćene grupe."
|
||||
|
||||
#: lms/lms/doctype/lms_course/lms_course.py:57
|
||||
msgid "Amount and currency are required for paid courses."
|
||||
@@ -328,7 +328,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:59 frontend/src/pages/BatchForm.vue:77
|
||||
msgid "Appears when the batch URL is shared on any online platform"
|
||||
msgstr ""
|
||||
msgstr "Pojavljuje se kada se grupni URL dijeli na bilo kojoj online platformi"
|
||||
|
||||
#: frontend/src/pages/JobDetail.vue:131
|
||||
msgid "Applications Received"
|
||||
@@ -399,7 +399,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:85
|
||||
msgid "Assessment {0} has already been added to this batch."
|
||||
msgstr ""
|
||||
msgstr "Procjena {0} je već dodana ovoj grupi."
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
@@ -491,7 +491,7 @@ msgstr "Prosječna Ocjena"
|
||||
|
||||
#: frontend/src/components/BatchFeedback.vue:38
|
||||
msgid "Average of Feedback Received"
|
||||
msgstr ""
|
||||
msgstr "Prosjek Primljenih Povratnih Informacija"
|
||||
|
||||
#: frontend/src/pages/Lesson.vue:96
|
||||
msgid "Back to Course"
|
||||
@@ -523,13 +523,13 @@ msgstr "Slika Značke"
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
#: lms/lms/doctype/lms_live_class/lms_live_class.json
|
||||
msgid "Batch"
|
||||
msgstr "Grupna Serija"
|
||||
msgstr "Šarža"
|
||||
|
||||
#. Label of the batch_confirmation_template (Link) field in DocType 'LMS
|
||||
#. Settings'
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Batch Confirmation Template"
|
||||
msgstr ""
|
||||
msgstr "Šablon Potvrde Grupe"
|
||||
|
||||
#. Name of a DocType
|
||||
#: lms/lms/doctype/batch_course/batch_course.json
|
||||
@@ -544,7 +544,7 @@ msgstr "Grupa Kreirana"
|
||||
#. Old'
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
msgid "Batch Description"
|
||||
msgstr "Opis Grupne Serije"
|
||||
msgstr "Opis Šarže"
|
||||
|
||||
#. Label of the batch_details (Text Editor) field in DocType 'LMS Batch'
|
||||
#: frontend/src/pages/BatchForm.vue:104
|
||||
@@ -552,13 +552,13 @@ msgstr "Opis Grupne Serije"
|
||||
#: lms/public/js/common_functions.js:349
|
||||
#: lms/templates/emails/batch_confirmation.html:30
|
||||
msgid "Batch Details"
|
||||
msgstr "Detalji Skupne Serije"
|
||||
msgstr "Detalji Šarže"
|
||||
|
||||
#. Label of the batch_details_raw (HTML Editor) field in DocType 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:356
|
||||
msgid "Batch Details Raw"
|
||||
msgstr ""
|
||||
msgstr "Detalji Grupe"
|
||||
|
||||
#. Name of a role
|
||||
#: lms/lms/doctype/course_evaluator/course_evaluator.json
|
||||
@@ -566,12 +566,12 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
msgid "Batch Evaluator"
|
||||
msgstr ""
|
||||
msgstr "Ocjenjivač Grupe"
|
||||
|
||||
#. Label of the batch_name (Link) field in DocType 'LMS Certificate Evaluation'
|
||||
#: lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json
|
||||
msgid "Batch Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv Grupe"
|
||||
|
||||
#. Label of the batch_old (Link) field in DocType 'Exercise Latest Submission'
|
||||
#. Label of the batch_old (Link) field in DocType 'Exercise Submission'
|
||||
@@ -580,7 +580,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
msgid "Batch Old"
|
||||
msgstr ""
|
||||
msgstr "Stara Grupa"
|
||||
|
||||
#. Label of the section_break_7 (Section Break) field in DocType 'LMS Batch
|
||||
#. Old'
|
||||
@@ -589,31 +589,31 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Batch Settings"
|
||||
msgstr ""
|
||||
msgstr "Postavke Grupe"
|
||||
|
||||
#: lms/templates/emails/batch_confirmation.html:17
|
||||
msgid "Batch Start Date:"
|
||||
msgstr ""
|
||||
msgstr "Datum Početka Grupe:"
|
||||
|
||||
#. Name of a DocType
|
||||
#: lms/lms/doctype/batch_student/batch_student.json
|
||||
msgid "Batch Student"
|
||||
msgstr ""
|
||||
msgstr "Student Grupe"
|
||||
|
||||
#. Label of the batch_title (Data) field in DocType 'LMS Certificate'
|
||||
#. Label of the batch_title (Data) field in DocType 'LMS Certificate Request'
|
||||
#: lms/lms/doctype/lms_certificate/lms_certificate.json
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
msgid "Batch Title"
|
||||
msgstr ""
|
||||
msgstr "Naziv Grupe"
|
||||
|
||||
#: lms/public/js/common_functions.js:427
|
||||
msgid "Batch Updated"
|
||||
msgstr ""
|
||||
msgstr "Grupa Ažurirana"
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:46
|
||||
msgid "Batch end date cannot be before the batch start date"
|
||||
msgstr ""
|
||||
msgstr "Datum završetka grupe ne može biti prije datuma početka grupe"
|
||||
|
||||
#. Group in LMS Course's connections
|
||||
#. Label of the batches (Check) field in DocType 'LMS Settings'
|
||||
@@ -994,7 +994,7 @@ msgstr "Kompanija"
|
||||
#: frontend/src/pages/JobCreation.vue:64
|
||||
#: lms/job/doctype/job_opportunity/job_opportunity.json
|
||||
msgid "Company Details"
|
||||
msgstr ""
|
||||
msgstr "Detalji Kompanije"
|
||||
|
||||
#. Label of the company_email_address (Data) field in DocType 'Job Opportunity'
|
||||
#: frontend/src/pages/JobCreation.vue:83
|
||||
@@ -1046,7 +1046,7 @@ msgstr "Završeno"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:345
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
msgstr "Studenti koji su Završili"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
@@ -1073,7 +1073,7 @@ msgstr ""
|
||||
#. Student'
|
||||
#: lms/lms/doctype/batch_student/batch_student.json
|
||||
msgid "Confirmation Email Sent"
|
||||
msgstr ""
|
||||
msgstr "E-pošta potvrde poslana"
|
||||
|
||||
#: lms/lms/doctype/lms_certificate/lms_certificate.py:29
|
||||
msgid "Congratulations on getting certified!"
|
||||
@@ -1194,7 +1194,7 @@ msgstr "Država"
|
||||
#: lms/lms/report/course_progress_summary/course_progress_summary.py:51
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Course"
|
||||
msgstr ""
|
||||
msgstr "Kurs"
|
||||
|
||||
#. Name of a DocType
|
||||
#. Label of the chapter (Link) field in DocType 'Course Lesson'
|
||||
@@ -1293,7 +1293,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
#: lms/lms/doctype/lms_program_course/lms_program_course.json
|
||||
msgid "Course Title"
|
||||
msgstr ""
|
||||
msgstr "Naziv Kursa"
|
||||
|
||||
#: frontend/src/pages/ProgramForm.vue:229
|
||||
msgid "Course added to program"
|
||||
@@ -1301,7 +1301,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:350
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
msgstr "Kurs je već dodan u grupu."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
@@ -1314,7 +1314,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:64
|
||||
#: lms/lms/doctype/lms_program/lms_program.py:19
|
||||
msgid "Course {0} has already been added to this batch."
|
||||
msgstr ""
|
||||
msgstr "Kurs {0} je već dodan ovoj grupi."
|
||||
|
||||
#. Label of the courses (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_courses (Check) field in DocType 'LMS Settings'
|
||||
@@ -1329,7 +1329,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Courses"
|
||||
msgstr ""
|
||||
msgstr "Kursevi"
|
||||
|
||||
#: lms/lms/web_template/lms_statistics/lms_statistics.html:14
|
||||
#: lms/templates/statistics.html:28
|
||||
@@ -1342,7 +1342,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
msgid "Courses deleted successfully"
|
||||
msgstr ""
|
||||
msgstr "Kursevi su uspješno izbrisani"
|
||||
|
||||
#. Label of the cover_image (Attach Image) field in DocType 'User'
|
||||
#: lms/fixtures/custom_field.json
|
||||
@@ -1407,7 +1407,7 @@ msgstr "Prilagođeni HTML"
|
||||
#. Label of the custom_script (Code) field in DocType 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
msgid "Custom Script (JavaScript)"
|
||||
msgstr ""
|
||||
msgstr "Prilagođena Skripta (JavaScript)"
|
||||
|
||||
#. Label of the custom_signup_content (HTML Editor) field in DocType 'LMS
|
||||
#. Settings'
|
||||
@@ -1418,7 +1418,7 @@ msgstr ""
|
||||
#. Label of the customisations_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
msgid "Customisations"
|
||||
msgstr ""
|
||||
msgstr "Prilagodbe"
|
||||
|
||||
#. Label of the show_dashboard (Check) field in DocType 'LMS Settings'
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
@@ -1447,7 +1447,7 @@ msgstr "Datum"
|
||||
#: frontend/src/pages/BatchForm.vue:118
|
||||
#: lms/lms/doctype/lms_live_class/lms_live_class.json
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
msgstr "Datum i Vrijeme"
|
||||
|
||||
#. Label of the day (Select) field in DocType 'Evaluator Schedule'
|
||||
#. Label of the day (Int) field in DocType 'LMS Batch Timetable'
|
||||
@@ -1575,7 +1575,7 @@ msgstr "Odbaci"
|
||||
#: frontend/src/pages/Batch.vue:81
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Discussions"
|
||||
msgstr ""
|
||||
msgstr "Diskusije"
|
||||
|
||||
#. Option for the 'File Type' (Select) field in DocType 'Course Lesson'
|
||||
#. Option for the 'Type' (Select) field in DocType 'LMS Assignment'
|
||||
@@ -1751,15 +1751,15 @@ msgstr ""
|
||||
#: lms/lms/doctype/scheduled_flow/scheduled_flow.json
|
||||
#: lms/public/js/common_functions.js:299
|
||||
msgid "End Time"
|
||||
msgstr ""
|
||||
msgstr "Vrijeme Završetka"
|
||||
|
||||
#: frontend/src/components/BatchOverlay.vue:80
|
||||
msgid "Enroll Now"
|
||||
msgstr ""
|
||||
msgstr "Upišite se sada"
|
||||
|
||||
#: frontend/src/pages/Batches.vue:274
|
||||
msgid "Enrolled"
|
||||
msgstr ""
|
||||
msgstr "Upisan"
|
||||
|
||||
#: frontend/src/components/CourseCard.vue:43
|
||||
#: frontend/src/components/CourseCardOverlay.vue:104
|
||||
@@ -1773,7 +1773,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:108
|
||||
msgid "Enrollment Confirmation for the Next Training Batch"
|
||||
msgstr ""
|
||||
msgstr "Potvrda upisa za sljedeću grupu obuke"
|
||||
|
||||
#: lms/lms/web_template/lms_statistics/lms_statistics.html:14
|
||||
#: lms/templates/statistics.html:20
|
||||
@@ -1843,7 +1843,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/public/js/common_functions.js:333
|
||||
msgid "Evaluation End Date"
|
||||
msgstr ""
|
||||
msgstr "Datum Yavršetka Ocjenjivanja"
|
||||
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
@@ -1852,7 +1852,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:92
|
||||
msgid "Evaluation end date cannot be less than the batch end date."
|
||||
msgstr ""
|
||||
msgstr "Datum završetka ocjenjivanja ne može biti prije od datuma završetka grupe."
|
||||
|
||||
#: frontend/src/components/Modals/Event.vue:255
|
||||
msgid "Evaluation saved successfully"
|
||||
@@ -1875,7 +1875,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
#: lms/templates/upcoming_evals.html:33
|
||||
msgid "Evaluator"
|
||||
msgstr ""
|
||||
msgstr "Ocjenjivač"
|
||||
|
||||
#. Label of the evaluator_name (Data) field in DocType 'LMS Certificate'
|
||||
#. Label of the evaluator_name (Data) field in DocType 'LMS Certificate
|
||||
@@ -1906,7 +1906,7 @@ msgstr "Događaj"
|
||||
|
||||
#: frontend/src/pages/BatchForm.vue:156
|
||||
msgid "Example: IST (+5:30)"
|
||||
msgstr ""
|
||||
msgstr "Primjer: IST (+5:30)"
|
||||
|
||||
#. Label of the exercise (Link) field in DocType 'Exercise Latest Submission'
|
||||
#. Label of the exercise (Link) field in DocType 'Exercise Submission'
|
||||
@@ -2039,7 +2039,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/widgets/CourseCard.html:114
|
||||
msgid "Free"
|
||||
msgstr "Slobodno"
|
||||
msgstr "Besplatno"
|
||||
|
||||
#. Option for the 'Type' (Select) field in DocType 'Job Opportunity'
|
||||
#: frontend/src/pages/Jobs.vue:147
|
||||
@@ -2118,7 +2118,7 @@ msgstr "Općenito"
|
||||
#: frontend/src/components/Modals/BulkCertificates.vue:5
|
||||
#: frontend/src/pages/Batch.vue:12
|
||||
msgid "Generate Certificates"
|
||||
msgstr ""
|
||||
msgstr "Generiši Certifikate"
|
||||
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.js:18
|
||||
msgid "Generate Google Meet Link"
|
||||
@@ -2184,7 +2184,7 @@ msgstr "Zdravo"
|
||||
|
||||
#: frontend/src/components/BatchFeedback.vue:11
|
||||
msgid "Help Us Improve"
|
||||
msgstr ""
|
||||
msgstr "Pomozite nam da se poboljšamo"
|
||||
|
||||
#: lms/templates/courses_created.html:15
|
||||
msgid "Help others learn something new by creating a course."
|
||||
@@ -2402,7 +2402,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch_feedback/lms_batch_feedback.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Instructors"
|
||||
msgstr ""
|
||||
msgstr "Instruktori"
|
||||
|
||||
#: lms/templates/assignment.html:17
|
||||
msgid "Instructors Comments"
|
||||
@@ -2441,7 +2441,7 @@ msgstr ""
|
||||
#. Option for the 'Membership' (Select) field in DocType 'LMS Batch Old'
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
msgid "Invite Only"
|
||||
msgstr ""
|
||||
msgstr "Samo po Pozivu"
|
||||
|
||||
#. Name of a DocType
|
||||
#: lms/lms/doctype/invite_request/invite_request.json
|
||||
@@ -2602,17 +2602,17 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_payment/lms_payment.json
|
||||
msgid "LMS Batch"
|
||||
msgstr ""
|
||||
msgstr "Grupa"
|
||||
|
||||
#. Name of a DocType
|
||||
#: lms/lms/doctype/lms_batch_feedback/lms_batch_feedback.json
|
||||
msgid "LMS Batch Feedback"
|
||||
msgstr ""
|
||||
msgstr "Povratne Informacije Grupe"
|
||||
|
||||
#. Name of a DocType
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
msgid "LMS Batch Old"
|
||||
msgstr ""
|
||||
msgstr "Stara Grupa"
|
||||
|
||||
#. Name of a DocType
|
||||
#: lms/lms/doctype/lms_batch_timetable/lms_batch_timetable.json
|
||||
@@ -2973,7 +2973,7 @@ msgstr ""
|
||||
#. Option for the 'Role' (Select) field in DocType 'Cohort Staff'
|
||||
#: lms/lms/doctype/cohort_staff/cohort_staff.json
|
||||
msgid "Manager"
|
||||
msgstr ""
|
||||
msgstr "Upravitelj"
|
||||
|
||||
#. Option for the 'User Category' (Select) field in DocType 'User'
|
||||
#: lms/fixtures/custom_field.json lms/templates/signup-form.html:24
|
||||
@@ -3617,7 +3617,7 @@ msgstr ""
|
||||
#. Label of the organization (Data) field in DocType 'Certification'
|
||||
#: lms/lms/doctype/certification/certification.json
|
||||
msgid "Organization"
|
||||
msgstr ""
|
||||
msgstr "Organizacija"
|
||||
|
||||
#: frontend/src/pages/Billing.vue:37
|
||||
msgid "Original Amount"
|
||||
@@ -3630,7 +3630,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_badge/lms_badge.js:39
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
msgstr "Odgovorni"
|
||||
|
||||
#. Label of the pan (Data) field in DocType 'LMS Payment'
|
||||
#: lms/lms/doctype/lms_payment/lms_payment.json
|
||||
@@ -4010,7 +4010,7 @@ msgstr "Prethodno"
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/public/js/common_functions.js:368
|
||||
msgid "Pricing"
|
||||
msgstr ""
|
||||
msgstr "Određivanje Cijena"
|
||||
|
||||
#. Label of the exception_country (Table MultiSelect) field in DocType 'LMS
|
||||
#. Settings'
|
||||
@@ -4349,7 +4349,7 @@ msgstr "Nastavi"
|
||||
#: lms/lms/doctype/lms_course_review/lms_course_review.json
|
||||
#: lms/lms/workspace/lms/lms.json lms/templates/reviews.html:143
|
||||
msgid "Review"
|
||||
msgstr ""
|
||||
msgstr "Recenzija"
|
||||
|
||||
#: lms/templates/reviews.html:100
|
||||
msgid "Review the course"
|
||||
@@ -4439,7 +4439,7 @@ msgstr ""
|
||||
#: frontend/src/pages/QuizForm.vue:34 frontend/src/pages/QuizSubmission.vue:14
|
||||
#: lms/public/js/common_functions.js:405
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
msgstr "Sačuvaj"
|
||||
|
||||
#. Label of the schedule (Table) field in DocType 'Course Evaluator'
|
||||
#: lms/lms/doctype/course_evaluator/course_evaluator.json
|
||||
@@ -4476,7 +4476,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:15 frontend/src/pages/Jobs.vue:38
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
msgstr "Traži"
|
||||
|
||||
#: frontend/src/pages/CertifiedParticipants.vue:17
|
||||
msgid "Search by Name"
|
||||
@@ -4683,7 +4683,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
msgid "Slug"
|
||||
msgstr ""
|
||||
msgstr "Slug"
|
||||
|
||||
#: frontend/src/components/BatchCard.vue:23
|
||||
#: frontend/src/components/BatchOverlay.vue:16
|
||||
@@ -4716,7 +4716,7 @@ msgstr ""
|
||||
#. Label of the stage (Select) field in DocType 'LMS Batch Old'
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
msgstr "Faza"
|
||||
|
||||
#: frontend/src/components/LiveClass.vue:50 frontend/src/components/Quiz.vue:67
|
||||
#: lms/templates/quiz/quiz.html:39
|
||||
@@ -4905,7 +4905,7 @@ msgstr ""
|
||||
#: lms/templates/quiz/quiz.html:128 lms/templates/reviews.html:163
|
||||
#: lms/www/new-sign-up.html:32
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Potvrdi"
|
||||
|
||||
#: frontend/src/components/Modals/JobApplicationModal.vue:23
|
||||
msgid "Submit your resume to proceed with your application for this position. Upon submission, it will be shared with the job poster."
|
||||
@@ -5031,7 +5031,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/lms_certificate/lms_certificate.json
|
||||
msgid "Template"
|
||||
msgstr ""
|
||||
msgstr "Šablon"
|
||||
|
||||
#: lms/overrides/user.py:205
|
||||
msgid "Temporarily Disabled"
|
||||
@@ -5064,7 +5064,7 @@ msgstr "Tekst"
|
||||
|
||||
#: frontend/src/components/BatchFeedback.vue:7
|
||||
msgid "Thank you for providing your feedback!"
|
||||
msgstr ""
|
||||
msgstr "Hvala vam na povratnim informacijama!"
|
||||
|
||||
#: lms/templates/emails/lms_course_interest.html:17
|
||||
#: lms/templates/emails/lms_invite_request_approved.html:15
|
||||
@@ -5075,7 +5075,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1722
|
||||
msgid "The batch is full. Please contact the Administrator."
|
||||
msgstr ""
|
||||
msgstr "Grupa je popunjena. Kontaktiraj Administratora."
|
||||
|
||||
#: lms/templates/emails/lms_course_interest.html:5
|
||||
msgid "The course {0} is now available on {1}."
|
||||
@@ -5099,7 +5099,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/pages/Batches.vue:77
|
||||
msgid "There are no batches matching the criteria. Keep an eye out, fresh learning experiences are on the way soon!"
|
||||
msgstr ""
|
||||
msgstr "Nema grupe koje odgovaraju kriterijumima. Pazite, nova iskustva učenja su uskoro na putu!"
|
||||
|
||||
#: frontend/src/components/CreateOutline.vue:12
|
||||
msgid "There are no chapters in this course. Create and manage chapters from here."
|
||||
@@ -5119,11 +5119,11 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.py:151
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
msgstr "Nema slobodnih mjesta u ovoj grupi."
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:177
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
msgstr "U ovoj grupi nema studenata."
|
||||
|
||||
#: frontend/src/pages/AssignmentSubmissionList.vue:70
|
||||
msgid "There are no submissions for this assignment."
|
||||
@@ -5145,7 +5145,7 @@ msgstr ""
|
||||
#. 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
msgid "These customisations will work on the main batch page."
|
||||
msgstr ""
|
||||
msgstr "Ove prilagodbe će raditi na glavnoj stranici grupe."
|
||||
|
||||
#: frontend/src/pages/Badge.vue:14
|
||||
msgid "This badge has been awarded to {0} on {1}."
|
||||
@@ -5218,7 +5218,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_timetable_template/lms_timetable_template.json
|
||||
msgid "Timetable"
|
||||
msgstr ""
|
||||
msgstr "Vremenska Tabela"
|
||||
|
||||
#. Label of the timetable_legends (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the timetable_legends (Table) field in DocType 'LMS Timetable
|
||||
@@ -5226,12 +5226,12 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_timetable_template/lms_timetable_template.json
|
||||
msgid "Timetable Legends"
|
||||
msgstr ""
|
||||
msgstr "Vremenska Legenda"
|
||||
|
||||
#. Label of the timetable_template (Link) field in DocType 'LMS Batch'
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
msgid "Timetable Template"
|
||||
msgstr ""
|
||||
msgstr "Vremenski Šablon"
|
||||
|
||||
#. Label of the timezone (Data) field in DocType 'LMS Batch'
|
||||
#. Label of the timezone (Data) field in DocType 'LMS Certificate Request'
|
||||
@@ -5242,11 +5242,11 @@ msgstr ""
|
||||
#: lms/lms/doctype/lms_certificate_request/lms_certificate_request.json
|
||||
#: lms/lms/doctype/lms_live_class/lms_live_class.json
|
||||
msgid "Timezone"
|
||||
msgstr ""
|
||||
msgstr "Vremenska Zona"
|
||||
|
||||
#: lms/templates/emails/batch_confirmation.html:25
|
||||
msgid "Timings:"
|
||||
msgstr ""
|
||||
msgstr "Vremena:"
|
||||
|
||||
#. Label of the title (Data) field in DocType 'Cohort'
|
||||
#. Label of the title (Data) field in DocType 'Cohort Subgroup'
|
||||
@@ -5291,7 +5291,7 @@ msgstr ""
|
||||
#: lms/lms/doctype/work_experience/work_experience.json
|
||||
#: lms/public/js/common_functions.js:259
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
msgstr "Naziv"
|
||||
|
||||
#: frontend/src/components/Modals/ChapterModal.vue:174
|
||||
msgid "Title is required"
|
||||
@@ -5310,7 +5310,7 @@ msgstr "Do Datuma"
|
||||
|
||||
#: lms/lms/utils.py:1584
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
msgstr "Da biste se pridružili ovoj grupi, kontaktirajte administratora."
|
||||
|
||||
#: frontend/src/components/LessonHelp.vue:49
|
||||
msgid "To upload Image, Video, Audio or PDF from your system, click on the add icon and select upload from the menu. Then choose the file you want to add to the lesson and it gets added to your lesson."
|
||||
@@ -5408,11 +5408,11 @@ msgstr ""
|
||||
#. Option for the 'Visibility' (Select) field in DocType 'LMS Batch Old'
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
msgid "Unlisted"
|
||||
msgstr ""
|
||||
msgstr "Neizlistane"
|
||||
|
||||
#: frontend/src/pages/Batches.vue:262 frontend/src/pages/Batches.vue:278
|
||||
msgid "Unpublished"
|
||||
msgstr ""
|
||||
msgstr "Neobjavljeno"
|
||||
|
||||
#: frontend/src/components/Modals/EditCoverImage.vue:60
|
||||
#: frontend/src/components/UnsplashImageBrowser.vue:54
|
||||
@@ -5435,11 +5435,11 @@ msgstr ""
|
||||
#: frontend/src/pages/CourseForm.vue:184 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
msgid "Upcoming"
|
||||
msgstr ""
|
||||
msgstr "Nadolazeći"
|
||||
|
||||
#: frontend/src/pages/Batch.vue:169
|
||||
msgid "Upcoming Batches"
|
||||
msgstr ""
|
||||
msgstr "Nadolazeće Grupe"
|
||||
|
||||
#: frontend/src/components/UpcomingEvaluations.vue:5
|
||||
#: lms/templates/upcoming_evals.html:3
|
||||
@@ -5554,11 +5554,11 @@ msgstr "Vidljivost"
|
||||
|
||||
#: frontend/src/components/BatchOverlay.vue:54
|
||||
msgid "Visit Batch"
|
||||
msgstr ""
|
||||
msgstr "Posjeti Grupu"
|
||||
|
||||
#: lms/templates/emails/batch_confirmation.html:29
|
||||
msgid "Visit the following link to view your "
|
||||
msgstr ""
|
||||
msgstr "Posjeti sljedeću vezu da vidite svoje "
|
||||
|
||||
#. Label of the internship (Table) field in DocType 'User'
|
||||
#: lms/fixtures/custom_field.json
|
||||
@@ -5567,7 +5567,7 @@ msgstr ""
|
||||
|
||||
#: lms/templates/emails/batch_confirmation.html:6
|
||||
msgid "We are pleased to inform you that you have been enrolled in our upcoming batch. Congratulations!"
|
||||
msgstr ""
|
||||
msgstr "Sa zadovoljstvom vas obavještavamo da ste upisani u našu nadolazeću grupu. Čestitamo!"
|
||||
|
||||
#. Label of the web_page (Link) field in DocType 'LMS Sidebar Item'
|
||||
#: frontend/src/components/Modals/PageModal.vue:23
|
||||
@@ -5646,7 +5646,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/api.py:227
|
||||
msgid "You are already enrolled for this batch."
|
||||
msgstr ""
|
||||
msgstr "Već ste upisani za ovu grupu."
|
||||
|
||||
#: lms/lms/api.py:219
|
||||
msgid "You are already enrolled for this course."
|
||||
@@ -5654,11 +5654,11 @@ msgstr ""
|
||||
|
||||
#: frontend/src/pages/Batch.vue:151
|
||||
msgid "You are not a member of this batch. Please checkout our upcoming batches."
|
||||
msgstr ""
|
||||
msgstr "Niste član ove grupe. Provjerite naše nadolazeće grupe."
|
||||
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.py:20
|
||||
msgid "You are not a mentor of the course {0}"
|
||||
msgstr ""
|
||||
msgstr "Niste mentor kursa {0}"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:311
|
||||
msgid "You are not enrolled"
|
||||
@@ -5728,7 +5728,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchOverlay.vue:136
|
||||
msgid "You have been enrolled in this batch"
|
||||
msgstr ""
|
||||
msgstr "Upisani ste u ovu grupu"
|
||||
|
||||
#: frontend/src/components/CourseCardOverlay.vue:166
|
||||
msgid "You have been enrolled in this course"
|
||||
@@ -5906,7 +5906,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.py:57
|
||||
msgid "{0} is already a Student of {1} course through {2} batch"
|
||||
msgstr ""
|
||||
msgstr "{0} je već Student {1} kursa kroz {2} grupu"
|
||||
|
||||
#: lms/lms/doctype/lms_course_mentor_mapping/lms_course_mentor_mapping.py:16
|
||||
msgid "{0} is already a mentor for course {1}"
|
||||
@@ -5918,7 +5918,7 @@ msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_certificate/lms_certificate.py:91
|
||||
msgid "{0} is already certified for the batch {1}"
|
||||
msgstr ""
|
||||
msgstr "{0} je već certificiran za grupu {1}"
|
||||
|
||||
#: lms/lms/doctype/lms_certificate/lms_certificate.py:72
|
||||
msgid "{0} is already certified for the course {1}"
|
||||
@@ -5934,7 +5934,7 @@ msgstr ""
|
||||
|
||||
#: lms/templates/emails/mention_template.html:2
|
||||
msgid "{0} mentioned you in a comment in your batch."
|
||||
msgstr ""
|
||||
msgstr "{0} vas je spomenuo u komentaru u vašoj grupi."
|
||||
|
||||
#: lms/lms/utils.py:635 lms/lms/utils.py:641
|
||||
msgid "{0} mentioned you in a comment in {1}"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2025-01-24 16:04+0000\n"
|
||||
"PO-Revision-Date: 2025-02-04 15:05\n"
|
||||
"PO-Revision-Date: 2025-02-08 16:11\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Persian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -111,7 +111,7 @@ msgstr "فعال"
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
#: frontend/src/pages/ProgramForm.vue:92 frontend/src/pages/ProgramForm.vue:137
|
||||
msgid "Add"
|
||||
msgstr "اضافه کردن"
|
||||
msgstr "افزودن"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:11
|
||||
#: frontend/src/components/CreateOutline.vue:18
|
||||
@@ -5095,7 +5095,7 @@ msgstr ""
|
||||
|
||||
#: lms/patches/create_mentor_request_email_templates.py:40
|
||||
msgid "The status of your application has changed."
|
||||
msgstr ""
|
||||
msgstr "وضعیت درخواست شما تغییر کرده است."
|
||||
|
||||
#: frontend/src/pages/Batches.vue:77
|
||||
msgid "There are no batches matching the criteria. Keep an eye out, fresh learning experiences are on the way soon!"
|
||||
@@ -5826,7 +5826,7 @@ msgstr "فعالیت"
|
||||
|
||||
#: lms/templates/emails/mentor_request_creation_email.html:5
|
||||
msgid "cancel your application"
|
||||
msgstr ""
|
||||
msgstr "درخواست خود را لغو کنید"
|
||||
|
||||
#: frontend/src/pages/Lesson.vue:174
|
||||
msgid "completed"
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Frappe LMS VERSION\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2025-01-31 16:04+0000\n"
|
||||
"PO-Revision-Date: 2025-01-31 16:04+0000\n"
|
||||
"POT-Creation-Date: 2025-02-07 16:03+0000\n"
|
||||
"PO-Revision-Date: 2025-02-07 16:03+0000\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: jannat@frappe.io\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -238,6 +238,11 @@ msgstr ""
|
||||
msgid "All questions should have the same marks if the limit is set."
|
||||
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'
|
||||
#: lms/job/doctype/job_settings/job_settings.json
|
||||
msgid "Allow Job Posting From Website"
|
||||
@@ -1212,6 +1217,7 @@ msgstr ""
|
||||
|
||||
#. Name of a role
|
||||
#: 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_program/lms_program.json
|
||||
#: lms/lms/doctype/lms_question/lms_question.json
|
||||
@@ -1338,7 +1344,7 @@ msgstr ""
|
||||
msgid "Courses Mentored"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchCourses.vue:151
|
||||
msgid "Courses deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4915,7 +4921,7 @@ msgid "Submitted {0}"
|
||||
msgstr ""
|
||||
|
||||
#: 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/BatchStudents.vue:302
|
||||
#: frontend/src/components/CourseCardOverlay.vue:165
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2025-01-24 16:04+0000\n"
|
||||
"PO-Revision-Date: 2025-02-05 15:57\n"
|
||||
"PO-Revision-Date: 2025-02-09 16:12\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Swedish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -4716,7 +4716,7 @@ msgstr "Personal"
|
||||
#. Label of the stage (Select) field in DocType 'LMS Batch Old'
|
||||
#: lms/lms/doctype/lms_batch_old/lms_batch_old.json
|
||||
msgid "Stage"
|
||||
msgstr "Steg"
|
||||
msgstr "Fas"
|
||||
|
||||
#: frontend/src/components/LiveClass.vue:50 frontend/src/components/Quiz.vue:67
|
||||
#: lms/templates/quiz/quiz.html:39
|
||||
|
||||
@@ -97,4 +97,5 @@ lms.patches.v2_0.delete_web_forms
|
||||
lms.patches.v2_0.update_desk_access_for_lms_roles
|
||||
lms.patches.v2_0.update_quiz_submission_data
|
||||
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
|
||||
29
lms/patches/v2_0/migrate_batch_student_data.py
Normal file
29
lms/patches/v2_0/migrate_batch_student_data.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
students = frappe.get_all(
|
||||
"Batch Student",
|
||||
fields=[
|
||||
"student",
|
||||
"student_name",
|
||||
"username",
|
||||
"payment",
|
||||
"source",
|
||||
"parent",
|
||||
"confirmation_email_sent",
|
||||
],
|
||||
)
|
||||
|
||||
for student in students:
|
||||
doc = frappe.new_doc("LMS Batch Enrollment")
|
||||
doc.member = student.student
|
||||
doc.member_name = student.student_name
|
||||
doc.member_username = student.username
|
||||
doc.payment = student.payment
|
||||
doc.source = student.source
|
||||
doc.batch = student.parent
|
||||
doc.confirmation_email_sent = student.confirmation_email_sent
|
||||
doc.save()
|
||||
|
||||
frappe.delete_doc("DocType", "Batch Student")
|
||||
Reference in New Issue
Block a user