Merge pull request #1013 from frappe/develop

chore: merge 'develop' into 'main'
This commit is contained in:
Jannat Patel
2024-09-11 11:09:55 +05:30
committed by GitHub
16 changed files with 203 additions and 178 deletions

View File

@@ -1,13 +1,13 @@
<template> <template>
<div class="text-base p-4"> <div class="flex min-h-0 flex-col text-base">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div> <div>
<div class="font-semibold mb-1"> <div class="text-xl 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,74 +16,93 @@
type="text" type="text"
:debounce="300" :debounce="300"
/> />
<Button @click="() => (showForm = true)"> <Button @click="() => (showForm = !showForm)">
<template #icon> <template #icon>
<Plus class="h-3 w-3 stroke-1.5" /> <Plus v-if="!showForm" 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 --> <!-- Form to add new member -->
<div v-if="showForm" class="flex items-center space-x-2 mb-4"> <div v-if="showForm" class="flex items-center space-x-2 my-4">
<FormControl <FormControl
v-model="member.email" v-model="member.email"
:placeholder="__('Email')" :placeholder="__('Email')"
type="email" type="email"
class="w-full" class="w-full"
/> />
<FormControl <FormControl
v-model="member.first_name" v-model="member.first_name"
:placeholder="__('First Name')" :placeholder="__('First Name')"
type="test" type="test"
class="w-full" class="w-full"
/> />
<Button @click="addMember()" variant="subtle"> <Button @click="addMember()" variant="subtle">
{{ __('Add') }} {{ __('Add') }}
</Button>
</div>
<div class="mt-2 pb-10 overflow-auto">
<!-- 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
v-if="memberList.length && hasNextPage"
class="flex justify-center mt-4"
>
<Button @click="members.reload()">
<template #prefix>
<RefreshCw class="h-3 w-3 stroke-1.5" />
</template>
{{ __('Load More') }}
</Button> </Button>
</div> </div>
<!-- Member list -->
<div
v-for="member in memberList"
class="grid grid-cols-5 grid-flow-row py-2 cursor-pointer"
>
<div
@click="openProfile(member.username)"
class="flex items-center space-x-2 col-span-2"
>
<Avatar
: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 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> </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 } from 'vue' import { ref, watch, reactive, inject } from 'vue'
import { RefreshCw, Plus } from 'lucide-vue-next' import { RefreshCw, Plus, X } from 'lucide-vue-next'
const router = useRouter() const router = useRouter()
const show = defineModel('show') const show = defineModel('show')
@@ -92,6 +111,7 @@ 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: '',

View File

