From 56630658c661ae25040b7c35de5158ca8bf8d32d Mon Sep 17 00:00:00 2001 From: NguyenND Date: Wed, 25 Feb 2026 11:58:03 -0500 Subject: [PATCH] Feb25 2026: fixed displaying employee name with extra work correctly in TA web and exported file --- app.py | 45 ++++++++++++++++++++++++-- templates/time_attendance_records.html | 4 +-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index a5f14c6..68e3727 100644 --- a/app.py +++ b/app.py @@ -9186,12 +9186,25 @@ def export_time_attendance_excel(records, project_name_for_filename, date_range_ ) # Get employee names - map BASE employee IDs to names for consolidated display + # Look up from Employee table using the numeric base_id to get the correct name, + # regardless of what is stored in the employee_name column (which may contain + # work type characters such as 'Employee 3937SP' if imported with a decorated ID). from working_hours_calculator import parse_employee_id_for_work_type employee_names = {} for record in records: base_id, _ = parse_employee_id_for_work_type(str(record.employee_id)) if base_id not in employee_names: - employee_names[base_id] = record.employee_name + try: + emp = Employee.query.filter_by(id=int(base_id)).first() + if emp: + employee_names[base_id] = f"{emp.lastName}, {emp.firstName}" + else: + # Fallback: use stored name if Employee table lookup fails + employee_names[base_id] = record.employee_name + logger_handler.logger.warning(f"Employee ID {base_id} not found in employee table during export; using stored name.") + except Exception as e: + employee_names[base_id] = record.employee_name + logger_handler.logger.warning(f"Could not lookup employee name for ID {base_id} during export: {e}") # Setup styles # White bold text on black background for column header row (no border) @@ -10001,11 +10014,24 @@ def export_time_attendance_by_building_excel(records, project_name_for_filename, ) # Get employee names map + # Look up from Employee table using the numeric base_id to get the correct name, + # regardless of what is stored in the employee_name column (which may contain + # work type characters such as 'Employee 3937SP' if imported with a decorated ID). employee_names = {} for record in records: base_id, _ = parse_employee_id_for_work_type(str(record.employee_id)) if base_id not in employee_names: - employee_names[base_id] = record.employee_name + try: + emp = Employee.query.filter_by(id=int(base_id)).first() + if emp: + employee_names[base_id] = f"{emp.lastName}, {emp.firstName}" + else: + # Fallback: use stored name if Employee table lookup fails + employee_names[base_id] = record.employee_name + logger_handler.logger.warning(f"Employee ID {base_id} not found in employee table during export (by-building); using stored name.") + except Exception as e: + employee_names[base_id] = record.employee_name + logger_handler.logger.warning(f"Could not lookup employee name for ID {base_id} during export (by-building): {e}") # Setup styles header_font = Font(name='Arial', size=11, bold=True, color='FFFFFF') @@ -10474,6 +10500,21 @@ def time_attendance_records(): else: record.qr_address = None record.location_accuracy = None + + # Resolve employee name by stripping work type prefix/suffix (SP, PW, PT) + # from employee_id ONLY for the lookup. The original employee_id is kept intact. + # e.g. '3937SP', 'SP3937', 'PW3937' -> lookup by numeric '3937' + try: + import re as _re + numeric_only = _re.search(r'\d+', str(record.employee_id or '')) + if numeric_only: + emp = Employee.query.filter_by(id=int(numeric_only.group(0))).first() + record.resolved_employee_name = f"{emp.lastName}, {emp.firstName}" if emp else record.employee_name + else: + record.resolved_employee_name = record.employee_name + except Exception as e: + logger_handler.logger.warning(f"Could not resolve employee name for ID {record.employee_id}: {e}") + record.resolved_employee_name = record.employee_name # Get unique employees and locations for filters unique_employees = TimeAttendance.get_unique_employees() diff --git a/templates/time_attendance_records.html b/templates/time_attendance_records.html index d69eba1..2b49093 100644 --- a/templates/time_attendance_records.html +++ b/templates/time_attendance_records.html @@ -164,7 +164,7 @@
- {{ record.employee_name }} + {{ record.resolved_employee_name }}
@@ -231,7 +231,7 @@ {% if session.role == 'admin' %}