{% extends 'base.html.twig' %} {% block title %}Gestion des Échecs de Paiement - Admin{% endblock %} {% block stylesheets %} {{ parent() }} {% endblock %} {% block body %}

Gestion des Échecs de Paiement

{{ statistics.total_failures ?? 0 }}
Total Échecs
{{ statistics.pending_count ?? 0 }}
En Attente
{{ statistics.in_grace_count ?? 0 }}
Période de Grâce
{{ statistics.expired_grace_count ?? 0 }}
Grâce Expirée
{{ statistics.failure_rate ?? 0 }}%
Taux d'Échec
{% if recent_failures|length > 0 %}

Échecs Récents (En Attente)

{% for failure in recent_failures %} {% endfor %}
ID Membre Date Échec Raison Tentatives Statut Actions
{{ failure.id }} {{ failure.member.email }} {{ failure.failureDate|date('d/m/Y H:i') }} {{ failure.failureReason|trans }} {{ failure.attemptCount }} {{ failure.status|trans }} Détails
{% endif %} {% if grace_failures|length > 0 %}

Périodes de Grâce Actives

{% for failure in grace_failures %} {% endfor %}
ID Membre Date Échec Fin de Grâce Jours Restants Objets Masqués Actions
{{ failure.id }} {{ failure.member.email }} {{ failure.failureDate|date('d/m/Y H:i') }} {{ failure.graceEndDate|date('d/m/Y H:i') }} {% set remaining = failure.graceRemainingDays %} {{ remaining }} jour{{ remaining > 1 ? 's' : '' }} {% if failure.itemsMasked %} ✓ Masqués {% else %} Non {% endif %} Détails
{% endif %} {% if expired_grace_failures|length > 0 %}

Périodes de Grâce Expirées ({{ expired_grace_failures|length }})

{% for failure in expired_grace_failures %} {% endfor %}
ID Membre Date Échec Fin de Grâce Jours Dépassés Statut Actions
{{ failure.id }} {{ failure.member.email }} {{ failure.failureDate|date('d/m/Y H:i') }} {{ failure.graceEndDate|date('d/m/Y H:i') }} {{ (failure.graceEndDate.diff('now').days * -1) }} jour(s) {{ failure.status|trans }} Détails
{% endif %} {% if recent_failures|length == 0 and grace_failures|length == 0 and expired_grace_failures|length == 0 %}
🎉 Aucun échec de paiement en cours !
Tous les paiements sont à jour.
{% endif %}
{% endblock %}