{% extends '@App/app.html.twig' %} {% block title %}Demande {{ request.reference }}{% endblock %} {% block page_header %}{% endblock %} {% block content %} {% set history = history|default([]) %} {% set team_calendar = team_calendar|default({days: [], rows: [], conflict_count: 0, conflicts: []}) %} {% set status_labels = status_labels|default({ draft: 'Brouillon', submitted: 'Soumise', pending_manager: 'Att. manager', pending_rh: 'Att. RH', approved: 'Approuvée', refused: 'Refusée', cancelled: 'Annulée', cancel_requested: 'Annulation demandée', expired: 'Expirée' }) %} {% set balance_current = balance_current|default(null) %} {% set balance_after = balance_after|default(null) %} {% set status_tones = { draft: 'muted', submitted: 'info', pending_manager: 'warning', pending_rh: 'warning', approved: 'success', refused: 'muted', cancelled: 'muted', cancel_requested: 'warning', expired: 'muted' } %} {% set status_label = status_labels[request.status]|default(request.status|replace({'_': ' '})|capitalize) %} {% set status_tone = status_tones[request.status]|default('muted') %} {% set day_names = {1: 'Lundi', 2: 'Mardi', 3: 'Mercredi', 4: 'Jeudi', 5: 'Vendredi', 6: 'Samedi', 7: 'Dimanche'} %} {% set salarie = request.salarie %} {% set manager = request.manager %} {% set salarie_photo = salarie.photo ? salarie.photo|trim : null %} {% set salarie_avatar = salarie_photo ? (salarie_photo starts with 'http://' or salarie_photo starts with 'https://' ? salarie_photo : asset(salarie_photo starts with '/' ? salarie_photo|slice(1) : salarie_photo)) : null %} {% set salarie_initials = ((salarie.prenom|default('')|first) ~ (salarie.nom|default('')|first))|upper ?: 'S' %} {% set manager_photo = manager and manager.photo ? manager.photo|trim : null %} {% set manager_avatar = manager_photo ? (manager_photo starts with 'http://' or manager_photo starts with 'https://' ? manager_photo : asset(manager_photo starts with '/' ? manager_photo|slice(1) : manager_photo)) : null %} {% set manager_initials = manager ? (((manager.prenom|default('')|first) ~ (manager.nom|default('')|first))|upper ?: 'M') : 'M' %} {% set can_validate = request.status in ['submitted', 'pending_manager', 'pending_rh'] and is_granted('LEAVE_APPROVE', request) %} {% set can_refuse = request.status in ['submitted', 'pending_manager', 'pending_rh'] and is_granted('LEAVE_REFUSE', request) %} {% set can_edit = is_granted('LEAVE_EDIT', request) %} {% set can_submit = request.status in ['draft', 'refused'] and is_granted('LEAVE_SUBMIT', request) %} {% set can_cancel = request.status not in ['cancelled', 'approved'] and is_granted('LEAVE_CANCEL', request) %} {% set back_route = is_granted('LEAVE_VIEW_ALL') ? 'app_leave_index' : 'app_leave_my' %}

Demande {{ request.reference }} {{ status_label }}

Salarié {% if salarie_avatar %} {{ salarie }} {% else %} {{ salarie_initials }} {% endif %} {{ salarie }} {{ salarie.employeeService|default(salarie.service|default('Service non renseigné')) }} · {{ salarie.typeCollaborateur|default('Salarié') }}
Manager {% if manager %} {% if manager_avatar %} {{ manager }} {% else %} {{ manager_initials }} {% endif %} {{ manager }} {{ manager.employeeService|default(manager.service|default('Manager')) }} {% else %} Non renseigné {% endif %}
Type de congé {{ request.leaveType.nom }}
Durée {{ request.durationDays|number_format(request.durationDays == request.durationDays|round ? 0 : 1, ',', ' ') }} jours ouvrés
Date de début {{ request.startDate|date('d/m/Y') }}
Date de fin {{ request.endDate|date('d/m/Y') }}
Solde actuel {{ balance_current is not null ? balance_current|number_format(1, ',', ' ') : '—' }}{% if balance_current is not null %} j{% endif %} Avant validation
Solde après validation {{ balance_after is not null ? balance_after|number_format(1, ',', ' ') : '—' }}{% if balance_after is not null %} j{% endif %} Si approuvée
{% if request.status in ['submitted', 'pending_manager', 'pending_rh'] %} En attente de validation{% if manager %} par {{ manager }}{% endif %}. Soumise le {{ request.submittedAt ? request.submittedAt|date('d/m/Y') : request.createdAt|date('d/m/Y') }}. {% elseif request.status == 'approved' %} Demande approuvée le {{ request.approvedAt ? request.approvedAt|date('d/m/Y') : request.updatedAt|date('d/m/Y') }}. {% elseif request.status == 'refused' %} Demande refusée le {{ request.refusedAt ? request.refusedAt|date('d/m/Y') : request.updatedAt|date('d/m/Y') }}. {% else %} Statut actuel : {{ status_label }}. {% endif %}
{% if can_submit %}
{% endif %} {% if can_validate %} {% endif %} {% if can_refuse %} {% endif %} {% if can_edit %} Modifier {% endif %}
{% if can_cancel %} {% endif %}
{% if can_validate %}
{% endif %} {% if can_refuse %}
{% endif %} {% if can_cancel %}
{% endif %}

