StatusBadge: split badges per dimension (abnormal/late/early/OT <=30min); Attendance filter by status_code conditions for abnormal/late/early/OT/normal/leave types
This commit is contained in:
+35
-1
@@ -1267,7 +1267,41 @@ async def attendance_records(
|
||||
if status:
|
||||
q = q.filter(AttendanceRecord.status_code == status)
|
||||
if status_text:
|
||||
q = q.filter(AttendanceRecord.status_text.like(f"%{status_text}%"))
|
||||
# Map status_text filter to actual conditions
|
||||
if status_text == 'abnormal':
|
||||
q = q.filter(
|
||||
(AttendanceRecord.late_minutes > 30) |
|
||||
(AttendanceRecord.early_minutes > 30) |
|
||||
(AttendanceRecord.ot_minutes > 30)
|
||||
)
|
||||
elif status_text == 'late':
|
||||
q = q.filter(
|
||||
(AttendanceRecord.late_minutes > 0) &
|
||||
(AttendanceRecord.late_minutes <= 30)
|
||||
)
|
||||
elif status_text == 'early':
|
||||
q = q.filter(
|
||||
(AttendanceRecord.early_minutes > 0) &
|
||||
(AttendanceRecord.early_minutes <= 30)
|
||||
)
|
||||
elif status_text == 'ot':
|
||||
q = q.filter(
|
||||
(AttendanceRecord.ot_minutes > 0) &
|
||||
(AttendanceRecord.ot_minutes <= 30)
|
||||
)
|
||||
elif status_text == 'missing':
|
||||
q = q.filter(AttendanceRecord.status_code == 'missing')
|
||||
elif status_text in ('holiday', 'al', 'sl', 'cl', 'mixed_leave'):
|
||||
q = q.filter(AttendanceRecord.status_code == status_text)
|
||||
elif status_text == 'normal':
|
||||
q = q.filter(
|
||||
(AttendanceRecord.late_minutes == 0) &
|
||||
(AttendanceRecord.early_minutes == 0) &
|
||||
(AttendanceRecord.ot_minutes == 0)
|
||||
)
|
||||
else:
|
||||
# Fallback to text search
|
||||
q = q.filter(AttendanceRecord.status_text.like(f"%{status_text}%"))
|
||||
if search:
|
||||
like = f"%{search}%"
|
||||
q = q.filter(or_(
|
||||
|
||||
Reference in New Issue
Block a user