123 lines
5.6 KiB
PHP
123 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Web\Dashboard;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
|
|
use App\Models\Pertanian\Petani;
|
|
use App\Models\Pertanian\Komoditas;
|
|
use App\Models\Pertanian\Lahan;
|
|
use App\Models\Pertanian\PendapatanKomoditas;
|
|
|
|
class DemografiPetaniController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$totalPetani = Petani::count();
|
|
$petaniLakilaki = Petani::where('jenis_kelamin', 1)->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 = $totalLuasLahan && $totalPetani ? $totalLuasLahan / $totalPetani : 0;
|
|
|
|
$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'));
|
|
}
|
|
}
|