Calendrier équipe {% if team_calendar.period_start|default(null) %} — Période du {{ team_calendar.period_start|date('d/m/Y') }} au {{ team_calendar.period_end|date('d/m/Y') }} {% endif %}

{{ team_calendar.conflict_count|default(0) }} conflit{{ team_calendar.conflict_count|default(0) > 1 ? 's' : '' }} détecté{{ team_calendar.conflict_count|default(0) > 1 ? 's' : '' }}
{% for day in team_calendar.days %} {% endfor %} {% for row in team_calendar.rows %} {% set row_photo = row.salarie.photo ? row.salarie.photo|trim : null %} {% set row_avatar = row_photo ? (row_photo starts with 'http://' or row_photo starts with 'https://' ? row_photo : asset(row_photo starts with '/' ? row_photo|slice(1) : row_photo)) : null %} {% set row_initials = ((row.salarie.prenom|default('')|first) ~ (row.salarie.nom|default('')|first))|upper ?: 'S' %} {% for cell in row.cells %} {% endfor %} {% else %} {% endfor %}
Collaborateur{{ day.label }}
{% if row_avatar %} {{ row.salarie }} {% else %} {{ row_initials }} {% endif %} {{ row.salarie }} {{ cell.label }}
Aucune donnée d'équipe disponible.
Demande en cours Absent (conflit) Absent (validé)

Détail journalier

{% for day in request.days %} {% else %} {% endfor %}
Date Jour Décompté Motif
{{ day.date|date('d/m/Y') }} {{ day_names[day.date|date('N')] }} {{ day.duration|number_format(day.duration == day.duration|round ? 0 : 1, ',', ' ') }} j {{ day.label ?: (day.weekend ? 'Week-end' : request.leaveType.nom) }}
Aucun détail journalier.
Total {{ request.durationDays|number_format(request.durationDays == request.durationDays|round ? 0 : 1, ',', ' ') }} j {{ request.leaveType.nom }}

Commentaires

{% if request.employeeComment %}
{% if salarie_avatar %}{{ salarie }}{% else %}{{ salarie_initials }}{% endif %}
{{ salarie }} Salarié
{{ request.employeeComment|nl2br }}
{% endif %} {% if request.managerComment %}
{% if manager_avatar %}{{ manager }}{% else %}{{ manager_initials }}{% endif %}
{{ manager ?: 'Manager' }} Manager
{{ request.managerComment|nl2br }}
{% endif %} {% if request.rhComment %}
RH
RH RH
{{ request.rhComment|nl2br }}
{% endif %} {% for item in history %} {% if item.action == 'comment' %} {% set actor = item.user %} {% set actor_salarie = actor ? actor.salarie : null %} {% set actor_name = actor ? ((actor.prenom|default('') ~ ' ' ~ actor.nom|default(''))|trim ?: actor.email) : 'Système' %} {% set actor_photo = actor_salarie and actor_salarie.photo ? actor_salarie.photo|trim : (actor and actor.image ? actor.image|trim : null) %} {% set actor_avatar = actor_photo ? (actor_photo starts with 'http://' or actor_photo starts with 'https://' ? actor_photo : asset(actor_photo starts with '/' ? actor_photo|slice(1) : actor_photo)) : null %} {% set actor_initials = actor ? (((actor.prenom|default('')|first) ~ (actor.nom|default('')|first))|upper ?: 'U') : 'S' %}
{% if actor_avatar %}{{ actor_name }}{% else %}{{ actor_initials }}{% endif %}
{{ actor_name }} {{ item.createdAt|date('d/m/Y H:i') }}
{{ item.message|nl2br }}
{% endif %} {% endfor %} {% if not request.employeeComment and not request.managerComment and not request.rhComment and history|filter(item => item.action == 'comment')|length == 0 %}
Aucun commentaire pour le moment...
{% endif %}

Historique

Date Utilisateur Action Message
{% for item in history %} {% set actor = item.user %} {% set actor_name = actor ? ((actor.prenom|default('') ~ ' ' ~ actor.nom|default(''))|trim ?: actor.email) : 'Système' %}
{{ item.createdAt|date('d/m/Y H:i') }} {{ actor_name }} {{ item.action|replace({'_': ' '})|capitalize }} {{ item.message }}
{% else %}
Aucun historique.
{% endfor %}
{% endblock %}