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

My Attendance

Punch in/out and view your recent attendance records. Times are documented in your branch timezone.

{% for error in errors or [] %}
{{ error }}
{% endfor %} {% if not employee %}
Your login is not linked to an employee profile yet. Please request employee linkage first.
{% else %}
Today
{{ today_attendance.attendance_date if today_attendance else 'Not marked' }}
Punch In
{{ today_attendance.punch_in_local_at.strftime('%H:%M') if today_attendance and today_attendance.punch_in_local_at else (today_attendance.punch_in_utc.strftime('%H:%M UTC') if today_attendance and today_attendance.punch_in_utc else '-') }}
Punch Out
{{ today_attendance.punch_out_local_at.strftime('%H:%M') if today_attendance and today_attendance.punch_out_local_at else (today_attendance.punch_out_utc.strftime('%H:%M UTC') if today_attendance and today_attendance.punch_out_utc else '-') }}

Today's Action

{% if is_mobile_attendance_device %}

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.

Location not captured yet.
{% else %}
Attendance marking is mobile-only.

{{ 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.' }}

{% endif %}
{% for row in rows %} {% else %} {% endfor %}
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.
{% endif %}
{% if employee and is_mobile_attendance_device %} {% endif %} {% endblock %}