{% extends "base.html" %} {% block title %}Reporte de Asistencia{% endblock %} {% block page_title %}📊 Reporte de Asistencia{% endblock %} {% block content %}
âś• Limpiar
Total registros
{{ registros|length }}
DĂ­as con asistencia
{{ registros|selectattr('entrada')|list|length }}
Horas promedio/dĂ­a
{% set total_horas = namespace(v=0) %} {% set con_salida = namespace(n=0) %} {% for r in registros %}{% if r.salida %}{% set total_horas.v = total_horas.v + r.duracion_horas() %}{% set con_salida.n = con_salida.n + 1 %}{% endif %}{% endfor %}
{{ '%.1f'|format(total_horas.v / con_salida.n if con_salida.n > 0 else 0) }}h
{% if registros %} {% for r in registros %} {% endfor %}
Fecha Empleado Local Entrada Salida Horas Dist. Entrada Estado
{{ r.fecha.strftime('%d/%m/%Y') }} {{ r.empleado.nombre }} {{ locales[r.local].icono if r.local in locales else '🏪' }} {{ locales[r.local].nombre if r.local in locales else r.local }} {{ r.entrada.strftime('%H:%M') if r.entrada else '—' }} {{ r.salida.strftime('%H:%M') if r.salida else '—' }} {% if r.salida %}{{ '%.1f'|format(r.duracion_horas()) }} hrs{% else %}En curso{% endif %} {{ '%.0f'|format(r.distancia_entrada) if r.distancia_entrada else '—' }}m {{ '✓ Válida' if r.valida else '✕ Inválida' }}
{% else %}

No hay registros para los filtros seleccionados

{% endif %}
{% endblock %}