where('tahun_kegiatan', $mitigationYear) ->orderBy('created_at', 'desc') ->get(); $rows = $rows->transform(function ($a) { foreach ([ 'alokasi_apbn', 'alokasi_apbd', 'alokasi_swasta', 'alokasi_sumber_dana_lain', ] as $field) { $raw = $a->{$field} ?? '0'; $norm = str_replace('.', '', $raw); $norm = str_replace(',', '.', $norm); $a->{$field} = (float) $norm; } foreach ([ 'realisasi_apbn', 'realisasi_apbd', 'realisasi_swasta', 'realisasi_sumber_dana_lain' ] as $field) { $raw = $a->{$field} ?? '0'; $norm = str_replace('.', '', $raw); $norm = str_replace(',', '.', $norm); $a->{$field} = (int) round((float) $norm); } if (!empty($a->emission_factor)) { $raw = $a->emission_factor; $norm = str_replace('.', '', $raw); // hapus ribuan $norm = str_replace(',', '.', $norm); // ubah koma ke titik $a->emission_factor = (float) $norm; } else { $a->emission_factor = 0; } return $a; }); $totalAksi = $rows->count(); // --- JUMLAH DATA PER SEKTOR DI TAHUN TERTENTU --- $years = $rows->pluck('tahun_kegiatan')->unique()->sort()->values(); $barData = $years->map(fn($year) => [ 'year' => $year, 'jumlah' => $rows ->where('tahun_kegiatan', $year) ->groupBy('sektor') ->map(fn($group, $sector) => $group->count()) ->toArray(), ])->all(); // Budget data (tetap sesuai kebutuhan chart anggaran) $budgetData = [ 'apbn' => (float) $rows->sum('alokasi_apbn'), 'apbd' => (float) $rows->sum('alokasi_apbd'), 'swasta' => (float) $rows->sum('alokasi_swasta'), 'lainlain' => (float) $rows->sum('alokasi_sumber_dana_lain'), ]; $realisasiData = [ 'apbn' => (float) $rows->sum('realisasi_apbn'), 'apbd' => (float) $rows->sum('realisasi_apbd'), 'swasta' => (float) $rows->sum('realisasi_swasta'), 'lainlain' => (float) $rows->sum('realisasi_sumber_dana_lain'), ]; $stats = [ 'total_aksi' => $totalAksi, 'total_emisi' => (float) $rows->sum('emission_factor'), 'total_anggaran' => array_sum($budgetData), 'total_alokasi' => array_sum($realisasiData) ]; // dd($stats); $sectorBreakdown = $rows ->groupBy('sektor') ->map(function($group, $sector) use ($totalAksi) { $jumlah = $group->count(); $persen = $totalAksi > 0 ? round(($jumlah / $totalAksi) * 100, 2) : 0; return [ 'sektor' => $sector, 'jumlah' => $jumlah, 'persen' => $persen, ]; }) ->values() ->all(); $charts = [ 'aksi' => $sectorBreakdown, 'emisi' => $rows->groupBy('sektor')->map(function($g, $s) use ($rows) { $total = $rows->sum('emission_factor'); $val = $g->sum('emission_factor'); $persen = $total > 0 ? round(($val / $total) * 100, 2) : 0; return [ 'sektor' => $s, 'persen' => $persen, ]; })->values()->all(), 'anggaran' => $rows->groupBy('sektor')->map(function($g, $s) use ($budgetData) { $total = array_sum($budgetData); $val = $g->sum('alokasi_apbn') + $g->sum('alokasi_apbd') + $g->sum('alokasi_swasta') + $g->sum('alokasi_sumber_dana_lain'); $persen = $total > 0 ? round(($val / $total) * 100, 2) : 0; return [ 'sektor' => $s, 'persen' => $persen, ]; })->values()->all(), 'alokasi' => $rows->groupBy('sektor')->map(function($g, $s) use ($realisasiData) { $total = array_sum($realisasiData); $val = $g->sum('realisasi_apbn') + $g->sum('realisasi_apbd') + $g->sum('realisasi_swasta') + $g->sum('realisasi_sumber_dana_lain'); $persen = $total > 0 ? round(($val / $total) * 100, 2) : 0; return [ 'sektor' => $s, 'persen' => $persen, ]; })->values()->all(), ]; return [ 'mitigationYear' => $mitigationYear, 'tableData' => $rows, 'barData' => $barData, 'budgetData' => $budgetData, 'realisasiData' => $realisasiData, 'stats' => $stats, 'charts' => $charts ]; } }