{% extends '@TimeClock/time_clock/layout.html.twig' %}{% import '@TimeClock/time_clock/_macros.html.twig' as ui %} {% block title %}Tableau de bord pointeuse{% endblock %} {% block tc_content %}
Pointeuse Tableau de bord

Tableau de bord pointeuse En direct

{{ 'now'|date('l d F Y')|capitalize }} · Dernière mise à jour : {{ 'now'|date('H:i:s') }}

Exporter Traiter les anomalies {{ kpis.anomalies }} Voir le QR code
{% set cards=[['walk','green',kpis.working,'Salariés au travail'],['coffee','blue',kpis.break,'Salariés en pause'],['user-x','red',kpis.not_clocked,'Non pointés'],['alert-triangle','orange',kpis.anomalies,'Anomalies ouvertes'],['edit','yellow',kpis.corrections,'Corrections en attente'],['calendar-check','purple',kpis.validations,'Journées à valider']] %}{% for c in cards %}
{{ c[2] }}{{ c[3] }}
{% endfor %}

État en temps réel {{ employees|length }} salariés

{% for employee in employees|slice(0,8) %}{% set employeeSession = null %}{% for s in today_sessions %}{% if s.salarie.id == employee.id %}{% set employeeSession = s %}{% endif %}{% endfor %}{% else %}{% endfor %}
SalariéServiceÉtatDernier pointageDurée
{{ ui.initials(employee) }}
{{ employee }}{{ employee.poste ?: 'Collaborateur' }}
{{ employee.service ?: '—' }}{% if employeeSession %}{{ ui.status(employeeSession.status) }}{% else %}Non pointé{% endif %}{% if employeeSession %} Entrée {{ employeeSession.clockInAt|date('H:i') }}{% else %}—{% endif %}{{ employeeSession ? ui.duration(employeeSession.netWorkedMinutes) : '—' }}{% if employeeSession %}Voir{% endif %}
Aucun salarié actif.

Anomalies critiques {{ kpis.anomalies }} ouvertes

Tout traiter
{% for anomaly in anomalies|filter(a => a.status == 'open')|slice(0,4) %}{% else %}{% endfor %}
SalariéTypeDateSévéritéStatut
{{ anomaly.salarie }}{{ ui.anomaly(anomaly.type) }}{{ anomaly.detectedAt|date('d/m/Y') }}{{ anomaly.severity == 'blocking' ? 'Bloquant':'Avertissement' }}{{ ui.status(anomaly.status) }}Traiter
Aucune anomalie ouverte.
{% endblock %}