{% extends 'layouts/authenticated.html.twig' %} {% block page_title %}Licence {{ license.keyPrefix }}{% endblock %} {% set status_colors = { 'active': 'bg-green-100 text-green-800', 'suspended': 'bg-yellow-100 text-yellow-800', 'expired': 'bg-gray-100 text-gray-800', 'revoked': 'bg-red-100 text-red-800' } %} {% set status_labels = { 'active': 'Active', 'suspended': 'Suspendue', 'expired': 'Expirée', 'revoked': 'Révoquée' } %} {% set event_labels = { 'issued': 'Émise', 'renewed': 'Renouvelée', 'suspended': 'Suspendue', 'reactivated': 'Réactivée', 'revoked': 'Révoquée', 'activated': 'Activée (site)', 'heartbeat': 'Contact' } %} {% block content %}
← Licences

{{ license.company.name }}

{{ status_labels[license.status.value] }}
{# Clé affichée une seule fois après émission #} {% for key in app.flashes('license_key') %}

Clé de licence (copiez-la maintenant — non ré-affichée)

{{ key }}

{% endfor %}
Préfixe de clé
{{ license.keyPrefix }}…
Plan
{{ license.plan }}
Offre
{{ license.offerLabel }}
Émise le
{{ license.issuedAt|date('d/m/Y H:i') }}
Expiration
{{ license.expiresAt ? license.expiresAt|date('d/m/Y') : 'Perpétuelle' }}
Site lié
{{ license.siteUrl ?? '— (pas encore activé)' }}
Dernier contact
{{ license.lastSeenAt ? license.lastSeenAt|date('d/m/Y H:i') : '—' }}
{% if revealedKey %}

Clé révélée

{{ revealedKey }}

{% else %} Révéler la clé {% endif %}
{# Actions #} {% if license.status.value != 'revoked' %}

Actions

{% if license.status.value == 'active' %}
{% else %}
{% endif %}
{% endif %} {# Journal d'événements #}

Journal

    {% for event in license.events %}
  • {{ event_labels[event.type] ?? event.type }} {% if event.note %} — {{ event.note }}{% endif %} {% if event.actor %} · {{ event.actor.email }}{% endif %}
    {{ event.createdAt|date('d/m/Y H:i') }}
  • {% else %}
  • Aucun événement.
  • {% endfor %}
{% endblock %}