Export CSV des relevés d'une source

- ExportController::sourceCsv() : génère un CSV avec BOM UTF-8 (compatible Excel)
  séparateur point-virgule, en-têtes = labels des champs, valeurs formatées
  (dates avec calendrier si non grégorien, lieux = nom_long, booléens Oui/Non)
- Route GET export/source/{source}/csv → export.source.csv
- Boutons ↓ CSV et ↓ GEDCOM dans la section relevés de la fiche source

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 19:39:21 +02:00
parent 79bbf3671a
commit fdd81977c2
3 changed files with 78 additions and 6 deletions
+18 -6
View File
@@ -134,12 +134,24 @@
<div class="bg-white dark:bg-gray-800 shadow rounded-lg overflow-hidden">
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between">
<h3 class="font-medium text-gray-900 dark:text-white">Relevés ({{ $source->releves->count() }})</h3>
@can('create', [App\Models\Releve::class, $source])
<a href="{{ route('sources.releves.create', $source) }}"
class="px-3 py-1.5 bg-indigo-600 text-white text-xs rounded-md hover:bg-indigo-700">
+ Nouveau relevé
</a>
@endcan
<div class="flex items-center gap-2">
@if($source->releves->isNotEmpty())
<a href="{{ route('export.source.csv', $source) }}"
class="px-3 py-1.5 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 text-xs rounded-md hover:bg-gray-50 dark:hover:bg-gray-600">
CSV
</a>
<a href="{{ route('export.source', $source) }}"
class="px-3 py-1.5 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 text-xs rounded-md hover:bg-gray-50 dark:hover:bg-gray-600">
GEDCOM
</a>
@endif
@can('create', [App\Models\Releve::class, $source])
<a href="{{ route('sources.releves.create', $source) }}"
class="px-3 py-1.5 bg-indigo-600 text-white text-xs rounded-md hover:bg-indigo-700">
+ Nouveau relevé
</a>
@endcan
</div>
</div>
@if($source->releves->isEmpty())
<p class="px-6 py-8 text-center text-gray-400 dark:text-gray-500 text-sm">Aucun relevé pour cette source.</p>