@@ -1,5 +1,5 @@
<template> <template>
<Dialog v-model="show" :options="{ size: '3xl' }"> <Dialog v-model="show" :options="{ size: '4xl' }">
<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 overflow-y-auto" class="flex flex-1 flex-col px-10 pt-8"
> >
<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: 'Customize the sidebar as per your needs', description: 'Choose the items you want to show in the sidebar',
fields: [ fields: [
{ {
label: 'Courses', label: 'Courses',

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="flex flex-col justify-between h-full p-4"> <div class="flex flex-col justify-between h-full">
<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 space-x-8 my-5"> <div class="flex justify-between 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-4 w-60"> <div class="flex flex-col space-y-5 w-72">
<div v-for="field in column"> <div v-for="field in column">
<Link <Link
v-if="field.type == 'Link'" v-if="field.type == 'Link'"

View File

@@ -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"], fields=["name", "full_name", "user_image", "username", "last_active"],
page_length=20, page_length=20,
start=start, start=start,
) )

View File

@@ -7,11 +7,16 @@
"engine": "InnoDB", "engine": "InnoDB",
"field_order": [ "field_order": [
"course", "course",
"evaluator", "course_title",
"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",
@@ -103,11 +108,40 @@
"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-04-16 11:01:28.336807", "modified": "2024-09-05 16:28:54.043488",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Certificate Request", "name": "LMS Certificate Request",

View File

@@ -34,23 +34,27 @@ 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):
unavailable = frappe.db.get_value( if self.evaluator:
"Course Evaluator", self.evaluator, ["unavailable_from", "unavailable_to"], as_dict=1 unavailable = frappe.db.get_value(
) "Course Evaluator",
if ( self.evaluator,
unavailable.unavailable_from ["unavailable_from", "unavailable_to"],
and unavailable.unavailable_to as_dict=1,
and getdate(self.date) >= unavailable.unavailable_from
and getdate(self.date) <= unavailable.unavailable_to
):
frappe.throw(
_(
"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"),
)
) )
if (
unavailable.unavailable_from
and unavailable.unavailable_to
and getdate(self.date) >= unavailable.unavailable_from
and getdate(self.date) <= unavailable.unavailable_to
):
frappe.throw(
_(
"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(
@@ -120,14 +124,12 @@ class LMSCertificateRequest(Document):
template = "certificate_request_notification" template = "certificate_request_notification"
args = { args = {
"course": frappe.db.get_value("LMS Course", self.course, "title"), "course": self.course_title,
"timezone": frappe.db.get_value("LMS Batch", self.batch_name, "timezone") "timezone": self.timezone if self.batch_name else "",
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": frappe.db.get_value("User", self.evaluator, "full_name"), "evaluator": self.evaluator_name,
} }
frappe.sendmail( frappe.sendmail(

View File

@@ -1,9 +0,0 @@
{% 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>

View File

@@ -1,34 +0,0 @@
{
"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"
}

View File

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

View File

@@ -1,8 +1,7 @@
{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} <p> {{ _("Hey {0}").format(doc.member_name) }} </p>
{% set timezone = frappe.db.get_value("LMS Batch", doc.batch, "timezone") %} <br>
{% set timezone = timezone if timezone else '' %} <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 evaluator_name = frappe.db.get_value("User", doc.evaluator, "full_name") %} <br>
<p> {{ _("{0} is your evaluator").format(doc.evaluator_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> <br>
<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>

View File

@@ -11,10 +11,10 @@
"event": "Days Before", "event": "Days Before",
"idx": 0, "idx": 0,
"is_standard": 1, "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> {{ _('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": "<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_type": "HTML", "message_type": "HTML",
"modified": "2024-07-10 15:51:33.803704", "modified": "2024-09-05 16:33:42.212842",
"modified_by": "sayali@erpnext.com", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "Certificate Request Reminder", "name": "Certificate Request Reminder",
"owner": "Administrator", "owner": "Administrator",

View File

@@ -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-08-23 16:04+0000\n" "POT-Creation-Date: 2024-09-06 16:03+0000\n"
"PO-Revision-Date: 2024-08-23 16:04+0000\n" "PO-Revision-Date: 2024-09-06 16:03+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:198 #: overrides/user.py:199
msgid "Already Registered" msgid "Already Registered"
msgstr "" msgstr ""
@@ -936,8 +936,10 @@ 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 ""
@@ -1306,6 +1308,12 @@ 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"
@@ -1548,7 +1556,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_creation/certificate_request_creation.html:6 #: lms/notification/certificate_request_reminder/certificate_request_reminder.html:1
#: templates/emails/certificate_request_notification.html:1 #: templates/emails/certificate_request_notification.html:1
msgid "Hey {0}" msgid "Hey {0}"
msgstr "" msgstr ""
@@ -2489,7 +2497,7 @@ msgstr ""
msgid "No." msgid "No."
msgstr "" msgstr ""
#: overrides/user.py:193 #: overrides/user.py:194
msgid "Not Allowed" msgid "Not Allowed"
msgstr "" msgstr ""
@@ -2754,11 +2762,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:239 #: overrides/user.py:240
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:237 #: overrides/user.py:238
msgid "Please check your email for verification" msgid "Please check your email for verification"
msgstr "" msgstr ""
@@ -2787,9 +2795,8 @@ msgstr ""
msgid "Please login to continue with payment." msgid "Please login to continue with payment."
msgstr "" msgstr ""
#: lms/notification/certificate_request_creation/certificate_request_creation.html:9 #: lms/notification/certificate_request_reminder/certificate_request_reminder.html:7
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:8 #: templates/emails/certificate_request_notification.html:7
#: 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 ""
@@ -3059,7 +3066,7 @@ msgstr ""
msgid "Registered" msgid "Registered"
msgstr "" msgstr ""
#: overrides/user.py:200 #: overrides/user.py:201
msgid "Registered but disabled" msgid "Registered but disabled"
msgstr "" msgstr ""
@@ -3295,7 +3302,7 @@ msgstr ""
msgid "Sidebar Items" msgid "Sidebar Items"
msgstr "" msgstr ""
#: overrides/user.py:193 #: overrides/user.py:194
msgid "Sign Up is disabled" msgid "Sign Up is disabled"
msgstr "" msgstr ""
@@ -3339,7 +3346,7 @@ msgstr ""
msgid "Skills" msgid "Skills"
msgstr "" msgstr ""
#: overrides/user.py:41 #: overrides/user.py:42
msgid "Skills must be unique" msgid "Skills must be unique"
msgstr "" msgstr ""
@@ -3631,7 +3638,7 @@ msgstr ""
msgid "Template" msgid "Template"
msgstr "" msgstr ""
#: overrides/user.py:204 #: overrides/user.py:205
msgid "Temporarily Disabled" msgid "Temporarily Disabled"
msgstr "" msgstr ""
@@ -3676,7 +3683,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:47 #: lms/doctype/lms_certificate_request/lms_certificate_request.py:51
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 ""
@@ -3684,7 +3691,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:65 #: lms/doctype/lms_certificate_request/lms_certificate_request.py:69
msgid "The slot is already booked by another participant." msgid "The slot is already booked by another participant."
msgstr "" msgstr ""
@@ -3770,8 +3777,10 @@ 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 ""
@@ -3833,7 +3842,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:205 #: overrides/user.py:206
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 ""
@@ -4083,7 +4092,7 @@ msgstr ""
msgid "Write a review" msgid "Write a review"
msgstr "" msgstr ""
#: lms/doctype/lms_certificate_request/lms_certificate_request.py:89 #: lms/doctype/lms_certificate_request/lms_certificate_request.py:93
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 ""
@@ -4116,11 +4125,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:109 #: lms/doctype/lms_certificate_request/lms_certificate_request.py:113
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:98 #: lms/doctype/lms_certificate_request/lms_certificate_request.py:102
msgid "You cannot schedule evaluations for past slots." msgid "You cannot schedule evaluations for past slots."
msgstr "" msgstr ""
@@ -4180,19 +4189,16 @@ msgstr ""
msgid "Your Account has been successfully created!" msgid "Your Account has been successfully created!"
msgstr "" msgstr ""
#: lms/notification/certificate_request_creation/certificate_request_creation.html:7 #: lms/notification/certificate_request_reminder/certificate_request_reminder.html:3
#: lms/notification/certificate_request_reminder/certificate_request_reminder.html:6 #: templates/emails/certificate_request_notification.html:3
#: 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:119 #: lms/doctype/lms_certificate_request/lms_certificate_request.py:123
msgid "Your evaluation slot has been booked" msgid "Your evaluation slot has been booked"
msgstr "" msgstr ""
#: lms/notification/certificate_request_creation/certificate_request_creation.html:8 #: templates/emails/certificate_request_notification.html:5
#: 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 ""
@@ -4273,6 +4279,10 @@ 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 ""

View File

@@ -90,3 +90,4 @@ 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

View File

@@ -0,0 +1,5 @@
import frappe
def execute():
frappe.db.delete("Notification", "Certificate Request Creation")

View File

@@ -1,4 +1,7 @@
<p> {{ _("Hey {0}").format(member_name) }} </p> <p> {{ _("Hey {0}").format(member_name) }} </p>
<p> {{ _('Your evaluation for the course {0} has been scheduled on {1} at {2} {3}.').format(title, date, start_time, timezone) }}</p> <br>
<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>