From c960ba14b1341ebca1b7d908338add6f3a37b29e Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 11 Aug 2026 15:13:28 +0700 Subject: [PATCH] Update Demografi Petani --- .../Dashboard/DemografiPetaniController.php | 138 ++ .../dashboard/demografi-petani.blade.php | 2025 +++++++---------- routes/web.php | 1 + 3 files changed, 982 insertions(+), 1182 deletions(-) diff --git a/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php b/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php index 24729b0..93c98b3 100644 --- a/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php +++ b/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php @@ -97,6 +97,10 @@ class DemografiPetaniController extends Controller ], 'pendidikan' => $pendidikan, 'komoditas_utama' => [ + 'ids' => $komoditasUtama + ->pluck('id') + ->values(), + 'labels' => $komoditasUtama ->pluck('nama') ->values(), @@ -119,4 +123,138 @@ class DemografiPetaniController extends Controller // dd($daftarPetani); return view('dashboard.demografi-petani', compact('data', 'daftarPetani')); } + + public function data(Request $request) + { + $query = Petani::with('komoditas')->withSum( 'lahans as total_luas_lahan', 'luas_lahan'); + + if ($request->filled('search')) { + $search = $request->search; + $query->where('nama', 'ILIKE', "%{$search}%" ); + } + + $pendapatanPerPetani = PendapatanKomoditas::with('sosialEkonomi.petani')->get() + ->filter(fn ($item) => $item->sosialEkonomi?->petani) + ->groupBy(fn ($item) => $item->sosialEkonomi->petani_id) + ->map(fn ($items) => $items->sum('pendapatan')); + + if ($request->has('gender') && $request->gender !== '') { + $query->where('jenis_kelamin', $request->gender ); + } + + if ($request->filled('umur')) { + match ($request->umur) { + 'kurang_30' => $query->whereNotNull('tanggal_lahir') + ->whereRaw("EXTRACT( YEAR FROM AGE( CURRENT_DATE, tanggal_lahir)) < 30"), + '30_39' => $query->whereNotNull('tanggal_lahir') + ->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) BETWEEN 30 AND 39"), + '40_49' => $query->whereNotNull('tanggal_lahir') + ->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) BETWEEN 40 AND 49"), + '50_59' => $query->whereNotNull('tanggal_lahir') + ->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) BETWEEN 50 AND 59"), + '60_keatas' => $query ->whereNotNull('tanggal_lahir') + ->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) >= 60"), + default => null + }; + } + + if ($request->filled('pendidikan')) { + $pendidikanMap = [ + 'tidak_sekolah' => ['01_tidak_sekolah'], + 'sd' => ['02_sd'], + 'smp' => ['03_smp'], + 'sma' => ['04_sma'], + 'diploma' => ['05_diploma'], + 's1_keatas' => ['06_sarjana', '07_magister'], + ]; + + if (isset($pendidikanMap[$request->pendidikan])) { + $query->whereIn('pendidikan_terakhir', $pendidikanMap[$request->pendidikan]); + } + } + + if ($request->filled('komoditas')) { + $query->where('komoditas_id', $request->komoditas); + } + + if ($request->filled('penghasilan')) { + $filteredPendapatan = + match ($request->penghasilan) { + 'kurang_1' => $pendapatanPerPetani ->filter(fn ($value) => $value < 1000000 ), + '1_3' => $pendapatanPerPetani->filter( fn ($value) => $value >= 1000000 && $value <= 3000000 ), + '3_5' => $pendapatanPerPetani->filter(fn ($value) => $value > 3000000 && $value <= 5000000 ), + '5_10' => $pendapatanPerPetani->filter(fn ($value) => $value > 5000000 && $value <= 10000000 ), + 'lebih_10' => $pendapatanPerPetani->filter(fn ($value) => $value > 10000000 ), + default => collect() + }; + + $query->whereIn('id', $filteredPendapatan->keys()->values()->all()); + } + + if ($request->filled('luas_lahan')) { + $lahanQuery = Lahan::query()->select('petani_id')->groupBy('petani_id'); + match ($request->luas_lahan) { + 'kurang_05' => $lahanQuery->havingRaw('SUM(luas_lahan) < 5000' ), + '05_1' => $lahanQuery->havingRaw('SUM(luas_lahan) >= 5000 AND SUM(luas_lahan) <= 10000' ), + '1_2' => $lahanQuery->havingRaw('SUM(luas_lahan) > 10000 AND SUM(luas_lahan) <= 20000'), + 'lebih_2' => $lahanQuery->havingRaw('SUM(luas_lahan) > 20000'), + default => null + }; + $query->whereIn('id', $lahanQuery->pluck('petani_id')); + } + + $daftarPetani = $query->orderBy('id')->paginate(10); + + $pendidikanLabels = [ + '01_tidak_sekolah' => 'Tidak Sekolah', + '02_sd' => 'SD', + '03_smp' => 'SMP', + '04_sma' => 'SMA', + '05_diploma' => 'Diploma', + '06_sarjana' => 'Sarjana', + '07_magister' => 'Magister', + ]; + + $rows = collect($daftarPetani->items())->map(function ($petani) use ( + $pendidikanLabels, + $pendapatanPerPetani + ) { + $umur = $petani->tanggal_lahir ? \Carbon\Carbon::parse($petani->tanggal_lahir)->age : null; + $pendidikanRaw = $petani->getRawOriginal('pendidikan_terakhir'); + $pendapatan = $pendapatanPerPetani->get($petani->id); + + $rentangPenghasilan = match (true) { + $pendapatan === null => '-', + $pendapatan < 1000000 => '< Rp1 juta', + $pendapatan <= 3000000 => 'Rp1 - 3 juta', + $pendapatan <= 5000000 => 'Rp3 - 5 juta', + $pendapatan <= 10000000 => 'Rp5 - 10 juta', + default => '> Rp10 juta', + }; + + return [ + 'id' => $petani->kode ?? $petani->id, + 'nama' => $petani->nama ?? '-', + 'jenis_kelamin' => $petani->jenis_kelamin, + 'gender' => $petani->jenis_kelamin == 1 ? 'Laki-laki' : 'Perempuan', + 'umur' => $umur, + 'komoditas' => $petani->komoditas?->nama ?? '-', + 'luas_lahan' => (float) ($petani->total_luas_lahan ?? 0 ), + 'pendidikan' => $pendidikanLabels[$pendidikanRaw ] ?? '-', + 'rentang_penghasilan' => $rentangPenghasilan, + ]; + }); + + return response()->json([ + 'data' => $rows, + 'pagination' => [ + 'current_page' => $daftarPetani->currentPage(), + 'last_page' => $daftarPetani->lastPage(), + 'per_page' => $daftarPetani->perPage(), + 'total' => $daftarPetani->total(), + 'from' => $daftarPetani->firstItem(), + 'to' => $daftarPetani->lastItem(), + ], + ]); + } } diff --git a/resources/views/dashboard/demografi-petani.blade.php b/resources/views/dashboard/demografi-petani.blade.php index a0a5994..68ed927 100644 --- a/resources/views/dashboard/demografi-petani.blade.php +++ b/resources/views/dashboard/demografi-petani.blade.php @@ -313,29 +313,53 @@ -
+
+
-
Daftar Petani
- {{ $daftarPetani->total() }} petani +
+ Daftar Petani +
+ + + {{ $daftarPetani->total() }} petani +
- Menampilkan data petani sesuai data yang tersedia + + + Menampilkan data petani sesuai data yang tersedia +
-
- - + +
+ + + + +
@@ -346,122 +370,46 @@ - ID Petani + No. Nama Petani Gender Umur Komoditas Luas Lahan Pendidikan + Rentang Pendapatan - + - @forelse ($daftarPetani as $petani) + @foreach ($daftarPetani as $petani) - @php - $umur = $petani->tanggal_lahir - ? \Carbon\Carbon::parse($petani->tanggal_lahir)->age - : null; + {{-- isi tabel kamu yang sekarang --}} - $totalLuas = $petani->lahan - ? $petani->lahan->sum('luas_lahan') - : 0; - @endphp - - - - - {{ $petani->kode ?? $petani->id }} - - - - - - {{ $petani->nama ?? '-' }} - - - - - @if ($petani->jenis_kelamin == 1) - - Laki-laki - - @else - - Perempuan - - @endif - - - - {{ $umur ? $umur . ' tahun' : '-' }} - - - - {{ $petani->komoditas?->nama ?? '-' }} - - - - {{ $petani->total_luas_lahan - ? number_format($petani->total_luas_lahan, 2, ',', '.') . ' ha' - : '-' - }} - - - - @php - $pendidikanRaw = $petani->getRawOriginal('pendidikan_terakhir'); - - $pendidikan = match ($pendidikanRaw) { - '01_tidak_sekolah' => 'Tidak Sekolah', - '02_sd' => 'SD', - '03_smp' => 'SMP', - '04_sma' => 'SMA', - '05_diploma' => 'Diploma', - '06_sarjana' => 'Sarjana', - '07_magister' => 'Magister', - default => '-', - }; - @endphp - - {{ $pendidikan }} - - - - - @empty - - - - Belum ada data petani. - - - - @endforelse + @endforeach
-