diff --git a/cypress/e2e/batch_creation.cy.js b/cypress/e2e/batch_creation.cy.js index 5b62e6e2..45669db3 100644 --- a/cypress/e2e/batch_creation.cy.js +++ b/cypress/e2e/batch_creation.cy.js @@ -23,8 +23,8 @@ describe("Batch Creation", () => { const randomEmail = `testuser_${dateNow}@example.com`; const randomName = `Test User ${dateNow}`; - cy.get("input[placeholder='Email']").type(randomEmail); - cy.get("input[placeholder='First Name']").type(randomName); + cy.get("input[placeholder='jane@doe.com']").type(randomEmail); + cy.get("input[placeholder='Jane']").type(randomName); cy.get("button").contains("Add").click(); // Add evaluator @@ -39,7 +39,7 @@ describe("Batch Creation", () => { .click(); const randomEvaluator = `evaluator${dateNow}@example.com`; - cy.get("input[placeholder='Email']").type(randomEvaluator); + cy.get("input[placeholder='jane@doe.com']").type(randomEvaluator); cy.get("button").contains("Add").click(); cy.get("div").contains(randomEvaluator).should("be.visible").click(); diff --git a/frontend/src/components/Settings/Evaluators.vue b/frontend/src/components/Settings/Evaluators.vue index 7d4b6d9f..ae058f6e 100644 --- a/frontend/src/components/Settings/Evaluators.vue +++ b/frontend/src/components/Settings/Evaluators.vue @@ -1,78 +1,129 @@ diff --git a/frontend/src/components/Settings/Members.vue b/frontend/src/components/Settings/Members.vue index 5ff422b1..285a2a26 100644 --- a/frontend/src/components/Settings/Members.vue +++ b/frontend/src/components/Settings/Members.vue @@ -19,7 +19,7 @@ -
+
- -
+
-
-
- +
+ +
@@ -210,7 +209,6 @@ const newMember = createResource({ auto: false, onSuccess(data: Member) { show.value = false - if (user?.data?.is_system_manager) updateOnboardingStep('invite_students') router.push({ diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index 693e2640..196a9564 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -248,8 +248,10 @@ const tabsStructure = computed(() => { }, { label: 'Evaluators', - description: 'Manage the evaluators of your learning system', + description: '', icon: 'UserCheck', + description: + 'Add new evaluators or check the slots existing evaluators', }, { label: 'Categories', diff --git a/lms/lms/api.py b/lms/lms/api.py index 891e6b29..f14fe99e 100644 --- a/lms/lms/api.py +++ b/lms/lms/api.py @@ -1392,6 +1392,7 @@ def save_role(user, role, value): @frappe.whitelist() def add_an_evaluator(email): + frappe.only_for("Moderator") if not frappe.db.exists("User", email): user = frappe.new_doc("User") user.update( @@ -1411,6 +1412,16 @@ def add_an_evaluator(email): return evaluator +@frappe.whitelist() +def delete_evaluator(evaluator): + frappe.only_for("Moderator") + if not frappe.db.exists("Course Evaluator", evaluator): + frappe.throw(_("Evaluator does not exist.")) + + frappe.db.delete("Has Role", {"parent": evaluator, "role": "Batch Evaluator"}) + frappe.db.delete("Course Evaluator", evaluator) + + @frappe.whitelist() def capture_user_persona(responses): frappe.only_for("System Manager") diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.json b/lms/lms/doctype/course_evaluator/course_evaluator.json index 3d466684..6dc92405 100644 --- a/lms/lms/doctype/course_evaluator/course_evaluator.json +++ b/lms/lms/doctype/course_evaluator/course_evaluator.json @@ -58,8 +58,7 @@ "fetch_from": "evaluator.full_name", "fieldname": "full_name", "fieldtype": "Data", - "label": "Full Name", - "read_only": 1 + "label": "Full Name" }, { "fieldname": "column_break_casg", @@ -73,21 +72,19 @@ "fetch_from": "evaluator.user_image", "fieldname": "user_image", "fieldtype": "Attach Image", - "label": "User Image", - "read_only": 1 + "label": "User Image" }, { "fetch_from": "evaluator.username", "fieldname": "username", "fieldtype": "Data", - "label": "Username", - "read_only": 1 + "label": "Username" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2025-06-05 11:04:32.475711", - "modified_by": "sayali@frappe.io", + "modified": "2025-07-04 12:04:11.007945", + "modified_by": "Administrator", "module": "LMS", "name": "Course Evaluator", "naming_rule": "By fieldname", diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json index 277e9eea..33ef07ae 100644 --- a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json @@ -1,6 +1,7 @@ { "attach_print": 0, "channel": "Email", + "condition": "doc.status == \"Upcoming\"", "creation": "2022-06-03 11:51:02.681803", "date_changed": "date", "days_in_advance": 1, @@ -13,7 +14,8 @@ "is_standard": 1, "message": "

{{ _(\"Hey {0}\").format(doc.member_name) }}

\n
\n

{{ _('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) }}

\n
\n

{{ _(\"{0} is your evaluator\").format(doc.evaluator_name) }}

\n
\n

{{ _(\"Please prepare well and be on time for the evaluations.\") }}

\n", "message_type": "HTML", - "modified": "2024-09-05 16:33:42.212842", + "minutes_offset": 0, + "modified": "2025-07-04 10:47:58.448814", "modified_by": "Administrator", "module": "LMS", "name": "Certificate Request Reminder", @@ -22,6 +24,12 @@ { "receiver_by_document_field": "member" }, + { + "receiver_by_document_field": "member" + }, + { + "receiver_by_document_field": "evaluator" + }, { "receiver_by_document_field": "evaluator" } @@ -29,4 +37,4 @@ "send_system_notification": 0, "send_to_all_assignees": 0, "subject": "Reminder for Certificate Evaluation" -} \ No newline at end of file +}