From 8ff339b7edacfc7354157fb0106162c45667c746 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 14 Jan 2026 09:24:24 +0530 Subject: [PATCH] fix: misc issues --- .../src/components/UpcomingEvaluations.vue | 43 ++++++++++++++++--- frontend/src/pages/Batch.vue | 15 +------ frontend/yarn.lock | 6 +-- .../lms_batch_enrollment.json | 14 +++++- .../lms_batch_feedback.json | 26 ++++++++++- .../lms_live_class/lms_live_class.json | 14 +++++- .../doctype/lms_live_class/lms_live_class.py | 12 ++++-- .../lms_live_class_participant.json | 28 +++++++++++- 8 files changed, 126 insertions(+), 32 deletions(-) diff --git a/frontend/src/components/UpcomingEvaluations.vue b/frontend/src/components/UpcomingEvaluations.vue index edc5551c..438a6651 100644 --- a/frontend/src/components/UpcomingEvaluations.vue +++ b/frontend/src/components/UpcomingEvaluations.vue @@ -4,15 +4,30 @@
{{ __('Upcoming Evaluations') }}
- +
+ {{ __('The last day to schedule your evaluations is ') }} + + {{ dayjs(endDate).format('DD MMMM YYYY') }} . + {{ __('Please make sure to schedule your evaluation before this date.') }} +
+
+ {{ + __( + 'The deadline to schedule evaluations has passed. Please contact the Instructor for assistance.' + ) + }} +
-
+
{{ __('Schedule an evaluation to get certified.') }}
@@ -125,6 +140,7 @@ import { formatTime } from '@/utils' import { Button, createResource, call } from 'frappe-ui' import EvaluationModal from '@/components/Modals/EvaluationModal.vue' import { Menu, MenuButton, MenuItems, MenuItem } from '@headlessui/vue' +import IsSameOrAfter from 'dayjs/esm/plugin/IsSameOrAfter' const dayjs = inject('$dayjs') const showEvalModal = ref(false) @@ -173,6 +189,19 @@ const evaluationCourses = computed(() => { }) }) +const canScheduleEvals = computed(() => { + return ( + upcoming_evals.data?.length != evaluationCourses.length && + !props.forHome && + !endDateHasPassed.value + ) +}) + +const endDateHasPassed = computed(() => { + dayjs.extend(IsSameOrAfter) + return dayjs().isSameOrAfter(dayjs(props.endDate), 'day') +}) + const cancelEvaluation = (evl) => { $dialog({ title: __('Cancel this evaluation?'), diff --git a/frontend/src/pages/Batch.vue b/frontend/src/pages/Batch.vue index bf3b1135..ad5c47bb 100644 --- a/frontend/src/pages/Batch.vue +++ b/frontend/src/pages/Batch.vue @@ -144,20 +144,7 @@ -
- {{ __('The last day to schedule your evaluations is ') }} - - {{ - dayjs(batch.data.evaluation_end_date).format('DD MMMM YYYY') - }} . - {{ - __('Please make sure to schedule your evaluation before this date.') - }} -
+
{{ __('Feedback') }} diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 95621ac6..3dc3918b 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1896,9 +1896,9 @@ integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/node@*": - version "25.0.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.7.tgz#afd2f0d34358631a287c6726dabe0c845abc2bae" - integrity sha512-C/er7DlIZgRJO7WtTdYovjIFzGsz0I95UlMyR9anTb4aCpBSRWe5Jc1/RvLKUfzmOxHPGjSE5+63HgLtndxU4w== + version "25.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.8.tgz#e54e00f94fe1db2497b3e42d292b8376a2678c8d" + integrity sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg== dependencies: undici-types "~7.16.0" diff --git a/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.json b/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.json index c9f3e793..a2f05643 100644 --- a/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.json +++ b/lms/lms/doctype/lms_batch_enrollment/lms_batch_enrollment.json @@ -73,7 +73,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2025-12-04 12:53:38.246250", + "modified": "2026-01-14 08:53:16.672825", "modified_by": "sayali@frappe.io", "module": "LMS", "name": "LMS Batch Enrollment", @@ -108,6 +108,18 @@ "if_owner": 1, "read": 1, "role": "LMS Student" + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Batch Evaluator", + "share": 1, + "write": 1 } ], "row_format": "Dynamic", diff --git a/lms/lms/doctype/lms_batch_feedback/lms_batch_feedback.json b/lms/lms/doctype/lms_batch_feedback/lms_batch_feedback.json index 89e99c33..683a8876 100644 --- a/lms/lms/doctype/lms_batch_feedback/lms_batch_feedback.json +++ b/lms/lms/doctype/lms_batch_feedback/lms_batch_feedback.json @@ -76,7 +76,7 @@ "grid_page_length": 50, "index_web_pages_for_search": 1, "links": [], - "modified": "2025-05-21 15:58:51.667270", + "modified": "2026-01-14 08:53:38.088168", "modified_by": "sayali@frappe.io", "module": "LMS", "name": "LMS Batch Feedback", @@ -105,6 +105,30 @@ "role": "LMS Student", "share": 1, "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Moderator", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Batch Evaluator", + "share": 1, + "write": 1 } ], "row_format": "Dynamic", diff --git a/lms/lms/doctype/lms_live_class/lms_live_class.json b/lms/lms/doctype/lms_live_class/lms_live_class.json index e734da4a..d71727ed 100644 --- a/lms/lms/doctype/lms_live_class/lms_live_class.json +++ b/lms/lms/doctype/lms_live_class/lms_live_class.json @@ -177,7 +177,7 @@ "link_fieldname": "live_class" } ], - "modified": "2025-05-27 14:44:35.679712", + "modified": "2026-01-14 08:54:07.684781", "modified_by": "sayali@frappe.io", "module": "LMS", "name": "LMS Live Class", @@ -215,6 +215,18 @@ "report": 1, "role": "LMS Student", "share": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Batch Evaluator", + "share": 1, + "write": 1 } ], "row_format": "Dynamic", diff --git a/lms/lms/doctype/lms_live_class/lms_live_class.py b/lms/lms/doctype/lms_live_class/lms_live_class.py index f54372fc..dc6dfa2f 100644 --- a/lms/lms/doctype/lms_live_class/lms_live_class.py +++ b/lms/lms/doctype/lms_live_class/lms_live_class.py @@ -155,11 +155,17 @@ def create_attendance(live_class, data): doc = frappe.new_doc("LMS Live Class Participant") doc.live_class = live_class.name doc.member = participant.get("user_email") - doc.joined_at = participant.get("join_time") - doc.left_at = participant.get("leave_time") - doc.duration = participant.get("duration") + doc.joined_at = get_datetime(participant.get("join_time")) + doc.left_at = get_datetime(participant.get("leave_time")) + doc.duration = get_minutes(participant.get("duration")) doc.insert() def update_attendees_count(live_class, data): frappe.db.set_value("LMS Live Class", live_class.name, "attendees", len(data)) + + +def get_minutes(duration_in_seconds): + if duration_in_seconds: + return int(duration_in_seconds) // 60 + return 0 diff --git a/lms/lms/doctype/lms_live_class_participant/lms_live_class_participant.json b/lms/lms/doctype/lms_live_class_participant/lms_live_class_participant.json index 7dff5dfd..f1117c12 100644 --- a/lms/lms/doctype/lms_live_class_participant/lms_live_class_participant.json +++ b/lms/lms/doctype/lms_live_class_participant/lms_live_class_participant.json @@ -89,8 +89,8 @@ "grid_page_length": 50, "index_web_pages_for_search": 1, "links": [], - "modified": "2025-05-27 22:32:24.196643", - "modified_by": "Administrator", + "modified": "2026-01-14 08:54:21.421321", + "modified_by": "sayali@frappe.io", "module": "LMS", "name": "LMS Live Class Participant", "owner": "Administrator", @@ -106,6 +106,30 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Moderator", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Batch Evaluator", + "share": 1, + "write": 1 } ], "row_format": "Dynamic",