solve dashboard indikator pertanian
This commit is contained in:
@@ -26,30 +26,14 @@ class IndikatorPertanianController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$kabupatenOptions = $this->kabupatenOptions();
|
||||
$ngadaOption = collect($kabupatenOptions)->first(
|
||||
fn ($option) => str_contains(strtolower($option['label']), 'ngada')
|
||||
);
|
||||
$initialFilters = $this->selectedFilters($request, $ngadaOption['value'] ?? 'all');
|
||||
|
||||
$totalPetani = $this->applyPetaniFilters(Petani::query(), $initialFilters)->count();
|
||||
$totalLuasLahan = ((float) $this->applyLahanFilters(Lahan::query(), $initialFilters)->sum('luas_lahan')) / 10000;
|
||||
$rataRataLuasLahan = $totalPetani > 0
|
||||
? $totalLuasLahan / $totalPetani
|
||||
: 0;
|
||||
$totalProduksiKg = $this->totalProduksiKg($initialFilters);
|
||||
$rataRataProduksiKg = $totalPetani > 0
|
||||
? $totalProduksiKg / $totalPetani
|
||||
: 0;
|
||||
$rataRataProduktivitas = $totalLuasLahan > 0
|
||||
? $totalProduksiKg / $totalLuasLahan
|
||||
: 0;
|
||||
$initialFilters = $this->selectedFilters($request, $this->defaultKabupatenId());
|
||||
$payload = $this->dashboardPayload($initialFilters);
|
||||
|
||||
$filterOptions = [
|
||||
[
|
||||
'key' => 'kabupaten',
|
||||
'label' => 'Kabupaten',
|
||||
'options' => $kabupatenOptions,
|
||||
'options' => $this->kabupatenOptions(),
|
||||
'icon' => 'tabler-map-pin',
|
||||
'readonly' => true,
|
||||
],
|
||||
@@ -75,7 +59,55 @@ class IndikatorPertanianController extends Controller
|
||||
],
|
||||
];
|
||||
|
||||
$summaryData = [
|
||||
return view('dashboard.indikator-pertanian', [
|
||||
'title' => 'Indikator Pertanian',
|
||||
'initialFilters' => $initialFilters,
|
||||
'filterOptions' => $filterOptions,
|
||||
] + $payload);
|
||||
}
|
||||
|
||||
public function data(Request $request)
|
||||
{
|
||||
$filters = $this->selectedFilters($request, $this->defaultKabupatenId());
|
||||
|
||||
return response()->json([
|
||||
'filters' => $filters,
|
||||
] + $this->dashboardPayload($filters));
|
||||
}
|
||||
|
||||
private function defaultKabupatenId(): string
|
||||
{
|
||||
$ngadaOption = collect($this->kabupatenOptions())->first(
|
||||
fn ($option) => str_contains(strtolower($option['label']), 'ngada')
|
||||
);
|
||||
|
||||
return $ngadaOption['value'] ?? 'all';
|
||||
}
|
||||
|
||||
private function dashboardPayload(array $filters): array
|
||||
{
|
||||
return [
|
||||
'summaryData' => $this->summaryData($filters),
|
||||
'chartData' => $this->chartData($filters),
|
||||
];
|
||||
}
|
||||
|
||||
private function summaryData(array $filters): array
|
||||
{
|
||||
$totalPetani = $this->applyPetaniFilters(Petani::query(), $filters)->count();
|
||||
$totalLuasLahan = ((float) $this->applyLahanFilters(Lahan::query(), $filters)->sum('luas_lahan')) / 10000;
|
||||
$rataRataLuasLahan = $totalPetani > 0
|
||||
? $totalLuasLahan / $totalPetani
|
||||
: 0;
|
||||
$totalProduksiKg = $this->totalProduksiKg($filters);
|
||||
$rataRataProduksiKg = $totalPetani > 0
|
||||
? $totalProduksiKg / $totalPetani
|
||||
: 0;
|
||||
$rataRataProduktivitas = $totalLuasLahan > 0
|
||||
? $totalProduksiKg / $totalLuasLahan
|
||||
: 0;
|
||||
|
||||
return [
|
||||
[
|
||||
'value' => number_format($totalPetani, 0, ',', '.'),
|
||||
'label' => 'Petani Terdata',
|
||||
@@ -105,30 +137,27 @@ class IndikatorPertanianController extends Controller
|
||||
'variant' => 'info',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
return view('dashboard.indikator-pertanian', [
|
||||
'title' => 'Indikator Pertanian',
|
||||
'initialFilters' => $initialFilters,
|
||||
'filterOptions' => $filterOptions,
|
||||
'summaryData' => $summaryData,
|
||||
'chartData' => [
|
||||
'petaniPerKomoditas' => $this->petaniPerKomoditasChart($initialFilters),
|
||||
'luasLahanPerKecamatan' => $this->luasLahanPerKecamatanChart($initialFilters),
|
||||
'kondisiTanaman' => $this->kondisiTanamanChart($initialFilters),
|
||||
'statusKepemilikanLahan' => $this->statusKepemilikanLahanChart($initialFilters),
|
||||
'seranganHama' => $this->seranganHamaChart($initialFilters),
|
||||
'penyakitTanaman' => $this->penyakitTanamanChart($initialFilters),
|
||||
'keparahanSerangan' => $this->keparahanSeranganChart($initialFilters),
|
||||
'statusHakKelolaLahan' => $this->statusHakKelolaLahanChart($initialFilters),
|
||||
'praktikPemupukan' => $this->praktikPemupukanChart($initialFilters),
|
||||
'produksiPerKomoditas' => $this->produksiPerKomoditasChart($initialFilters),
|
||||
'produktivitasPerKomoditas' => $this->produktivitasPerKomoditasChart($initialFilters),
|
||||
'luasPanenPerKomoditas' => $this->luasPanenPerKomoditasChart($initialFilters),
|
||||
'statusPanen' => $this->statusPanenChart($initialFilters),
|
||||
'surveyProduktivitasHa' => $this->surveyProduktivitasByUnitChart($initialFilters, 'ha_tahun'),
|
||||
'surveyProduktivitasPohon' => $this->surveyProduktivitasByUnitChart($initialFilters, 'pohon_tahun'),
|
||||
],
|
||||
]);
|
||||
private function chartData(array $filters): array
|
||||
{
|
||||
return [
|
||||
'petaniPerKomoditas' => $this->petaniPerKomoditasChart($filters),
|
||||
'luasLahanPerKecamatan' => $this->luasLahanPerKecamatanChart($filters),
|
||||
'kondisiTanaman' => $this->kondisiTanamanChart($filters),
|
||||
'statusKepemilikanLahan' => $this->statusKepemilikanLahanChart($filters),
|
||||
'seranganHama' => $this->seranganHamaChart($filters),
|
||||
'penyakitTanaman' => $this->penyakitTanamanChart($filters),
|
||||
'keparahanSerangan' => $this->keparahanSeranganChart($filters),
|
||||
'statusHakKelolaLahan' => $this->statusHakKelolaLahanChart($filters),
|
||||
'praktikPemupukan' => $this->praktikPemupukanChart($filters),
|
||||
'produksiPerKomoditas' => $this->produksiPerKomoditasChart($filters),
|
||||
'produktivitasPerKomoditas' => $this->produktivitasPerKomoditasChart($filters),
|
||||
'luasPanenPerKomoditas' => $this->luasPanenPerKomoditasChart($filters),
|
||||
'statusPanen' => $this->statusPanenChart($filters),
|
||||
'surveyProduktivitasHa' => $this->surveyProduktivitasByUnitChart($filters, 'ha_tahun'),
|
||||
'surveyProduktivitasPohon' => $this->surveyProduktivitasByUnitChart($filters, 'pohon_tahun'),
|
||||
];
|
||||
}
|
||||
|
||||
private function selectedFilters(Request $request, string $defaultKabupaten): array
|
||||
|
||||
Reference in New Issue
Block a user