Compare commits
12 Commits
v2.17.0
...
revert-101
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cdd155f75 | ||
|
|
de8c907c51 | ||
|
|
0fd1cabd60 | ||
|
|
8dd480735c | ||
|
|
676f1a1f0e | ||
|
|
ce75422126 | ||
|
|
3a097d6b15 | ||
|
|
9de1bf1020 | ||
|
|
93e5cf1c25 | ||
|
|
6e2376570b | ||
|
|
b20c4bf197 | ||
|
|
6ae1d92033 |
@@ -1,13 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex min-h-0 flex-col text-base">
|
<div class="text-base p-4">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div>
|
<div>
|
||||||
<div class="text-xl font-semibold mb-1">
|
<div class="font-semibold mb-1">
|
||||||
{{ __(label) }}
|
{{ __(label) }}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="text-xs text-gray-600">
|
<div class="text-xs text-gray-600">
|
||||||
{{ __(description) }}
|
{{ __(description) }}
|
||||||
</div> -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex item-center space-x-2">
|
<div class="flex item-center space-x-2">
|
||||||
<FormControl
|
<FormControl
|
||||||
@@ -16,93 +16,74 @@
|
|||||||
type="text"
|
type="text"
|
||||||
:debounce="300"
|
:debounce="300"
|
||||||
/>
|
/>
|
||||||
<Button @click="() => (showForm = !showForm)">
|
<Button @click="() => (showForm = true)">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<Plus v-if="!showForm" class="h-3 w-3 stroke-1.5" />
|
<Plus class="h-3 w-3 stroke-1.5" />
|
||||||
<X v-else class="h-3 w-3 stroke-1.5" />
|
|
||||||
</template>
|
</template>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="my-4">
|
||||||
|
<!-- Form to add new member -->
|
||||||
|
<div v-if="showForm" class="flex items-center space-x-2 mb-4">
|
||||||
|
<FormControl
|
||||||
|
v-model="member.email"
|
||||||
|
:placeholder="__('Email')"
|
||||||
|
type="email"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
<FormControl
|
||||||
|
v-model="member.first_name"
|
||||||
|
:placeholder="__('First Name')"
|
||||||
|
type="test"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
<Button @click="addMember()" variant="subtle">
|
||||||
|
{{ __('Add') }}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Form to add new member -->
|
|
||||||
<div v-if="showForm" class="flex items-center space-x-2 my-4">
|
|
||||||
<FormControl
|
|
||||||
v-model="member.email"
|
|
||||||
:placeholder="__('Email')"
|
|
||||||
type="email"
|
|
||||||
class="w-full"
|
|
||||||
/>
|
|
||||||
<FormControl
|
|
||||||
v-model="member.first_name"
|
|
||||||
:placeholder="__('First Name')"
|
|
||||||
type="test"
|
|
||||||
class="w-full"
|
|
||||||
/>
|
|
||||||
<Button @click="addMember()" variant="subtle">
|
|
||||||
{{ __('Add') }}
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-2 pb-10 overflow-auto">
|
|
||||||
<!-- Member list -->
|
<!-- Member list -->
|
||||||
<div class="overflow-y-scroll">
|
|
||||||
<ul class="divide-y">
|
|
||||||
<li
|
|
||||||
v-for="member in memberList"
|
|
||||||
class="grid grid-cols-3 gap-10 py-2 cursor-pointer"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
@click="openProfile(member.username)"
|
|
||||||
class="flex items-center space-x-3 col-span-2"
|
|
||||||
>
|
|
||||||
<Avatar
|
|
||||||
:image="member.user_image"
|
|
||||||
:label="member.full_name"
|
|
||||||
size="lg"
|
|
||||||
/>
|
|
||||||
<div class="space-y-1">
|
|
||||||
<div class="flex">
|
|
||||||
<div class="text-gray-900">
|
|
||||||
{{ member.full_name }}
|
|
||||||
</div>
|
|
||||||
<div v-if="getRole(member)">
|
|
||||||
{{ getRole(member) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="text-sm text-gray-700">
|
|
||||||
{{ member.name }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex items-center justify-center text-gray-700 text-sm">
|
|
||||||
<div v-if="member.last_active">
|
|
||||||
{{ dayjs(member.last_active).format('DD MMM, YYYY HH:mm a') }}
|
|
||||||
</div>
|
|
||||||
<div v-else>-</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
v-if="memberList.length && hasNextPage"
|
v-for="member in memberList"
|
||||||
class="flex justify-center mt-4"
|
class="grid grid-cols-5 grid-flow-row py-2 cursor-pointer"
|
||||||
>
|
>
|
||||||
<Button @click="members.reload()">
|
<div
|
||||||
<template #prefix>
|
@click="openProfile(member.username)"
|
||||||
<RefreshCw class="h-3 w-3 stroke-1.5" />
|
class="flex items-center space-x-2 col-span-2"
|
||||||
</template>
|
>
|
||||||
{{ __('Load More') }}
|
<Avatar
|
||||||
</Button>
|
:image="member.user_image"
|
||||||
|
:label="member.full_name"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<div>
|
||||||
|
{{ member.full_name }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-sm text-gray-700 col-span-2">
|
||||||
|
{{ member.name }}
|
||||||
|
</div>
|
||||||
|
<div class="text-sm text-gray-700 justify-self-end">
|
||||||
|
{{ getRole(member.role) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="hasNextPage" class="flex justify-center">
|
||||||
|
<Button variant="solid" @click="members.reload()">
|
||||||
|
<template #prefix>
|
||||||
|
<RefreshCw class="h-3 w-3 stroke-1.5" />
|
||||||
|
</template>
|
||||||
|
{{ __('Load More') }}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { createResource, Avatar, Button, FormControl } from 'frappe-ui'
|
import { createResource, Avatar, Button, FormControl } from 'frappe-ui'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { ref, watch, reactive, inject } from 'vue'
|
import { ref, watch, reactive } from 'vue'
|
||||||
import { RefreshCw, Plus, X } from 'lucide-vue-next'
|
import { RefreshCw, Plus } from 'lucide-vue-next'
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const show = defineModel('show')
|
const show = defineModel('show')
|
||||||
@@ -111,7 +92,6 @@ const start = ref(0)
|
|||||||
const memberList = ref([])
|
const memberList = ref([])
|
||||||
const hasNextPage = ref(false)
|
const hasNextPage = ref(false)
|
||||||
const showForm = ref(false)
|
const showForm = ref(false)
|
||||||
const dayjs = inject('$dayjs')
|
|
||||||
|
|
||||||
const member = reactive({
|
const member = reactive({
|
||||||
email: '',
|
email: '',
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog v-model="show" :options="{ size: '4xl' }">
|
<Dialog v-model="show" :options="{ size: '3xl' }">
|
||||||
<template #body>
|
<template #body>
|
||||||
<div class="flex h-[calc(100vh_-_8rem)]">
|
<div class="flex h-[calc(100vh_-_8rem)]">
|
||||||
<div class="flex w-52 shrink-0 flex-col bg-gray-50 p-2">
|
<div class="flex w-52 shrink-0 flex-col bg-gray-50 p-2">
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="activeTab && data.doc"
|
v-if="activeTab && data.doc"
|
||||||
class="flex flex-1 flex-col px-10 pt-8"
|
class="flex flex-1 flex-col overflow-y-auto"
|
||||||
>
|
>
|
||||||
<Members
|
<Members
|
||||||
v-if="activeTab.label === 'Members'"
|
v-if="activeTab.label === 'Members'"
|
||||||
@@ -131,7 +131,7 @@ const tabs = computed(() => {
|
|||||||
{
|
{
|
||||||
label: 'Sidebar',
|
label: 'Sidebar',
|
||||||
icon: 'PanelLeftIcon',
|
icon: 'PanelLeftIcon',
|
||||||
description: 'Choose the items you want to show in the sidebar',
|
description: 'Customize the sidebar as per your needs',
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
label: 'Courses',
|
label: 'Courses',
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col justify-between h-full">
|
<div class="flex flex-col justify-between h-full p-4">
|
||||||
<div>
|
<div>
|
||||||
<div class="font-semibold mb-1">
|
<div class="font-semibold mb-1">
|
||||||
{{ __(label) }}
|
{{ __(label) }}
|
||||||
@@ -8,9 +8,9 @@
|
|||||||
{{ __(description) }}
|
{{ __(description) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between my-5">
|
<div class="flex space-x-8 my-5">
|
||||||
<div v-for="(column, index) in columns" :key="index">
|
<div v-for="(column, index) in columns" :key="index">
|
||||||
<div class="flex flex-col space-y-5 w-72">
|
<div class="flex flex-col space-y-4 w-60">
|
||||||
<div v-for="field in column">
|
<div v-for="field in column">
|
||||||
<Link
|
<Link
|
||||||
v-if="field.type == 'Link'"
|
v-if="field.type == 'Link'"
|
||||||
|
|||||||
@@ -580,7 +580,7 @@ def get_members(start=0, search=""):
|
|||||||
members = frappe.get_all(
|
members = frappe.get_all(
|
||||||
"User",
|
"User",
|
||||||
filters=filters,
|
filters=filters,
|
||||||
fields=["name", "full_name", "user_image", "username", "last_active"],
|
fields=["name", "full_name", "user_image", "username"],
|
||||||
page_length=20,
|
page_length=20,
|
||||||
start=start,
|
start=start,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,16 +7,11 @@
|
|||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
"field_order": [
|
"field_order": [
|
||||||
"course",
|
"course",
|
||||||
"course_title",
|
"evaluator",
|
||||||
|
"batch_name",
|
||||||
"column_break_4",
|
"column_break_4",
|
||||||
"member",
|
"member",
|
||||||
"member_name",
|
"member_name",
|
||||||
"section_break_ikne",
|
|
||||||
"evaluator",
|
|
||||||
"evaluator_name",
|
|
||||||
"column_break_sjco",
|
|
||||||
"batch_name",
|
|
||||||
"timezone",
|
|
||||||
"section_break_lifi",
|
"section_break_lifi",
|
||||||
"date",
|
"date",
|
||||||
"day",
|
"day",
|
||||||
@@ -108,40 +103,11 @@
|
|||||||
"in_standard_filter": 1,
|
"in_standard_filter": 1,
|
||||||
"label": "Batch",
|
"label": "Batch",
|
||||||
"options": "LMS Batch"
|
"options": "LMS Batch"
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_ikne",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_sjco",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fetch_from": "course.title",
|
|
||||||
"fieldname": "course_title",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Course Title",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fetch_from": "evaluator.full_name",
|
|
||||||
"fieldname": "evaluator_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Evaluator Name",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fetch_from": "batch_name.timezone",
|
|
||||||
"fieldname": "timezone",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Timezone",
|
|
||||||
"read_only": 1
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2024-09-05 16:28:54.043488",
|
"modified": "2024-04-16 11:01:28.336807",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "LMS",
|
"module": "LMS",
|
||||||
"name": "LMS Certificate Request",
|
"name": "LMS Certificate Request",
|
||||||
|
|||||||
@@ -34,27 +34,23 @@ class LMSCertificateRequest(Document):
|
|||||||
self.evaluator = get_evaluator(self.course, self.batch_name)
|
self.evaluator = get_evaluator(self.course, self.batch_name)
|
||||||
|
|
||||||
def validate_unavailability(self):
|
def validate_unavailability(self):
|
||||||
if self.evaluator:
|
unavailable = frappe.db.get_value(
|
||||||
unavailable = frappe.db.get_value(
|
"Course Evaluator", self.evaluator, ["unavailable_from", "unavailable_to"], as_dict=1
|
||||||
"Course Evaluator",
|
)
|
||||||
self.evaluator,
|
if (
|
||||||
["unavailable_from", "unavailable_to"],
|
unavailable.unavailable_from
|
||||||
as_dict=1,
|
and unavailable.unavailable_to
|
||||||
)
|
and getdate(self.date) >= unavailable.unavailable_from
|
||||||
if (
|
and getdate(self.date) <= unavailable.unavailable_to
|
||||||
unavailable.unavailable_from
|
):
|
||||||
and unavailable.unavailable_to
|
frappe.throw(
|
||||||
and getdate(self.date) >= unavailable.unavailable_from
|
_(
|
||||||
and getdate(self.date) <= unavailable.unavailable_to
|
"The evaluator of this course is unavailable from {0} to {1}. Please select a date after {1}"
|
||||||
):
|
).format(
|
||||||
frappe.throw(
|
format_date(unavailable.unavailable_from, "medium"),
|
||||||
_(
|
format_date(unavailable.unavailable_to, "medium"),
|
||||||
"The evaluator of this course is unavailable from {0} to {1}. Please select a date after {1}"
|
|
||||||
).format(
|
|
||||||
format_date(unavailable.unavailable_from, "medium"),
|
|
||||||
format_date(unavailable.unavailable_to, "medium"),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def validate_slot(self):
|
def validate_slot(self):
|
||||||
if frappe.db.exists(
|
if frappe.db.exists(
|
||||||
@@ -124,12 +120,14 @@ class LMSCertificateRequest(Document):
|
|||||||
template = "certificate_request_notification"
|
template = "certificate_request_notification"
|
||||||
|
|
||||||
args = {
|
args = {
|
||||||
"course": self.course_title,
|
"course": frappe.db.get_value("LMS Course", self.course, "title"),
|
||||||
"timezone": self.timezone if self.batch_name else "",
|
"timezone": frappe.db.get_value("LMS Batch", self.batch_name, "timezone")
|
||||||
|
if self.batch_name
|
||||||
|
else "",
|
||||||
"date": format_date(self.date, "medium"),
|
"date": format_date(self.date, "medium"),
|
||||||
"member_name": self.member_name,
|
"member_name": self.member_name,
|
||||||
"start_time": format_time(self.start_time, "short"),
|
"start_time": format_time(self.start_time, "short"),
|
||||||
"evaluator": self.evaluator_name,
|
"evaluator": frappe.db.get_value("User", self.evaluator, "full_name"),
|
||||||
}
|
}
|
||||||
|
|
||||||
frappe.sendmail(
|
frappe.sendmail(
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %}
|
||||||
|
{% set timezone = frappe.db.get_value("LMS Batch", doc.batch, "timezone") %}
|
||||||
|
{% set timezone = timezone if timezone else '' %}
|
||||||
|
{% set evaluator_name = frappe.db.get_value("User", doc.evaluator, "full_name") %}
|
||||||
|
|
||||||
|
<p> {{ _("Hey {0}").format(doc.member_name) }} </p>
|
||||||
|
<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short"), timezone) }}</p>
|
||||||
|
<p> {{ _("Your evaluator is {0}").format(evaluator_name) }} </p>
|
||||||
|
<p> {{ _("Please prepare well and be on time for the evaluations.") }} </p>
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"attach_print": 0,
|
||||||
|
"channel": "Email",
|
||||||
|
"creation": "2022-06-03 11:02:34.579145",
|
||||||
|
"days_in_advance": 0,
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Notification",
|
||||||
|
"document_type": "LMS Certificate Request",
|
||||||
|
"enabled": 0,
|
||||||
|
"event": "New",
|
||||||
|
"idx": 0,
|
||||||
|
"is_standard": 1,
|
||||||
|
"message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n{% set timezone = frappe.db.get_value(\"LMS Batch\", doc.batch, \"timezone\") %}\n{% set timezone = timezone if timezone else '' %}\n{% set evaluator_name = frappe.db.get_value(\"User\", doc.evaluator, \"full_name\") %}\n\n<p> {{ _(\"Hey {0}\").format(doc.member_name) }} </p>\n<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\"), timezone) }}</p>\n<p> {{ _(\"Your evaluator is {0}\").format(evaluator_name) }} </p>\n<p> {{ _(\"Please prepare well and be on time for the evaluations.\") }} </p>\n",
|
||||||
|
"message_type": "HTML",
|
||||||
|
"modified": "2024-08-01 12:17:40.647724",
|
||||||
|
"modified_by": "jannat@frappe.io",
|
||||||
|
"module": "LMS",
|
||||||
|
"name": "Certificate Request Creation",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"recipients": [
|
||||||
|
{
|
||||||
|
"receiver_by_document_field": "member"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receiver_by_document_field": "evaluator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receiver_by_role": "Frappe School Admin"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"send_system_notification": 0,
|
||||||
|
"send_to_all_assignees": 0,
|
||||||
|
"subject": "Your evaluation slot has been booked"
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def get_context(context):
|
||||||
|
# do your magic here
|
||||||
|
pass
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<p> {{ _("Hey {0}").format(doc.member_name) }} </p>
|
{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %}
|
||||||
<br>
|
{% set timezone = frappe.db.get_value("LMS Batch", doc.batch, "timezone") %}
|
||||||
<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(doc.course_title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short"), doc.timezone) }}</p>
|
{% set timezone = timezone if timezone else '' %}
|
||||||
<br>
|
{% set evaluator_name = frappe.db.get_value("User", doc.evaluator, "full_name") %}
|
||||||
<p> {{ _("{0} is your evaluator").format(doc.evaluator_name) }} </p>
|
|
||||||
<br>
|
<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short"), timezone) }}</p>
|
||||||
|
<p> {{ _("Your evaluator is {0}").format(evaluator_name) }}
|
||||||
<p> {{ _("Please prepare well and be on time for the evaluations.") }} </p>
|
<p> {{ _("Please prepare well and be on time for the evaluations.") }} </p>
|
||||||
|
|||||||
@@ -11,10 +11,10 @@
|
|||||||
"event": "Days Before",
|
"event": "Days Before",
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"is_standard": 1,
|
"is_standard": 1,
|
||||||
"message": "<p> {{ _(\"Hey {0}\").format(doc.member_name) }} </p>\n<br>\n<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(doc.course_title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\"), doc.timezone) }}</p>\n<br>\n<p> {{ _(\"{0} is your evaluator\").format(doc.evaluator_name) }} </p>\n<br>\n<p> {{ _(\"Please prepare well and be on time for the evaluations.\") }} </p>\n",
|
"message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n{% set timezone = frappe.db.get_value(\"LMS Batch\", doc.batch, \"timezone\") %}\n{% set timezone = timezone if timezone else '' %}\n{% set evaluator_name = frappe.db.get_value(\"User\", doc.evaluator, \"full_name\") %}\n\n<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\"), timezone) }}</p>\n<p> {{ _(\"Your evaluator is {0}\").format(evaluator_name) }}\n<p> {{ _(\"Please prepare well and be on time for the evaluations.\") }} </p>\n",
|
||||||
"message_type": "HTML",
|
"message_type": "HTML",
|
||||||
"modified": "2024-09-05 16:33:42.212842",
|
"modified": "2024-07-10 15:51:33.803704",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "sayali@erpnext.com",
|
||||||
"module": "LMS",
|
"module": "LMS",
|
||||||
"name": "Certificate Request Reminder",
|
"name": "Certificate Request Reminder",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Frappe LMS VERSION\n"
|
"Project-Id-Version: Frappe LMS VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||||
"POT-Creation-Date: 2024-09-06 16:03+0000\n"
|
"POT-Creation-Date: 2024-08-23 16:04+0000\n"
|
||||||
"PO-Revision-Date: 2024-09-06 16:03+0000\n"
|
"PO-Revision-Date: 2024-08-23 16:04+0000\n"
|
||||||
"Last-Translator: jannat@frappe.io\n"
|
"Last-Translator: jannat@frappe.io\n"
|
||||||
"Language-Team: jannat@frappe.io\n"
|
"Language-Team: jannat@frappe.io\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -138,7 +138,7 @@ msgstr ""
|
|||||||
msgid "Allow accessing future dates"
|
msgid "Allow accessing future dates"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:199
|
#: overrides/user.py:198
|
||||||
msgid "Already Registered"
|
msgid "Already Registered"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -936,10 +936,8 @@ msgstr ""
|
|||||||
|
|
||||||
#. Label of the title (Data) field in DocType 'Batch Course'
|
#. Label of the title (Data) field in DocType 'Batch Course'
|
||||||
#. Label of the course_title (Data) field in DocType 'LMS Certificate'
|
#. Label of the course_title (Data) field in DocType 'LMS Certificate'
|
||||||
#. Label of the course_title (Data) field in DocType 'LMS Certificate Request'
|
|
||||||
#: lms/doctype/batch_course/batch_course.json
|
#: lms/doctype/batch_course/batch_course.json
|
||||||
#: lms/doctype/lms_certificate/lms_certificate.json
|
#: lms/doctype/lms_certificate/lms_certificate.json
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.json
|
|
||||||
msgid "Course Title"
|
msgid "Course Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1308,12 +1306,6 @@ msgstr ""
|
|||||||
msgid "Evaluator"
|
msgid "Evaluator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Label of the evaluator_name (Data) field in DocType 'LMS Certificate
|
|
||||||
#. Request'
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.json
|
|
||||||
msgid "Evaluator Name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. Name of a DocType
|
#. Name of a DocType
|
||||||
#: lms/doctype/evaluator_schedule/evaluator_schedule.json
|
#: lms/doctype/evaluator_schedule/evaluator_schedule.json
|
||||||
msgid "Evaluator Schedule"
|
msgid "Evaluator Schedule"
|
||||||
@@ -1556,7 +1548,7 @@ msgstr ""
|
|||||||
msgid "Here are a few courses we recommend for you to get started with {0}"
|
msgid "Here are a few courses we recommend for you to get started with {0}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:1
|
#: lms/notification/certificate_request_creation/certificate_request_creation.html:6
|
||||||
#: templates/emails/certificate_request_notification.html:1
|
#: templates/emails/certificate_request_notification.html:1
|
||||||
msgid "Hey {0}"
|
msgid "Hey {0}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -2497,7 +2489,7 @@ msgstr ""
|
|||||||
msgid "No."
|
msgid "No."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:194
|
#: overrides/user.py:193
|
||||||
msgid "Not Allowed"
|
msgid "Not Allowed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2762,11 +2754,11 @@ msgstr ""
|
|||||||
msgid "Please add <a href='{0}'>{1}</a> for <a href='{2}'>{3}</a> to send calendar invites for evaluations."
|
msgid "Please add <a href='{0}'>{1}</a> for <a href='{2}'>{3}</a> to send calendar invites for evaluations."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:240
|
#: overrides/user.py:239
|
||||||
msgid "Please ask your administrator to verify your sign-up"
|
msgid "Please ask your administrator to verify your sign-up"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:238
|
#: overrides/user.py:237
|
||||||
msgid "Please check your email for verification"
|
msgid "Please check your email for verification"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2795,8 +2787,9 @@ msgstr ""
|
|||||||
msgid "Please login to continue with payment."
|
msgid "Please login to continue with payment."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:7
|
#: lms/notification/certificate_request_creation/certificate_request_creation.html:9
|
||||||
#: templates/emails/certificate_request_notification.html:7
|
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:8
|
||||||
|
#: templates/emails/certificate_request_notification.html:4
|
||||||
msgid "Please prepare well and be on time for the evaluations."
|
msgid "Please prepare well and be on time for the evaluations."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3066,7 +3059,7 @@ msgstr ""
|
|||||||
msgid "Registered"
|
msgid "Registered"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:201
|
#: overrides/user.py:200
|
||||||
msgid "Registered but disabled"
|
msgid "Registered but disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3302,7 +3295,7 @@ msgstr ""
|
|||||||
msgid "Sidebar Items"
|
msgid "Sidebar Items"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:194
|
#: overrides/user.py:193
|
||||||
msgid "Sign Up is disabled"
|
msgid "Sign Up is disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3346,7 +3339,7 @@ msgstr ""
|
|||||||
msgid "Skills"
|
msgid "Skills"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:42
|
#: overrides/user.py:41
|
||||||
msgid "Skills must be unique"
|
msgid "Skills must be unique"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3638,7 +3631,7 @@ msgstr ""
|
|||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:205
|
#: overrides/user.py:204
|
||||||
msgid "Temporarily Disabled"
|
msgid "Temporarily Disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3683,7 +3676,7 @@ msgstr ""
|
|||||||
msgid "The course {0} is now available on {1}."
|
msgid "The course {0} is now available on {1}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:51
|
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:47
|
||||||
msgid "The evaluator of this course is unavailable from {0} to {1}. Please select a date after {1}"
|
msgid "The evaluator of this course is unavailable from {0} to {1}. Please select a date after {1}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3691,7 +3684,7 @@ msgstr ""
|
|||||||
msgid "The quiz has a time limit. For each question you will be given {0} seconds."
|
msgid "The quiz has a time limit. For each question you will be given {0} seconds."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:69
|
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:65
|
||||||
msgid "The slot is already booked by another participant."
|
msgid "The slot is already booked by another participant."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3777,10 +3770,8 @@ msgid "Timetable Template"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Label of the timezone (Data) field in DocType 'LMS Batch'
|
#. Label of the timezone (Data) field in DocType 'LMS Batch'
|
||||||
#. Label of the timezone (Data) field in DocType 'LMS Certificate Request'
|
|
||||||
#. Label of the timezone (Data) field in DocType 'LMS Live Class'
|
#. Label of the timezone (Data) field in DocType 'LMS Live Class'
|
||||||
#: lms/doctype/lms_batch/lms_batch.json
|
#: lms/doctype/lms_batch/lms_batch.json
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.json
|
|
||||||
#: lms/doctype/lms_live_class/lms_live_class.json
|
#: lms/doctype/lms_live_class/lms_live_class.json
|
||||||
msgid "Timezone"
|
msgid "Timezone"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -3842,7 +3833,7 @@ msgstr ""
|
|||||||
msgid "To join this batch, please contact the Administrator."
|
msgid "To join this batch, please contact the Administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: overrides/user.py:206
|
#: overrides/user.py:205
|
||||||
msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour"
|
msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4092,7 +4083,7 @@ msgstr ""
|
|||||||
msgid "Write a review"
|
msgid "Write a review"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:93
|
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:89
|
||||||
msgid "You already have an evaluation on {0} at {1} for the course {2}."
|
msgid "You already have an evaluation on {0} at {1} for the course {2}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4125,11 +4116,11 @@ msgstr ""
|
|||||||
msgid "You can find their resume attached to this email."
|
msgid "You can find their resume attached to this email."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:113
|
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:109
|
||||||
msgid "You cannot schedule evaluations after {0}."
|
msgid "You cannot schedule evaluations after {0}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:102
|
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:98
|
||||||
msgid "You cannot schedule evaluations for past slots."
|
msgid "You cannot schedule evaluations for past slots."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4189,16 +4180,19 @@ msgstr ""
|
|||||||
msgid "Your Account has been successfully created!"
|
msgid "Your Account has been successfully created!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:3
|
#: lms/notification/certificate_request_creation/certificate_request_creation.html:7
|
||||||
#: templates/emails/certificate_request_notification.html:3
|
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:6
|
||||||
|
#: templates/emails/certificate_request_notification.html:2
|
||||||
msgid "Your evaluation for the course {0} has been scheduled on {1} at {2} {3}."
|
msgid "Your evaluation for the course {0} has been scheduled on {1} at {2} {3}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:123
|
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:119
|
||||||
msgid "Your evaluation slot has been booked"
|
msgid "Your evaluation slot has been booked"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/emails/certificate_request_notification.html:5
|
#: lms/notification/certificate_request_creation/certificate_request_creation.html:8
|
||||||
|
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:7
|
||||||
|
#: templates/emails/certificate_request_notification.html:3
|
||||||
msgid "Your evaluator is {0}"
|
msgid "Your evaluator is {0}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4279,10 +4273,6 @@ msgstr ""
|
|||||||
msgid "{0} is already certified for the course {1}"
|
msgid "{0} is already certified for the course {1}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:5
|
|
||||||
msgid "{0} is your evaluator"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lms/utils.py:689
|
#: lms/utils.py:689
|
||||||
msgid "{0} mentioned you in a comment"
|
msgid "{0} mentioned you in a comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -90,4 +90,3 @@ lms.patches.v1_0.set_published_on
|
|||||||
lms.patches.v2_0.fix_progress_percentage
|
lms.patches.v2_0.fix_progress_percentage
|
||||||
lms.patches.v2_0.add_discussion_topic_titles
|
lms.patches.v2_0.add_discussion_topic_titles
|
||||||
lms.patches.v2_0.sidebar_settings
|
lms.patches.v2_0.sidebar_settings
|
||||||
lms.patches.v2_0.delete_certificate_request_notification
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
frappe.db.delete("Notification", "Certificate Request Creation")
|
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
<p> {{ _("Hey {0}").format(member_name) }} </p>
|
<p> {{ _("Hey {0}").format(member_name) }} </p>
|
||||||
<br>
|
<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(title, date, start_time, timezone) }}</p>
|
||||||
<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(course, date, start_time, timezone) }}</p>
|
|
||||||
<br>
|
|
||||||
<p> {{ _("Your evaluator is {0}").format(evaluator) }} </p>
|
<p> {{ _("Your evaluator is {0}").format(evaluator) }} </p>
|
||||||
<br>
|
|
||||||
<p> {{ _("Please prepare well and be on time for the evaluations.") }} </p>
|
<p> {{ _("Please prepare well and be on time for the evaluations.") }} </p>
|
||||||
|
|||||||
Reference in New Issue
Block a user