Files
crm_ecosplay/templates/pdf/rgpd_access.html.twig
Serreau Jovann f0a5fdc849 refactor: suppression duplication templates PDF RGPD + test 100% DevisPdfController
Templates PDF :
- _base.html.twig : blocs verify_box et hmac_section avec contenu par défaut
  (QR code, verify_url, HMAC-SHA256) au lieu de blocs vides
- rgpd_access.html.twig : suppression blocs verify_box et hmac_section dupliqués
  (héritent du parent)
- rgpd_deletion.html.twig : idem
- rgpd_no_data.html.twig : idem

DevisPdfControllerTest (8 tests) :
- testDevisNotFound : devis null lance NotFoundHttpException
- testUnsignedPdfNotSet : unsignedPdf null lance NotFoundHttpException
- testFileNotExists : fichier absent lance NotFoundHttpException
- testUnsignedPdfSuccess : PDF unsigned retourné en BinaryFileResponse
- testSignedPdfSuccess : PDF signed retourné
- testAuditPdfSuccess : PDF audit retourné
- testAccessAsNonEmploye : accès sans ROLE_EMPLOYE (branche checkAccess)
- testDefaultTypeNull : type inconnu lance NotFoundHttpException

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 11:05:44 +02:00

44 lines
2.3 KiB
Twig

{% extends 'pdf/_base.html.twig' %}
{% block title %}Attestation RGPD - Acces aux donnees{% endblock %}
{% block extra_styles %}
.info-cell { border-left: 3px solid #4338ca; }
.doc-type { background: #4338ca; }
.session-meta { font-size: 9px; color: #666; margin: 2px 0 6px; }
.session-meta strong { color: #111827; }
.no-data { padding: 8px; background: #f9fafb; border: 2px dashed #d1d5db; font-style: italic; color: #999; text-align: center; font-size: 9px; }
{% endblock %}
{% block content %}
<span class="doc-type">Droit d'acces</span>
<h1>Donnees personnelles</h1>
<div class="subtitle">RGPD &mdash; Article 15</div>
<div class="info-grid">
<div class="info-row">
<div class="info-cell" style="width: 25%;"><span class="info-label">Reference</span><span class="info-value">{{ attestation.reference }}</span></div>
<div class="info-cell" style="width: 25%;"><span class="info-label">Date</span><span class="info-value">{{ date|date('d/m/Y a H:i') }}</span></div>
<div class="info-cell" style="width: 25%;"><span class="info-label">Adresse IP</span><span class="info-value">{{ ip }}</span></div>
<div class="info-cell" style="width: 25%;"><span class="info-label">Sessions</span><span class="info-value">{{ data|length }}</span></div>
</div>
</div>
{% for entry in data %}
<h2>Session #{{ loop.index }}</h2>
<div class="session-meta"><strong>ID :</strong> {{ entry.visitor.id }} &mdash; <strong>Visite :</strong> {{ entry.visitor.createdAt|date('d/m/Y H:i') }}</div>
{% if entry.events|length > 0 %}
<table class="data">
<thead><tr><th style="width: 25%;">Date</th><th style="width: 20%;">Type</th><th style="width: 55%;">Page</th></tr></thead>
<tbody>
{% for event in entry.events %}
<tr><td>{{ event.createdAt|date('d/m/Y H:i:s') }}</td><td>{{ event.type }}</td><td>{{ event.page }}</td></tr>
{% endfor %}
</tbody>
</table>
{% else %}
<div class="no-data">Aucun evenement enregistre.</div>
{% endif %}
{% endfor %}
{% endblock %}