From 67fc37c76c116cc9c62680e6cd2a95b63120da42 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 8 May 2025 14:53:34 +0530 Subject: [PATCH 01/34] fix: ui of job details --- frontend/src/pages/JobDetail.vue | 125 +++++++++++++------------------ 1 file changed, 54 insertions(+), 71 deletions(-) diff --git a/frontend/src/pages/JobDetail.vue b/frontend/src/pages/JobDetail.vue index 8fe771fd..1712a785 100644 --- a/frontend/src/pages/JobDetail.vue +++ b/frontend/src/pages/JobDetail.vue @@ -67,86 +67,61 @@
-
-
+
+
-
- {{ job.data.job_title }} +
+
+ {{ job.data.job_title }} +
+
+ {{ job.data.company_name }} - {{ job.data.location }}, + {{ job.data.country }} +
-
-
-
- -
- - {{ __('Organisation') }} - - - {{ job.data.company_name }} - -
-
-
- -
- - {{ __('Location') }} - - - {{ job.data.location }}, {{ job.data.country }} - -
-
-
- -
- - {{ __('Category') }} - - - {{ job.data.type }} - -
-
-
- -
- - {{ __('Posted on') }} - - - {{ dayjs(job.data.creation).format('DD MMM YYYY') }} - -
-
-
- -
- - {{ __('Applications Received') }} - - - {{ applicationCount.data }} - -
-
-
+ +
+ + + {{ dayjs(job.data.creation).fromNow() }} + + + + {{ applicationCount.data }} + {{ + applicationCount.data == 1 ? __('applicant') : __('applicants') + }} + + + + {{ job.data.type }} +
+ +
+
+
+ +
+
+
+

