From c7ccb2d1c5234263a62a071be589c962fba50218 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 10 Apr 2026 18:06:30 +0530 Subject: [PATCH] refactor: certified participants list --- frontend/src/pages/Assignments.vue | 1 + frontend/src/pages/CertifiedParticipants.vue | 115 +++++++++--------- frontend/src/pages/JobForm.vue | 87 ------------- .../ProgrammingExercises.vue | 1 + lms/lms/api.py | 10 +- 5 files changed, 64 insertions(+), 150 deletions(-) diff --git a/frontend/src/pages/Assignments.vue b/frontend/src/pages/Assignments.vue index 17a1e75a..f2e6f6be 100644 --- a/frontend/src/pages/Assignments.vue +++ b/frontend/src/pages/Assignments.vue @@ -182,6 +182,7 @@ watch([titleFilter, typeFilter], () => { totalAssignments.update({ filters: assignmentFilter.value, }) + totalAssignments.reload() }) const reloadAssignments = () => { diff --git a/frontend/src/pages/CertifiedParticipants.vue b/frontend/src/pages/CertifiedParticipants.vue index 410a337a..f82f94d8 100644 --- a/frontend/src/pages/CertifiedParticipants.vue +++ b/frontend/src/pages/CertifiedParticipants.vue @@ -12,9 +12,9 @@ -
-
-
+
+
+
{{ memberCount }} {{ __('Certified Members') }}
-
- +
+
+ + + {{ participant.certificate_count }} + {{ + participant.certificate_count > 1 + ? __('certificates') + : __('certificate') + }} + +
+
+ + {{ + dayjs(participant.issue_date).format('DD MMM YYYY') + }} +
+
+
+
-
- +
+
+ {{ participants.data?.length }} {{ __('of') }} + {{ memberCount }} +
@@ -132,7 +132,7 @@ import { usePageMeta, } from 'frappe-ui' import { computed, inject, onMounted, ref } from 'vue' -import { GraduationCap } from 'lucide-vue-next' +import { GraduationCap, Calendar } from 'lucide-vue-next' import { sessionStore } from '../stores/session' import { useRouter } from 'vue-router' import EmptyState from '@/components/EmptyState.vue' @@ -163,7 +163,6 @@ const participants = createListResource({ url: 'lms.lms.api.get_certified_participants', start: 0, cache: ['certified_participants'], - pageLength: 100, }) const getMemberCount = () => { diff --git a/frontend/src/pages/JobForm.vue b/frontend/src/pages/JobForm.vue index 424df035..58b712af 100644 --- a/frontend/src/pages/JobForm.vue +++ b/frontend/src/pages/JobForm.vue @@ -109,93 +109,6 @@
- diff --git a/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue b/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue index 9a1ae149..f9c43bf6 100644 --- a/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue +++ b/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue @@ -203,6 +203,7 @@ const updateList = () => { totalExercises.update({ filters: filters, }) + totalExercises.reload() } const getFilters = () => { diff --git a/lms/lms/api.py b/lms/lms/api.py index cd5f5ac8..bfbde0cf 100644 --- a/lms/lms/api.py +++ b/lms/lms/api.py @@ -344,11 +344,11 @@ def get_evaluator_details(evaluator: str): @frappe.whitelist() -def get_certified_participants(filters: dict = None, start: int = 0, page_length: int = 100): +def get_certified_participants(filters: dict = None, start: int = 0, page_length: int = 40): query = get_certification_query(filters) query = query.orderby("issue_date", order=frappe.qb.desc).offset(start).limit(page_length) participants = query.run(as_dict=True) - + print(participants) for participant in participants: details = get_certified_participant_details(participant.member) participant.update(details) @@ -361,7 +361,7 @@ def get_certified_participant_details(member: str): details = frappe.db.get_value( "User", member, - ["full_name", "user_image", "username", "country", "headline", "open_to"], + ["full_name", "user_image", "username", "creation", "headline", "open_to"], as_dict=1, ) details["certificate_count"] = count @@ -374,12 +374,12 @@ def get_certification_query(filters: dict = None): query = ( frappe.qb.from_(Certificate) - .select(Certificate.member, Certificate.issue_date) - .distinct() + .select(Certificate.member, fn.Max(Certificate.issue_date).as_("issue_date")) .join(User) .on(Certificate.member == User.name) .where(Certificate.published == 1) .where(User.enabled == 1) + .groupby(Certificate.member) ) if filters: