From 954d0a06370ad614fc3193670c36c5c9baae9d08 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 3 Jul 2025 18:19:29 +0530 Subject: [PATCH 1/4] fix: improved members list and form --- .../Modals/CourseProgressSummary.vue | 2 +- frontend/src/components/Settings/Members.vue | 128 ++++++++++-------- frontend/src/components/Settings/Settings.vue | 3 +- lms/lms/api.py | 11 +- 4 files changed, 76 insertions(+), 68 deletions(-) diff --git a/frontend/src/components/Modals/CourseProgressSummary.vue b/frontend/src/components/Modals/CourseProgressSummary.vue index 6ea915b7..c87de333 100644 --- a/frontend/src/components/Modals/CourseProgressSummary.vue +++ b/frontend/src/components/Modals/CourseProgressSummary.vue @@ -206,7 +206,7 @@ const progressColumns = computed(() => { { label: __('Member'), key: 'member_name', - width: '50%', + width: '60%', icon: 'user', }, { diff --git a/frontend/src/components/Settings/Members.vue b/frontend/src/components/Settings/Members.vue index 730758d7..74bc4b5d 100644 --- a/frontend/src/components/Settings/Members.vue +++ b/frontend/src/components/Settings/Members.vue @@ -5,9 +5,9 @@
{{ __(label) }}
- +
- -
- - - -
-
  • {{ member.full_name }}
    -
    - - {{ getRole(member.role) }} - -
    {{ member.name }} @@ -88,12 +54,13 @@
    -
    - {{ dayjs(member.last_active).format('DD MMM, YYYY HH:mm a') }} -
    -
    -
    + + + {{ getRole(member.role) }} +
@@ -111,20 +78,68 @@
+ + + 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 +}