{ } }) + From e526627eb998f143d9ef76d1fa08813c6eb13846 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 8 May 2025 15:05:07 +0530 Subject: [PATCH 02/34] fix: only show published certificate on the statistics page --- lms/lms/utils.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lms/lms/utils.py b/lms/lms/utils.py index 29f8dae4..c9916b2f 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -772,14 +772,17 @@ def get_chart_data( from_date = add_months(getdate(), -1) if not to_date: to_date = getdate() - chart = frappe.get_doc("Dashboard Chart", chart_name) - filters = [([chart.document_type, "docstatus", "<", 2, False])] - doctype = chart.document_type - datefield = chart.based_on - value_field = chart.value_based_on or "1" + from_date = get_datetime(from_date).strftime("%Y-%m-%d") to_date = get_datetime(to_date) + chart = frappe.get_doc("Dashboard Chart", chart_name) + doctype = chart.document_type + datefield = chart.based_on + value_field = chart.value_based_on or "1" + + filters = [([chart.document_type, "docstatus", "<", 2, False])] + filters = filters + json.loads(chart.filters_json) filters.append([doctype, datefield, ">=", from_date, False]) filters.append([doctype, datefield, "<=", to_date, False]) From 080be7a885db2777bca3b3b943faf6a7508968b0 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 8 May 2025 15:10:51 +0530 Subject: [PATCH 03/34] fix: tooltips for number cards on statistics page --- frontend/src/pages/Statistics.vue | 69 ++++++++++++++++++------------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/frontend/src/pages/Statistics.vue b/frontend/src/pages/Statistics.vue index 55dfee3d..74949515 100644 --- a/frontend/src/pages/Statistics.vue +++ b/frontend/src/pages/Statistics.vue @@ -7,35 +7,45 @@
- - - - - + + + + + + + + + + + + + + +
@@ -129,6 +139,7 @@ import { createResource, DonutChart, NumberChart, + Tooltip, usePageMeta, } from 'frappe-ui' import { computed } from 'vue' From 159b651871b8118da8e307b067402852934853ff Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 8 May 2025 15:29:04 +0530 Subject: [PATCH 04/34] fix: dark mode for upcoming evaluations --- .../src/components/Modals/EvaluationModal.vue | 5 +++-- .../src/components/UpcomingEvaluations.vue | 19 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/frontend/src/components/Modals/EvaluationModal.vue b/frontend/src/components/Modals/EvaluationModal.vue index 8d766a92..7491355a 100644 --- a/frontend/src/components/Modals/EvaluationModal.vue +++ b/frontend/src/components/Modals/EvaluationModal.vue @@ -42,10 +42,11 @@
{{ formatTime(slot.start_time) }} - diff --git a/frontend/src/components/UpcomingEvaluations.vue b/frontend/src/components/UpcomingEvaluations.vue index 7c978b67..93b4594e 100644 --- a/frontend/src/components/UpcomingEvaluations.vue +++ b/frontend/src/components/UpcomingEvaluations.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/components/Modals/BatchStudentProgress.vue b/frontend/src/components/Modals/BatchStudentProgress.vue index e2bf3add..abbac984 100644 --- a/frontend/src/components/Modals/BatchStudentProgress.vue +++ b/frontend/src/components/Modals/BatchStudentProgress.vue @@ -14,7 +14,7 @@
{{ student.full_name }}
- + {{ student.progress }}% {{ __('Complete') }}
@@ -26,7 +26,7 @@
-
+
{{ __('Assessment') }} @@ -73,7 +73,7 @@
-
+
{{ __('Courses') }} diff --git a/frontend/src/components/Modals/StudentModal.vue b/frontend/src/components/Modals/StudentModal.vue index 5627cc0f..ba355f38 100644 --- a/frontend/src/components/Modals/StudentModal.vue +++ b/frontend/src/components/Modals/StudentModal.vue @@ -19,6 +19,9 @@ doctype="User" v-model="student" :filters="{ ignore_user_type: 1 }" + :onCreate="(value, close) => { + openSettings('Members', close) + }" />
@@ -29,8 +32,10 @@ import { Dialog, createResource, toast } from 'frappe-ui' import { ref, inject } from 'vue' import Link from '@/components/Controls/Link.vue' import { useOnboarding } from 'frappe-ui/frappe' +import { openSettings } from '@/utils' const students = defineModel('reloadStudents') +const batchModal = defineModel('batchModal') const student = ref() const user = inject('$user') const { updateOnboardingStep } = useOnboarding('learning') @@ -65,6 +70,7 @@ const addStudent = (close) => { updateOnboardingStep('add_batch_student') students.value.reload() + batchModal.value.reload() student.value = null close() }, diff --git a/frontend/src/pages/Batch.vue b/frontend/src/pages/Batch.vue index 19857eef..b07aa13a 100644 --- a/frontend/src/pages/Batch.vue +++ b/frontend/src/pages/Batch.vue @@ -67,7 +67,7 @@
- +
@@ -357,7 +357,11 @@ watch(tabIndex, () => { const canMakeAnnouncement = () => { if (readOnlyMode) return false - if (batch.data) return user.data?.is_moderator || user.data?.is_evaluator + + if (!batch.data?.students?.length) + return false + + return user.data?.is_moderator || user.data?.is_evaluator } usePageMeta(() => { diff --git a/frontend/src/pages/BatchForm.vue b/frontend/src/pages/BatchForm.vue index b6769276..044af154 100644 --- a/frontend/src/pages/BatchForm.vue +++ b/frontend/src/pages/BatchForm.vue @@ -285,15 +285,14 @@ import { Image } from 'lucide-vue-next' import { capture } from '@/telemetry' import { useOnboarding } from 'frappe-ui/frappe' import { sessionStore } from '../stores/session' -import { useSettings } from '@/stores/settings' import MultiSelect from '@/components/Controls/MultiSelect.vue' import Link from '@/components/Controls/Link.vue' +import { openSettings } from '@/utils' const router = useRouter() const user = inject('$user') const { brand } = sessionStore() const { updateOnboardingStep } = useOnboarding('learning') -const settingsStore = useSettings() const props = defineProps({ batchName: { @@ -500,11 +499,7 @@ const validateFile = (file) => { } } -const openSettings = (category, close) => { - close() - settingsStore.activeTab = category - settingsStore.isSettingsOpen = true -} + const breadcrumbs = computed(() => { let crumbs = [ diff --git a/frontend/src/pages/Batches.vue b/frontend/src/pages/Batches.vue index d5f6ba19..fc636188 100644 --- a/frontend/src/pages/Batches.vue +++ b/frontend/src/pages/Batches.vue @@ -20,12 +20,14 @@
{{ __('All Batches') }}
user.data?.is_student) const currentTab = ref(is_student.value ? 'All' : 'Upcoming') const orderBy = ref('start_date') const readOnlyMode = window.read_only_mode +const batchCount = ref(0) onMounted(() => { setFiltersFromQuery() updateBatches() + getBatchCount() categories.value = [ { label: '', @@ -293,6 +298,14 @@ const canCreateBatch = () => { return false } +const getBatchCount = () => { + call('frappe.client.get_count', { + doctype: 'LMS Batch', + }).then((data) => { + batchCount.value = data + }) +} + const breadcrumbs = computed(() => [ { label: __('Batches'), diff --git a/frontend/src/pages/CertifiedParticipants.vue b/frontend/src/pages/CertifiedParticipants.vue index ddf793ee..7767dc94 100644 --- a/frontend/src/pages/CertifiedParticipants.vue +++ b/frontend/src/pages/CertifiedParticipants.vue @@ -3,7 +3,7 @@ class="sticky flex items-center justify-between top-0 z-10 border-b bg-surface-white px-3 py-2.5 sm:px-5" > - +
- + {{ student.progress }}% {{ __('Complete') }}
@@ -26,7 +32,10 @@
-
+
{{ __('Assessment') }} @@ -73,7 +82,10 @@
-
+
{{ __('Courses') }} diff --git a/frontend/src/components/Modals/StudentModal.vue b/frontend/src/components/Modals/StudentModal.vue index ba355f38..df3acc3d 100644 --- a/frontend/src/components/Modals/StudentModal.vue +++ b/frontend/src/components/Modals/StudentModal.vue @@ -19,9 +19,11 @@ doctype="User" v-model="student" :filters="{ ignore_user_type: 1 }" - :onCreate="(value, close) => { - openSettings('Members', close) - }" + :onCreate=" + (value, close) => { + openSettings('Members', close) + } + " />
diff --git a/frontend/src/pages/Batch.vue b/frontend/src/pages/Batch.vue index b07aa13a..cf0b31fb 100644 --- a/frontend/src/pages/Batch.vue +++ b/frontend/src/pages/Batch.vue @@ -358,9 +358,8 @@ watch(tabIndex, () => { const canMakeAnnouncement = () => { if (readOnlyMode) return false - if (!batch.data?.students?.length) - return false - + if (!batch.data?.students?.length) return false + return user.data?.is_moderator || user.data?.is_evaluator } diff --git a/frontend/src/pages/BatchForm.vue b/frontend/src/pages/BatchForm.vue index 044af154..60415e81 100644 --- a/frontend/src/pages/BatchForm.vue +++ b/frontend/src/pages/BatchForm.vue @@ -499,8 +499,6 @@ const validateFile = (file) => { } } - - const breadcrumbs = computed(() => { let crumbs = [ { diff --git a/frontend/src/pages/CertifiedParticipants.vue b/frontend/src/pages/CertifiedParticipants.vue index 7767dc94..b7d0de83 100644 --- a/frontend/src/pages/CertifiedParticipants.vue +++ b/frontend/src/pages/CertifiedParticipants.vue @@ -3,7 +3,7 @@ class="sticky flex items-center justify-between top-0 z-10 border-b bg-surface-white px-3 py-2.5 sm:px-5" > - +