Import/export CSV des lieux

Export (GET lieux/export/csv) :
- Colonnes : nom, code, type, lieu_parent (nom_long), latitude, longitude, note
- BOM UTF-8, séparateur point-virgule

Import (GET/POST lieux/import) :
- Correspondance par nom de colonne (colonne nom obligatoire)
- Résolution du parent par nom_long exact
- Résolution du type par nom exact
- Détection automatique du séparateur ; ou ,
- nom_long recalculé automatiquement par le modèle

Boutons ↓ CSV, ↑ Importer CSV et + Nouveau lieu dans la liste des lieux.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 20:06:46 +02:00
parent cdbf6d458c
commit aaf0fc2cd9
4 changed files with 206 additions and 6 deletions
+4 -1
View File
@@ -46,7 +46,10 @@ Route::middleware('auth')->group(function () {
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
Route::get('lieux/search', [LieuController::class, 'search'])->name('lieux.search');
Route::get('lieux/search', [LieuController::class, 'search'])->name('lieux.search');
Route::get('lieux/export/csv', [LieuController::class, 'exportCsv'])->name('lieux.export.csv');
Route::get('lieux/import', [LieuController::class, 'importCreate'])->name('lieux.import.create');
Route::post('lieux/import', [LieuController::class, 'importStore'])->name('lieux.import.store');
Route::resource('lieux', LieuController::class)->parameters(['lieux' => 'lieu']);
Route::resource('sources', SourceController::class);