From a3f7cb46694f0f2404b0fe7fd3726375d4f49d76 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Thu, 20 Aug 2026 01:52:05 +0700 Subject: [PATCH] filter segmen --- .../Web/Dashboard/IndeksPetaniController.php | 80 +++++++++++++------ .../views/dashboard/indeks-petani.blade.php | 48 +++-------- 2 files changed, 69 insertions(+), 59 deletions(-) diff --git a/app/Http/Controllers/Web/Dashboard/IndeksPetaniController.php b/app/Http/Controllers/Web/Dashboard/IndeksPetaniController.php index 2a90a62..a7ec362 100644 --- a/app/Http/Controllers/Web/Dashboard/IndeksPetaniController.php +++ b/app/Http/Controllers/Web/Dashboard/IndeksPetaniController.php @@ -66,9 +66,34 @@ class IndeksPetaniController extends Controller ->when($filters['kabupatenKota_id'], fn($q, $id) => $q->where('master_kecamatan.kabupaten_kota_id', $id)) ->when($filters['kecamatan_id'], fn($q, $id) => $q->where('master_desa_kelurahan.kecamatan_id', $id)) ->when($filters['desaKelurahan_id'], fn($q, $id) => $q->where('petani.desa_kelurahan_id', $id)) - ->when($filters['komoditas_id'], fn($q, $id) => $q->where('petani.komoditas_id', $id)) ->whereIn('petani.komoditas_id', $komoditas); + if ($filters['segmen']) { + $skor->where(function ($q) use ($filters) { + match ($filters['segmen']) { + 'Penggerak' => $q->where('skor_kesiapan_adopsi', '>=', 4), + 'Perintis' => $q->where(function($q) { + $q->where('skor_kesiapan_adopsi', '>=', 3) + ->where('skor_kesiapan_adopsi', '<', 4); + }), + 'Pemerhati' => $q->where(function($q) { + $q->where('skor_kesiapan_adopsi', '>=', 2) + ->where('skor_kesiapan_adopsi', '<', 3); + }), + 'Pemula' => $q->where(function($q) { + $q->where('skor_kesiapan_adopsi', '>=', 1) + ->where('skor_kesiapan_adopsi', '<', 2); + }), + 'Belum Lengkap' => $q->where(function ($q) { + $q->whereNull('skor_kesiapan_adopsi') + ->orWhere('skor_kesiapan_adopsi', '<', 1); + }), + + default => null, + }; + }); + } + return $skor; } @@ -596,28 +621,37 @@ class IndeksPetaniController extends Controller ->whereIn('komoditas_id', $komoditas->pluck('id')) ->get(); - $data = $daftarPetani->map(function ($item) use ($segmentStyles) { - $segmen = $item->skor - ? $item->segmen() - : null; - $style = $segmentStyles[$segmen] - ?? ['color' => 'secondary']; - - return [ - 'id' => $item->id, - 'nama' => $item->nama, - 'desa' => $item->desaKelurahan?->nama, - 'desa_kelurahan_id' => $item->desa_kelurahan_id, - 'komoditas' => $item->komoditas?->nama, - 'luas_lahan' => $item->lahans?->sum('luas_lahan') ?? 0, - 'skor' => $item->skor - ? $item->skor->skor_kesiapan_adopsi - : null, - 'segmen' => $segmen, - 'color' => $style['color'], - 'url' => route('dashboard.profil-petani', $item->id), - ]; - }); + $data = $daftarPetani + ->filter(function ($item) use ($filters) { + if (!$filters['segmen']) { + return true; + } + $segmen = $item->skor ? $item->segmen() : 'Belum Lengkap'; + return $segmen === $filters['segmen']; + }) + ->map(function ($item) use ($segmentStyles) { + $segmen = $item->skor + ? $item->segmen() + : null; + $style = $segmentStyles[$segmen] + ?? ['color' => 'secondary']; + + return [ + 'id' => $item->id, + 'nama' => $item->nama, + 'desa' => $item->desaKelurahan?->nama, + 'desa_kelurahan_id' => $item->desa_kelurahan_id, + 'komoditas' => $item->komoditas?->nama, + 'luas_lahan' => $item->lahans?->sum('luas_lahan') ?? 0, + 'skor' => $item->skor + ? $item->skor->skor_kesiapan_adopsi + : null, + 'segmen' => $segmen, + 'color' => $style['color'], + 'url' => route('dashboard.profil-petani', $item->id), + ]; + }) + ->values(); return response()->json($data); } diff --git a/resources/views/dashboard/indeks-petani.blade.php b/resources/views/dashboard/indeks-petani.blade.php index dac6d49..3eba5a0 100644 --- a/resources/views/dashboard/indeks-petani.blade.php +++ b/resources/views/dashboard/indeks-petani.blade.php @@ -123,7 +123,16 @@ $provinsi = $desaKelurahan - +
+ +