Time Attendance dashboard layout changed

This commit is contained in:
Nguyen Ngo
2025-09-18 17:18:06 -04:00
parent b9d40460f0
commit 8a0f4e8f4b
2 changed files with 353 additions and 311 deletions
+54 -41
View File
@@ -6449,59 +6449,72 @@ def employee_detail(employee_index):
flash('Error loading employee details. Please try again.', 'error')
return redirect(url_for('employees'))
"""
Time Attendance Routes for QR Attendance Management System
==========================================================
Routes for managing time attendance data import and display functionality.
Add these routes to your main app.py file.
"""
from flask import render_template, request, redirect, url_for, flash, jsonify
from werkzeug.utils import secure_filename
import os
from datetime import datetime, date
from models.time_attendance import TimeAttendance
from time_attendance_import_service import TimeAttendanceImportService
# Add this to your existing app.py imports and route definitions
@app.route('/time-attendance')
@login_required
@log_user_activity('time_attendance_view')
def time_attendance_dashboard():
"""Display time attendance dashboard"""
"""Display time attendance dashboard with table layout"""
try:
# Get summary statistics
total_records = TimeAttendance.query.count()
unique_employees = db.session.query(TimeAttendance.employee_id).distinct().count()
unique_locations = db.session.query(TimeAttendance.location_name).distinct().count()
# Initialize default values
total_records = 0
unique_employees = 0
unique_locations = 0
recent_imports = []
recent_records = []
employees = []
locations = []
# Get recent imports (last 10 import batches)
recent_imports = db.session.query(
TimeAttendance.import_batch_id,
TimeAttendance.import_date,
TimeAttendance.import_source,
db.func.count(TimeAttendance.id).label('record_count')
).filter(
TimeAttendance.import_batch_id.isnot(None)
).group_by(
TimeAttendance.import_batch_id,
TimeAttendance.import_date,
TimeAttendance.import_source
).order_by(
TimeAttendance.import_date.desc()
).limit(10).all()
# Get filter options
employees = TimeAttendance.get_unique_employees()
locations = TimeAttendance.get_unique_locations()
# Try to get data from TimeAttendance model if it exists
try:
from models.time_attendance import TimeAttendance
# Get summary statistics
total_records = TimeAttendance.query.count()
if total_records > 0:
unique_employees = db.session.query(TimeAttendance.employee_id).distinct().count()
unique_locations = db.session.query(TimeAttendance.location_name).distinct().count()
# Get recent records (last 20 records for table display)
recent_records = TimeAttendance.query.order_by(
TimeAttendance.attendance_date.desc(),
TimeAttendance.attendance_time.desc()
).limit(20).all()
# Get recent imports (last 10 import batches)
recent_imports = db.session.query(
TimeAttendance.import_batch_id,
TimeAttendance.import_date,
TimeAttendance.import_source,
db.func.count(TimeAttendance.id).label('record_count')
).filter(
TimeAttendance.import_batch_id.isnot(None)
).group_by(
TimeAttendance.import_batch_id,
TimeAttendance.import_date,
TimeAttendance.import_source
).order_by(
TimeAttendance.import_date.desc()
).limit(10).all()
# Get filter options
employees = TimeAttendance.get_unique_employees()
locations = TimeAttendance.get_unique_locations()
except ImportError:
# TimeAttendance model doesn't exist yet - use defaults
pass
except Exception as e:
# Database table doesn't exist yet or other error - use defaults
print(f"TimeAttendance query error: {e}")
pass
return render_template('time_attendance_dashboard.html',
total_records=total_records,
unique_employees=unique_employees,
unique_locations=unique_locations,
recent_imports=recent_imports,
recent_records=recent_records,
employees=employees,
locations=locations)