From b4089d72b3c100d87cd59acc0b70219014ba663b Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Fri, 7 Aug 2026 11:17:53 +0700 Subject: [PATCH] Update Dashboard Demografi Petani --- .../Dashboard/DemografiPetaniController.php | 123 ++ .../dashboard/demografi-petani.blade.php | 1569 +++++++++++++++++ routes/web.php | 1 + 3 files changed, 1693 insertions(+) create mode 100644 app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php create mode 100644 resources/views/dashboard/demografi-petani.blade.php diff --git a/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php b/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php new file mode 100644 index 0000000..062df77 --- /dev/null +++ b/app/Http/Controllers/Web/Dashboard/DemografiPetaniController.php @@ -0,0 +1,123 @@ +count(); + $petaniPerempuan = Petani::where('jenis_kelamin', 0)->count(); + $totalKomoditas = Petani::whereNotNull('komoditas_id') + ->distinct() + ->count('komoditas_id'); + $totalLuasLahan = Lahan::has('petani') + ->sum('luas_lahan'); + $ratarataLuasLahan = Lahan::has('petani') + ->avg('luas_lahan'); + + $umurKurang30 = Petani::whereNotNull('tanggal_lahir')->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) < 30")->count(); + $umur30sampai39 = Petani::whereNotNull('tanggal_lahir')->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) BETWEEN 30 AND 39")->count(); + $umur40sampai49 = Petani::whereNotNull('tanggal_lahir')->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) BETWEEN 40 AND 49")->count(); + $umur50sampai59 = Petani::whereNotNull('tanggal_lahir')->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) BETWEEN 50 AND 59")->count(); + $umur60keatas = Petani::whereNotNull('tanggal_lahir')->whereRaw("EXTRACT(YEAR FROM AGE(CURRENT_DATE, tanggal_lahir)) >= 60")->count(); + + $pendidikanCounts = Petani::whereNotNull('pendidikan_terakhir') + ->select('pendidikan_terakhir', DB::raw('COUNT(*) as total')) + ->groupBy('pendidikan_terakhir') + ->pluck('total', 'pendidikan_terakhir'); + + $pendidikan = [ + 'tidak_sekolah' => (int) ($pendidikanCounts['01_tidak_sekolah'] ?? 0), + 'sd' => (int) ($pendidikanCounts['02_sd'] ?? 0), + 'smp' => (int) ($pendidikanCounts['03_smp'] ?? 0), + 'sma' => (int) ($pendidikanCounts['04_sma'] ?? 0), + 'diploma' => (int) ($pendidikanCounts['05_diploma'] ?? 0), + + 's1_keatas' => + (int) ($pendidikanCounts['06_sarjana'] ?? 0) + + (int) ($pendidikanCounts['07_magister'] ?? 0), + ]; + + $komoditasUtama = Komoditas::query() + ->whereHas('petani') + ->withCount('petani') + ->orderByDesc('petani_count') + ->get(['id', 'nama']); + + $luasLahanPerPetani = Lahan::has('petani') + ->select('petani_id') + ->selectRaw('SUM(luas_lahan) as total_luas') + ->groupBy('petani_id') + ->get(); + + $luasLahan = [ + 'kurang_05' => $luasLahanPerPetani->filter(fn ($item) => $item->total_luas < 5000)->count(), + '05_1' => $luasLahanPerPetani->filter(fn ($item) => $item->total_luas >= 5000 && $item->total_luas <= 10000)->count(), + '1_2' => $luasLahanPerPetani->filter(fn ($item) => $item->total_luas > 10000 && $item->total_luas <= 20000)->count(), + 'lebih_2' => $luasLahanPerPetani->filter(fn ($item) => $item->total_luas > 20000)->count(), + ]; + + $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')); + + $penghasilan = [ + 'kurang_1' => $pendapatanPerPetani->filter(fn ($value) => $value < 1000000)->count(), + '1_3' => $pendapatanPerPetani->filter(fn ($value) => $value >= 1000000 && $value <= 3000000)->count(), + '3_5' => $pendapatanPerPetani->filter(fn ($value) => $value > 3000000 && $value <= 5000000)->count(), + '5_10' => $pendapatanPerPetani->filter(fn ($value) => $value > 5000000 && $value <= 10000000)->count(), + 'lebih_10' => $pendapatanPerPetani->filter(fn ($value) => $value > 10000000)->count(), + ]; + + $data = [ + 'total_petani' => $totalPetani, + 'petani_lakilaki' => $petaniLakilaki, + 'petani_perempuan' => $petaniPerempuan, + 'total_komoditas' => $totalKomoditas, + 'total_luas_lahan' => $totalLuasLahan, + 'ratarata_luas_lahan' => $ratarataLuasLahan, + 'kelompok_umur' => [ + 'kurang_30' => $umurKurang30, + '30_39' => $umur30sampai39, + '40_49' => $umur40sampai49, + '50_59' => $umur50sampai59, + '60_keatas' => $umur60keatas, + ], + 'pendidikan' => $pendidikan, + 'komoditas_utama' => [ + 'labels' => $komoditasUtama + ->pluck('nama') + ->values(), + + 'series' => $komoditasUtama + ->pluck('petani_count') + ->map(fn ($value) => (int) $value) + ->values(), + ], + 'luas_lahan' => $luasLahan, + 'penghasilan' => $penghasilan, + ]; + + $daftarPetani = Petani::with([ + 'komoditas' + ]) + ->withSum('lahans as total_luas_lahan', 'luas_lahan') + ->orderBy('id') + ->paginate(10); + // dd($daftarPetani); + return view('dashboard.demografi-petani', compact('data', 'daftarPetani')); + } +} diff --git a/resources/views/dashboard/demografi-petani.blade.php b/resources/views/dashboard/demografi-petani.blade.php new file mode 100644 index 0000000..3605593 --- /dev/null +++ b/resources/views/dashboard/demografi-petani.blade.php @@ -0,0 +1,1569 @@ +@extends('layout.main') + +@push('styles') + +