{% extends 'base.html.twig' %} {% block title %}Tableau de bord - RentAuto{% endblock %} {% block content %}
{# ── En-tête ─────────────────────────────────────────────────────────── #}

Tableau de bord

{{ today|date('d/m/Y') }} — vue d'ensemble de l'agence

Nouveau contrat
{# ── KPI Cards ───────────────────────────────────────────────────────── #}
{# Contrats actifs #} {% set activeCount = contractsByStatus['En cours'] ?? 0 %} {# Contrats en retard #} {% set overdueCount = contractsByStatus['En retard'] ?? 0 %} {# Véhicules disponibles #} {% set availableCount = carsByStatus['Disponible'] ?? 0 %} {# Revenus du mois #}
{{ revenueThisMonth|number_format(0, '.', ' ') }} MAD
Revenus ce mois {% if revenueEvolution is not null %} {{ revenueEvolution|abs }}% {% endif %}
{# ── Alertes + Statut flotte ─────────────────────────────────────────── #}
{# Retards #} {% if overdueContracts|length > 0 %}
Retours en retard ({{ overdueContracts|length }})
    {% for c in overdueContracts %}
  • {{ c.contractNumber }}
    {{ c.customer.firstName }} {{ c.customer.lastName }} — {{ c.car.brand }} {{ c.car.model }}
    {{ c.endDate|date('d/m') }}
  • {% endfor %}
{% endif %} {# Retours prévus aujourd'hui #} {% if dueToday|length > 0 %}
Retours prévus aujourd'hui ({{ dueToday|length }})
    {% for c in dueToday %}
  • {{ c.contractNumber }}
    {{ c.customer.firstName }} {{ c.customer.lastName }} — {{ c.car.brand }} {{ c.car.model }}
  • {% endfor %}
{% endif %} {# Assurances expirant bientôt #} {% if insuranceExpiring|length > 0 %}
Assurances expirant < 30j ({{ insuranceExpiring|length }})
    {% for car in insuranceExpiring %}
  • {{ car.brand }} {{ car.model }}
    {{ car.registrationNumber }}
    {{ car.insuranceExpirationDate|date('d/m/Y') }}
  • {% endfor %}
{% endif %} {# Statut de la flotte — toujours visible #}
Statut de la flotte
{% set fleetStatuses = [ { key: 'Disponible', label: 'Disponibles', color: 'success' }, { key: 'Louée', label: 'Louées', color: 'primary' }, { key: 'Réservée', label: 'Réservées', color: 'info' }, { key: 'Maintenance', label: 'En maintenance', color: 'warning' }, { key: 'Retirée', label: 'Retirées', color: 'secondary' }, ] %} {% set totalFleet = carsByStatus|reduce((carry, v) => carry + v, 0) %} {% for s in fleetStatuses %} {% set cnt = carsByStatus[s.key] ?? 0 %} {% if cnt > 0 %}
{{ s.label }} {{ cnt }}
{% endif %} {% endfor %} {% if totalFleet == 0 %}

Aucun véhicule enregistré.

{% else %}
Total flotte {{ totalFleet }} véhicules
{% endif %}
{# ── Graphique revenus + maintenance ─────────────────────────────────── #}
{# Revenus 6 derniers mois #}
Revenus — 6 derniers mois (MAD)
{% set monthNames = ['Jan','Fév','Mar','Avr','Mai','Jun','Jul','Aoû','Sep','Oct','Nov','Déc'] %} {% if revenueByMonth is empty %}

Aucune donnée disponible.

{% else %} {% set maxRev = 0 %} {% for row in revenueByMonth %} {% if row.total|number_format(2,'.','') > maxRev %} {% set maxRev = row.total|number_format(2,'.','') %} {% endif %} {% endfor %}
{% for row in revenueByMonth %} {% set pct = maxRev > 0 ? ((row.total / maxRev) * 100)|round : 0 %}
{{ row.total|number_format(0, '.', ' ') }}
{{ monthNames[row.mo - 1] }}
{{ row.yr }}
{% endfor %}
{% endif %}
{# Véhicules en maintenance #}
En maintenance ({{ underMaintenance|length }})
Gérer
{% if underMaintenance is empty %}

Aucun véhicule en maintenance.

{% else %}
    {% for car in underMaintenance %}
  • {{ car.brand }} {{ car.model }}
    {{ car.registrationNumber }}
    Maintenance
  • {% endfor %}
{% endif %}
{% endblock %}