{% extends "ui/templates/base/layout.html" %} {% block content %} {% include "modules/managers/templates/managers/_manager_tabs.html" %}

Employee Attendance

Review employee attendance, filter records, and manually mark attendance where required.

Employees
{% if can_approve_employee_attendance(current_user, current_user_permissions, current_user_roles) %}

Manual Attendance Marking

{% endif %}
{% for row in rows %} {% else %} {% endfor %}
Date Employee Punch Status Approval Timing Geo/IP Evidence Remarks Action
{{ row.attendance_date }}
{{ row.employee.full_name if row.employee else ('Employee #' ~ row.employee_id) }}
{{ row.employee.employee_code if row.employee else '' }}
In: {{ 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 '-') }}
Out: {{ 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.status.replace('_',' ').title() }} {{ row.approval_status.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 '-' }}
Weekly Off: {{ 'Yes' if row.is_weekly_off else 'No' }}
Source: {{ (row.source or '-').replace('_',' ').title() }}
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() }}
{{ row.remarks or row.review_notes or '-' }} {% if can_approve_employee_attendance(current_user, current_user_permissions, current_user_roles) %}
{% else %}-{% endif %}
No attendance records found.
{% endblock %}