Update Demografi Petani
This commit is contained in:
@@ -97,6 +97,10 @@ class DemografiPetaniController extends Controller
|
|||||||
],
|
],
|
||||||
'pendidikan' => $pendidikan,
|
'pendidikan' => $pendidikan,
|
||||||
'komoditas_utama' => [
|
'komoditas_utama' => [
|
||||||
|
'ids' => $komoditasUtama
|
||||||
|
->pluck('id')
|
||||||
|
->values(),
|
||||||
|
|
||||||
'labels' => $komoditasUtama
|
'labels' => $komoditasUtama
|
||||||
->pluck('nama')
|
->pluck('nama')
|
||||||
->values(),
|
->values(),
|
||||||
@@ -119,4 +123,138 @@ class DemografiPetaniController extends Controller
|
|||||||
// dd($daftarPetani);
|
// dd($daftarPetani);
|
||||||
return view('dashboard.demografi-petani', compact('data', '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(),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -47,6 +47,7 @@ Route::middleware('auth')
|
|||||||
Route::get('/dashboard/petani', [App\Http\Controllers\Web\Dashboard\ProfilPetaniController::class, 'index'])->name('dashboard.petani');
|
Route::get('/dashboard/petani', [App\Http\Controllers\Web\Dashboard\ProfilPetaniController::class, 'index'])->name('dashboard.petani');
|
||||||
Route::get('/dashboard/bumdes', [App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class, 'index'])->name('dashboard.bumdes');
|
Route::get('/dashboard/bumdes', [App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class, 'index'])->name('dashboard.bumdes');
|
||||||
Route::get('/dashboard/petani/demografi', [App\Http\Controllers\Web\Dashboard\DemografiPetaniController::class, 'index'])->name('dashboard.demografi-petani');
|
Route::get('/dashboard/petani/demografi', [App\Http\Controllers\Web\Dashboard\DemografiPetaniController::class, 'index'])->name('dashboard.demografi-petani');
|
||||||
|
Route::get('/dashboard/petani/demografi/table',[App\Http\Controllers\Web\Dashboard\DemografiPetaniController::class, 'data'])->name('dashboard.demografi-petani.data');
|
||||||
Route::get('/dashboard/petani/indikator-pertanian', [App\Http\Controllers\Web\Dashboard\IndikatorPertanianController::class, 'index'])->name('dashboard.indikator-pertanian');
|
Route::get('/dashboard/petani/indikator-pertanian', [App\Http\Controllers\Web\Dashboard\IndikatorPertanianController::class, 'index'])->name('dashboard.indikator-pertanian');
|
||||||
|
|
||||||
Route::get('/dashboard/petani/indeks', [App\Http\Controllers\Web\Dashboard\IndeksPetaniController::class, 'index'])->name('dashboard.indeks-petani');
|
Route::get('/dashboard/petani/indeks', [App\Http\Controllers\Web\Dashboard\IndeksPetaniController::class, 'index'])->name('dashboard.indeks-petani');
|
||||||
|
|||||||
Reference in New Issue
Block a user