{% extends "ui/templates/base/layout.html" %} {% block content %}
Punch in/out and view your recent attendance records. Times are documented in your branch timezone.
Location will be captured when your mobile browser allows it. If you are outside the branch geofence, the attendance is saved as pending approval for OD/client visit review.
{{ attendance_punch_blocked_reason or 'Please open the ERP on your mobile phone to mark punch-in or punch-out. You can continue viewing attendance history from desktop.' }}
| Date | Punch In | Punch Out | Duration | Status | Approval | Timing Rule | Geo/IP |
|---|---|---|---|---|---|---|---|
| {{ row.attendance_date }} | {{ row.punch_in_local_at.strftime('%H:%M') if row.punch_in_local_at else (row.punch_in_utc.strftime('%H:%M UTC') if row.punch_in_utc else '-') }} | {{ row.punch_out_local_at.strftime('%H:%M') if row.punch_out_local_at else (row.punch_out_utc.strftime('%H:%M UTC') if row.punch_out_utc else '-') }} | {{ (row.work_duration_minutes ~ ' min') if row.work_duration_minutes else '-' }} | {{ row.status.replace('_',' ').title() }} | {{ row.approval_status.replace('_',' ').title() }} |
TZ: {{ row.branch_timezone or 'Asia/Kolkata' }}
Rule: {{ (row.attendance_rule_status or '-').replace('_',' ').title() }}
Late: {{ (row.late_by_minutes ~ ' min') if row.late_by_minutes else '-' }}
|
Geo: {{ (row.punch_in_geo_status or '-').replace('_',' ').title() }}
Distance: {{ (row.punch_in_distance_meters ~ ' m') if row.punch_in_distance_meters is not none else '-' }}
IP: {{ (row.punch_in_ip_status or '-').replace('_',' ').title() }}
|
| No attendance records found. | |||||||