Updated Time Attendance export filename included project name

This commit is contained in:
2025-10-13 12:47:41 -04:00
parent 0a24bee3bb
commit 97e3d4aa99
+31 -15
View File
@@ -4675,11 +4675,11 @@ def generate_excel_export():
# Format: [project_name_]attendance_report_[fromdate_todate].xlsx # Format: [project_name_]attendance_report_[fromdate_todate].xlsx
date_range_str = '' date_range_str = ''
if date_from_formatted and date_to_formatted: if date_from_formatted and date_to_formatted:
date_range_str = f"{date_from_formatted}_{date_to_formatted}_" date_range_str = f"{date_from_formatted}_{date_to_formatted}"
elif date_from_formatted: elif date_from_formatted:
date_range_str = f"{date_from_formatted}_" date_range_str = f"{date_from_formatted}"
elif date_to_formatted: elif date_to_formatted:
date_range_str = f"{date_to_formatted}_" date_range_str = f"{date_to_formatted}"
filename = f'{project_name_for_filename}attendance_report_{date_range_str}.xlsx' filename = f'{project_name_for_filename}attendance_report_{date_range_str}.xlsx'
@@ -7209,15 +7209,25 @@ def export_time_attendance():
flash('No records found to export.', 'warning') flash('No records found to export.', 'warning')
return redirect(url_for('time_attendance_records')) return redirect(url_for('time_attendance_records'))
# Get project name if project filter exists
project_name_for_filename = ''
if project_filter:
try:
from models.project import Project
project = Project.query.get(int(project_filter))
if project:
# Replace spaces and special characters with underscores
project_name_safe = project.name.replace(' ', '_').replace('/', '_').replace('\\', '_')
project_name_for_filename = f"{project_name_safe}_"
except Exception as e:
print(f"⚠️ Error getting project name for filename: {e}")
# Log export # Log export
logger_handler.logger.info( logger_handler.logger.info(
f"User {session['username']} exported {len(records)} time attendance records " f"User {session['username']} exported {len(records)} time attendance records "
f"in {export_format.upper()} format" f"in {export_format.upper()} format"
) )
# Generate filename
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
# Format dates for filename (MMDDYYYY format) # Format dates for filename (MMDDYYYY format)
date_from_formatted = '' date_from_formatted = ''
date_to_formatted = '' date_to_formatted = ''
@@ -7236,14 +7246,14 @@ def export_time_attendance():
pass pass
# Build filename with date range # Build filename with date range
# Format: time_attendance_[fromdate_todate].xlsx/csv # Format: [project_name_]time_attendance_[fromdate_todate].xlsx/csv
date_range_str = '' date_range_str = ''
if date_from_formatted and date_to_formatted: if date_from_formatted and date_to_formatted:
date_range_str = f"{date_from_formatted}_{date_to_formatted}" date_range_str = f"{date_from_formatted}_{date_to_formatted}"
elif date_from_formatted: elif date_from_formatted:
date_range_str = f"{date_from_formatted}" date_range_str = f"from_{date_from_formatted}"
elif date_to_formatted: elif date_to_formatted:
date_range_str = f"{date_to_formatted}" date_range_str = f"to_{date_to_formatted}"
# Keep the filter_str for backward compatibility (but not in filename anymore) # Keep the filter_str for backward compatibility (but not in filename anymore)
filter_desc = [] filter_desc = []
@@ -7256,9 +7266,9 @@ def export_time_attendance():
# Export based on format # Export based on format
if export_format == 'excel' or export_format == 'xlsx': if export_format == 'excel' or export_format == 'xlsx':
return export_time_attendance_excel(records, timestamp, date_range_str, filter_str) return export_time_attendance_excel(records, project_name_for_filename, date_range_str, filter_str)
else: else:
return export_time_attendance_csv(records, timestamp, date_range_str, filter_str) return export_time_attendance_csv(records, project_name_for_filename, date_range_str, filter_str)
except Exception as e: except Exception as e:
logger_handler.logger.error(f"Error exporting time attendance records: {e}") logger_handler.logger.error(f"Error exporting time attendance records: {e}")
@@ -7266,7 +7276,7 @@ def export_time_attendance():
return redirect(url_for('time_attendance_records')) return redirect(url_for('time_attendance_records'))
def export_time_attendance_csv(records, timestamp, date_range_str, filter_str): def export_time_attendance_csv(records, project_name_for_filename, date_range_str, filter_str):
"""Generate CSV export of time attendance records""" """Generate CSV export of time attendance records"""
import csv import csv
import io import io
@@ -7304,7 +7314,10 @@ def export_time_attendance_csv(records, timestamp, date_range_str, filter_str):
# Prepare response with new filename format # Prepare response with new filename format
output.seek(0) output.seek(0)
filename = f'time_attendance_{date_range_str}.csv' if date_range_str:
filename = f'{project_name_for_filename}time_attendance_{date_range_str}.csv'
else:
filename = f'{project_name_for_filename}time_attendance.csv'
return Response( return Response(
output.getvalue(), output.getvalue(),
@@ -7314,7 +7327,7 @@ def export_time_attendance_csv(records, timestamp, date_range_str, filter_str):
} }
) )
def export_time_attendance_excel(records, timestamp, date_range_str, filter_str): def export_time_attendance_excel(records, project_name_for_filename, date_range_str, filter_str):
"""Generate Excel export of time attendance records""" """Generate Excel export of time attendance records"""
import io import io
from openpyxl import Workbook from openpyxl import Workbook
@@ -7378,7 +7391,10 @@ def export_time_attendance_excel(records, timestamp, date_range_str, filter_str)
output.seek(0) output.seek(0)
# New filename format # New filename format
filename = f'time_attendance_{date_range_str}.xlsx' if date_range_str:
filename = f'{project_name_for_filename}time_attendance_{date_range_str}.xlsx'
else:
filename = f'{project_name_for_filename}time_attendance.xlsx'
return send_file( return send_file(
output, output,