From 5ec809e3dd586854064899ecc4f9fa707856a131 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 20 Aug 2025 12:06:52 +0530 Subject: [PATCH] feat: program progress summary --- .../Modals/CourseProgressSummary.vue | 6 +- frontend/src/global.d.ts | 4 + frontend/src/pages/Programs/ProgramDetail.vue | 15 +- frontend/src/pages/Programs/ProgramForm.vue | 47 ++++-- .../pages/Programs/ProgramProgressSummary.vue | 137 ++++++++++++++++++ lms/lms/utils.py | 8 + 6 files changed, 196 insertions(+), 21 deletions(-) create mode 100644 frontend/src/pages/Programs/ProgramProgressSummary.vue diff --git a/frontend/src/components/Modals/CourseProgressSummary.vue b/frontend/src/components/Modals/CourseProgressSummary.vue index 3d282916..0b5b59a6 100644 --- a/frontend/src/components/Modals/CourseProgressSummary.vue +++ b/frontend/src/components/Modals/CourseProgressSummary.vue @@ -12,9 +12,6 @@ >
- () +const show = defineModel({ default: false }) const searchFilter = ref(null) type Filters = { course: string | undefined @@ -225,7 +222,6 @@ const progressColumns = computed(() => { { label: __('Progress'), key: 'progress', - width: '30%', align: 'right', icon: 'trending-up', }, diff --git a/frontend/src/global.d.ts b/frontend/src/global.d.ts index 6af9dfe4..47eaef8e 100644 --- a/frontend/src/global.d.ts +++ b/frontend/src/global.d.ts @@ -2,6 +2,10 @@ export {} declare global { function __(text: string): string + + interface String { + format(...args: any[]): string + } } declare module 'vue' { diff --git a/frontend/src/pages/Programs/ProgramDetail.vue b/frontend/src/pages/Programs/ProgramDetail.vue index 53df6023..281f02f3 100644 --- a/frontend/src/pages/Programs/ProgramDetail.vue +++ b/frontend/src/pages/Programs/ProgramDetail.vue @@ -5,21 +5,25 @@
-
+
{{ program.data.name }}
+ + + {{ program.data.progress }}% {{ __('completed') }} + + - +
@@ -57,6 +61,7 @@ diff --git a/lms/lms/utils.py b/lms/lms/utils.py index 012ca815..6faecf07 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -1965,6 +1965,7 @@ def get_program_details(program_name): program_courses = frappe.get_all( "LMS Program Course", {"parent": program_name}, ["course"], order_by="idx" ) + program.courses = [] previous_progress = 0 for i, course in enumerate(program_courses): @@ -1978,6 +1979,13 @@ def get_program_details(program_name): previous_progress = details.membership.progress if details.membership else 0 program.courses.append(details) + if frappe.session.user != "Guest": + program.progress = frappe.db.get_value( + "LMS Program Member", + {"parent": program_name, "member": frappe.session.user}, + "progress", + ) + return program