diff --git a/app/Http/Controllers/CarteController.php b/app/Http/Controllers/CarteController.php
new file mode 100644
index 0000000..9dfbd7f
--- /dev/null
+++ b/app/Http/Controllers/CarteController.php
@@ -0,0 +1,56 @@
+whereNotNull('longitude')
+ ->whereHas('sources.releves')
+ ->with([
+ 'sources' => function ($q) {
+ $q->withCount('releves')
+ ->select('id', 'nom', 'lieu_id', 'status', 'annee_debut', 'annee_fin')
+ ->orderBy('nom');
+ },
+ ])
+ ->get()
+ ->map(function (Lieu $lieu) {
+ $relevesTotal = $lieu->sources->sum('releves_count');
+ return [
+ 'id' => $lieu->id,
+ 'nom' => $lieu->nom_long ?? $lieu->nom,
+ 'lat' => (float) $lieu->latitude,
+ 'lng' => (float) $lieu->longitude,
+ 'sources_count' => $lieu->sources->count(),
+ 'releves_count' => $relevesTotal,
+ 'sources' => $lieu->sources->map(fn ($s) => [
+ 'id' => $s->id,
+ 'nom' => $s->nom,
+ 'releves_count' => $s->releves_count,
+ 'status' => $s->status->label(),
+ 'status_value' => $s->status->value,
+ 'annees' => $s->annee_debut
+ ? ($s->annee_debut === $s->annee_fin || ! $s->annee_fin
+ ? (string) $s->annee_debut
+ : "{$s->annee_debut}–{$s->annee_fin}")
+ : null,
+ ]),
+ ];
+ });
+
+ return response()->json($lieux);
+ }
+}
diff --git a/app/Models/Lieu.php b/app/Models/Lieu.php
index e8bca2a..4dd3ade 100644
--- a/app/Models/Lieu.php
+++ b/app/Models/Lieu.php
@@ -5,6 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\Relations\HasManyThrough;
class Lieu extends Model
{
@@ -32,6 +33,16 @@ class Lieu extends Model
return $this->hasMany(Section::class);
}
+ public function sources(): HasMany
+ {
+ return $this->hasMany(Source::class);
+ }
+
+ public function releves(): HasManyThrough
+ {
+ return $this->hasManyThrough(Releve::class, Source::class);
+ }
+
public function calculerNomLong(): string
{
$noms = [$this->nom];
diff --git a/resources/views/carte/index.blade.php b/resources/views/carte/index.blade.php
new file mode 100644
index 0000000..db2dd6e
--- /dev/null
+++ b/resources/views/carte/index.blade.php
@@ -0,0 +1,170 @@
+Carte des relevés
+
+