{% extends '@App/app.html.twig' %} {% block title %}Tableau de bord planning{% endblock %} {% block page_header %}{% endblock %} {% set schedule_status = { draft: {label: 'Brouillon', tone: 'warning'}, ready: {label: 'Prêt à publier', tone: 'success'}, published: {label: 'Publié', tone: 'info'}, modified_after_publication: {label: 'Modifié', tone: 'warning'}, locked: {label: 'Verrouillé', tone: 'muted'}, archived: {label: 'Archivé', tone: 'muted'}, cancelled: {label: 'Annulé', tone: 'danger'} } %} {% set day_labels = ['LUN', 'MAR', 'MER', 'JEU', 'VEN', 'SAM', 'DIM'] %} {% block content %}

Tableau de bord planning

Vue d'ensemble et pilotage de la gestion des plannings Staffelia

Plannings à publier {{ stats.to_publish|default(0) }} + {{ schedules_to_publish|length }} depuis hier
{#
Shifts non affectés {{ stats.unassigned|default(0) }} Action requise
#}
Conflits ouverts {{ stats.conflicts|default(0) }} {{ stats.blocking_conflicts|default(0) }} bloquant{{ stats.blocking_conflicts|default(0) > 1 ? 's' : '' }}
Heures planifiées {{ stats.week_hours|default(0)|number_format(0, ',', ' ') }} h Cette semaine
Modifs récentes {{ stats.recent_changes|default(0) }} Dernières 24h

Plannings à publier

Tout voir
{% for schedule in schedules_to_publish %} {% set status = schedule_status[schedule.status]|default({label: schedule.status|capitalize, tone: 'muted'}) %} {% set schedule_conflict_count = schedule_conflicts[schedule.id]|default(0) %} {% else %} {% endfor %}
Planning Établissement Statut Conflits Actions
{{ schedule.title }} {{ schedule.periodStart|date('d/m/Y') }} au {{ schedule.periodEnd|date('d/m/Y') }} {{ schedule.etablissement ? schedule.etablissement.nom : 'Tous les établissements' }} {{ status.label }}{{ schedule_conflict_count > 0 ? schedule_conflict_count : '—' }} {{ schedule.status == 'draft' ? 'Continuer' : 'Voir' }}
Aucun planning à publier.
{#

Shifts non affectés

{% for shift in unassigned_shifts %}
{{ day_labels[(shift.date|date('N')) - 1]|default('') }} {{ shift.startTime|date('H:i') }}-{{ shift.endTime|date('H:i') }} {{ shift.title }} {{ shift.requiredEmployees }} poste{{ shift.requiredEmployees > 1 ? 's' : '' }} ouvert{{ shift.requiredEmployees > 1 ? 's' : '' }}
{% else %}
Tous les shifts sont affectés.
{% endfor %}
#}

Aperçu de la semaine

Matin Après-midi Absence
{% for day in week_preview.days %}
{{ day_labels[(day.date|date('N')) - 1]|default('') }} {{ day.date|date('d') }}
{% for item in day.items|slice(0, 3) %} {{ item.label }} {% else %} {% endfor %}
{% endfor %}
{% endblock %}